内连接、自然连接和等值连接

Inner Join, Natural Joins and Equi Join

我是联接的新手,无法理解内部联接、自然联接和等值联接之间的区别和数学原理。它总是使用谓词变成较小结果的笛卡尔积吗?

有人可以举例说明这三个联接的基本工作原理吗?

A 和 B 的内部联接根据联接谓词合并 A 中一行的列和 B 中一行的列。例如,"sempai" join: SELECT ... FROM people A INNER JOIN people B ON A.age > B.age 会将每个人与他们的后辈配对; A中不会选出最低级的人,B中不会选出最高级别的人,因为没有匹配的行。

等值连接是一种特殊的连接,连接关系是相等的。最后一段中的 "sempai" 连接不是等值连接;但 "same age" 加入会。尽管通常它会用于外部关系(主键上的相等连接),例如 SELECT ... FROM person A INNER JOIN bicycle B ON A.bicycle_id = B.id。 (请注意这不是一个合适的模型,人们有时会有多辆自行车......有点愚蠢的例子,我相信我可以找到更好的。)

自然联接是一种特殊的等值联接,它假设所有共享列都相等(没有明确声明谓词)。因此,例如 SELECT ... FROM people A INNER JOIN bicycles B ON A.bicycle_id = B.bicycle_id 等同于 SELECT ... FROM people A NATURAL JOIN bicycles B,假设 bicycle_id 是两个 table 中唯一存在的列。我认识的大多数人不会使用它,原因有几个——更常见的做法是让主键不重复 table 名称,即 bicycles.id 而不是 bicycles.bicycles_id;外键可能不反映 table 名称(例如 person.overseer_id 而不是 person.person_id,原因很明显),并且(忘记了我的我,但谢天谢地被 Sudipta Mondal 记住了)可能是名称相同但加入的意义为零的无关列,例如 creation_time。由于这些原因,我一生中从未使用过NATURAL JOIN

Equi/natural 联接不一定是内部联接。