我是新加入,无法理解的区别和数学工作背后的内部连接,自然连接和马联接。它总是一个笛卡儿乘积,使用谓词将其制成一个较小的结果吗?
有谁能用例子详细说明这三个联接的基本工作吗?
发布于 2018-06-21 05:24:43
A和B的内部联接基于联接谓词组合A行和B行的列。例如,一个"sempai“连接:SELECT ... FROM people A INNER JOIN people B ON A.age > B.age将对每个人与每个人是他们的下级;最年轻的人将不会从A中选择,而最年长的人将不会从B中选择,因为没有匹配的行。
Equi是一个特殊的连接,其中连接关系是相等的。最后一段中的"sempai“联接不是equi连接,而是”同龄“连接。虽然它通常用于外部关系(主键上的equi连接),例如SELECT ... FROM person A INNER JOIN bicycle B ON A.bicycle_id = B.id。(不要注意这不是一个合适的模式,人们有时有多辆自行车.一个愚蠢的例子,我相信我会找到一个更好的例子。)
自然联接是一种特殊的equi连接,它假定所有共享列相等(没有显式声明谓词)。例如,假设SELECT ... FROM people A INNER JOIN bicycles B ON A.bicycle_id = B.bicycle_id是两个表中唯一的列,则bicycle_id等同于SELECT ... FROM people A NATURAL JOIN bicycles B。由于几个原因,我认识的大多数人都不会使用它--让主键不重复表名(即bicycles.id而不是bicycles.bicycles_id)是一种更常见的做法;外键可能不反映表名(例如,person.overseer_id而不是person.person_id,因为明显的原因),以及(忘记了我的我,但幸运的是Sudipta Mondal记住了),可能有一些不相关的列被命名相同,但是加入起来没有任何意义,比如creation_time。由于这些原因,我一生中从未使用过NATURAL JOIN。
赤道/自然连接不一定是内在的。
https://stackoverflow.com/questions/50960752
复制相似问题