在编写SQL时,我如何知道是否应该使用交叉积(cross join,笛卡尔积)还是自然连接?
在编写SQL时,我如何知道是否应该使用交叉积(cross join,笛卡尔积)还是自然连接?
CROSS JOIN
会创建出两个表中所有可能的行交叉组合,不管它们是否匹配。这种情况下不需要使用任何连接条件,因为对于任何组合都成立。
一个CROSS JOIN
的例子:你有一张鞋颜色表和一张鞋尺码表,你想知道有多少种可能的组合方式。SELECT COUNT(*) FROM ShoeColors CROSS JOIN ShoeSizes;
NATURAL JOIN
与INNER JOIN
非常相似,但假设条件是相等的,并适用于在两个表中出现的所有列名。我从来不使用NATURAL JOIN
,因为我不能假设只因为列具有相同的名称,它们就应该相互关联。这将需要非常严格的列命名约定,而实际上几乎没有任何真实项目遵循这样的规定。
NATURAL JOIN
。当我试图手动查看数据并直接使用SQL客户端时,我正在编写的查询永远不需要维护,并且我对于特定情况和错误后果的信心几乎为零,我可能会使用它来节省一些打字时间。 - jpmc26自然连接是在两个表中具有相同名称的列上进行交叉连接的连接,其中条件为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/