两个表中具有多个公共属性的自然连接

时间:2014-10-14 03:36:38

标签: sql natural-join

当两个表只有一个公共属性时,我可以理解自然连接是如何工作的。如果他们有两个怎么办? 表1有3个属性: A B ,C 表2有3个属性: A B ,D

表1中的前两行:

1 2 3
4 5 6

表2中的前两行:

1 3 4
8 5 8

两个表之间自然连接的结果是什么?

5 个答案:

答案 0 :(得分:6)

如果您的上述两条记录,则不会匹配任何内容。它将寻找A& A的情况。左表中的B匹配A& B在右表中。

答案 1 :(得分:2)

Natural JoinINNER 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”的公共条目。