在用SQL编写时,我如何知道我应该使用交叉乘积(交叉连接,笛卡尔乘积)还是自然连接?
CROSS JOIN
从两个表中创建所有可能的行配对,无论它们是否匹配。对于叉积,您不使用任何联接条件,因为对于任何配对,该条件总是成立的。
使用CROSS JOIN
的一个例子是:您有ShoeColors和ShoeSize的表,您想知道有多少可能的组合。SELECT COUNT(*) FROM ShoeColors CROSS JOIN ShoeSizes;
NATURAL JOIN
与INNER JOIN
类似,但它假定条件是相等的,并适用于两个表中出现的所有列名。我从不使用NATURAL JOIN
,因为我不能仅仅因为列具有相同的名称就认为它们应该是相关的。这需要一个非常严格的列命名约定,而且实际上没有一个现实世界的项目有这样的规则。
简单地说,交叉联接在两个不同表的行之间执行笛卡尔乘积。。其中列名可能匹配也可能不匹配。。。。。。但在自然联接中,为了执行联接操作,两个表的列名必须匹配
自然联接是一种交叉联接,其中where条件位于两个表中具有相同名称的列上。
假设您有两个表:A和B
>>select * from A;
col1 col2 col3
---------------
1 2 1
1 4 0
>>select * from B;
col1 col2
---------
1 2
1 3
>>select * from A cross join B;
col1 col2 col3 col1_2 col2_2
-----------------------------
1 2 1 1 2
1 2 1 1 3
1 4 0 1 2
1 4 0 1 3
>>select * from A natural join B;
col1 col2 col3
---------------
1 2 1
1 2 1
欲了解更多详细信息,请访问我的帖子。https://eduit.nuxaavi.com.mx/2021/10/16/producto-cartesiano-sql/