叉积(交叉连接,笛卡尔乘积)和自然连接之间的差异



在用SQL编写时,我如何知道我应该使用交叉乘积(交叉连接,笛卡尔乘积)还是自然连接?

CROSS JOIN从两个表中创建所有可能的行配对,无论它们是否匹配。对于叉积,您不使用任何联接条件,因为对于任何配对,该条件总是成立的。

使用CROSS JOIN的一个例子是:您有ShoeColors和ShoeSize的表,您想知道有多少可能的组合。SELECT COUNT(*) FROM ShoeColors CROSS JOIN ShoeSizes;

NATURAL JOININNER 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/

最新更新