当两个表只有一个公共属性时,我可以理解自然连接是如何工作的。如果他们有两个怎么办? 表1有3个属性: A , B ,C 表2有3个属性: A , B ,D
表1中的前两行:
1 2 3
4 5 6
表2中的前两行:
1 3 4
8 5 8
两个表之间自然连接的结果是什么?
答案 0 :(得分:6)
如果您的上述两条记录,则不会匹配任何内容。它将寻找A& A的情况。左表中的B匹配A& B在右表中。
答案 1 :(得分:2)
Natural Join
是INNER JOIN
的变体,其中连接条件隐含在两个表的公共列上。在您的情况下,Natural Join
中的查询可以写成如下,但不会返回任何结果,因为它会尝试匹配A和B
select *
from table1
natural join table2
同样可以写在Inner Join
,如下所示
select t1.*
from table1 t1
inner join table2 t2
on t1.a = t2.a and t1.b = t2.b
亲眼看看Fiddle Demo
答案 2 :(得分:0)
我正在为认证做研究,我对此也有疑问。 自然联接总是比较表中的相似列。 如果您有一对相似的列,它将进行比较并显示匹配项。机会更高。现在,如果您有2对,它将进行比较,并且结果较少。内容必须相等。自己创建表并进行测试
答案 3 :(得分:0)
实际上自然加入是一种东西(交叉产品+一些条件)
自然连接的简称为:
Select * from Table_A NATURAL JOIN Table_B
因此,另一种写法是:
Select * from Table_A , Table_B where (Table_A.id = Table_B .id)
这等效于自然联接
(Table_A , Table_B)
表示叉积
(Table_A.id = Table_B .id)
象征着共同的条件
答案 4 :(得分:-1)
我将尝试根据用例来解释 NATURAL JOIN 和 INNER JOIN 之间的区别。
我们有两个表 T1(A, B, C, D) & T2(B, C, X, Y),其中字母 (A, B, C, D, X, Y) 代表字段/属性。
案例 1:假设我必须在两个表中提取所有在“C”中具有共同条目的行。
查询:SELECT * FROM T1 INNER JOIN T2 ON T1.C=T2.C;
解释为什么自然联接在上述情况下不起作用--
假设我们使用 NATURAL JOIN。
选择 * 从 T1 自然连接 T2;
我们知道,T1 和 T2 有两个相似的属性/字段('B' 和 'C')
因此,NATURAL JOIN 将查找所有此类条目,其中
(T1.B=T2.B) AND (T1.C=T2.C)
只有满足上述条件的行才会被包含在结果集中。
然而,出于我们的目的,我们只需要行具有字段“C”的公共条目。