当两个表只有一个共同属性时,我可以理解自然连接是如何工作的。如果他们有两个呢?表 1 有 3 个属性:A、B、 C 表 2 有 3 个属性:A、B、 D
表 1 中的前两行:
1 2 3
4 5 6
表 2 中的前两行:
1 3 4
8 5 8
两个表之间自然连接的结果是什么?
当两个表只有一个共同属性时,我可以理解自然连接是如何工作的。如果他们有两个呢?表 1 有 3 个属性:A、B、 C 表 2 有 3 个属性:A、B、 D
表 1 中的前两行:
1 2 3
4 5 6
表 2 中的前两行:
1 3 4
8 5 8
两个表之间自然连接的结果是什么?
在您上面的两条记录的情况下,什么都不会匹配。它将寻找左表中的 A & B 匹配右表中的 A & B 的情况。
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 演示
我将尝试根据用例解释 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 在上述情况下不起作用——
假设我们使用 NATURAL JOIN。
从 T1 自然加入 T2 中选择 *;
我们知道,T1 和 T2 有两个相似的属性/字段('B' 和 'C'),因此,NATURAL JOIN 将查找所有此类条目,其中 (T1.B=T2.B) AND (T1.C=T2. C)
只有满足上述条件的行才会被包含在结果集中。
然而,出于我们的目的,我们只需要行具有字段“C”的公共条目。
实际上自然加入是一些东西(交叉产品+一些条件)
自然连接的简写形式是:
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)
象征共同的条件
我正在为认证而学习,我也有这个疑问。自然连接总是比较表中的相似列。如果您有一对相似的列,它将进行比较并显示匹配项。机会更高。现在,如果你有 2 对,它会比较,它会带来更少的结果。内容必须相等。自己创建一个表并进行测试