10

当两个表只有一个共同属性时,我可以理解自然连接是如何工作的。如果他们有两个呢?表 1 有 3 个属性:AB、 C 表 2 有 3 个属性:AB、 D

表 1 中的前两行:

1 2 3
4 5 6

表 2 中的前两行:

1 3 4
8 5 8

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

4

5 回答 5

11

在您上面的两条记录的情况下,什么都不会匹​​配。它将寻找左表中的 A & B 匹配右表中的 A & B 的情况。

于 2014-10-14T03:49:48.973 回答
10

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 演示

于 2014-10-14T03:55:06.037 回答
0

我将尝试根据用例解释 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”的公共条目。

于 2021-07-24T06:43:21.847 回答
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)象征共同的条件

于 2020-01-24T10:45:30.493 回答
-1

我正在为认证而学习,我也有这个疑问。自然连接总是比较表中的相似列。如果您有一对相似的列,它将进行比较并显示匹配项。机会更高。现在,如果你有 2 对,它会比较,它会带来更少的结果。内容必须相等。自己创建一个表并进行测试

于 2018-08-09T21:10:03.460 回答