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

Sql 两个表中具有多个公共属性的自然联接,sql,natural-join,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 两个表之间自然连接的结果是什么?对于上面的两条记录,没有匹配的结果。它将查找左表中的A和B与右表中的A和B相匹配的情况。自然联接是内部联接的一个变体,其中联接条件隐含在两个表的公共列上。在您的情况下,Natural Join中的查询可以编写如下,它不会返回任何结果,因为它将尝

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

表1中的前两行:

1 2 3
4 5 6
表2中的前两行:

1 3 4
8 5 8

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

对于上面的两条记录,没有匹配的结果。它将查找左表中的A和B与右表中的A和B相匹配的情况。

自然联接
内部联接
的一个变体,其中联接条件隐含在两个表的公共列上。在您的情况下,
Natural Join
中的查询可以编写如下,它不会返回任何结果,因为它将尝试匹配A和B

select *
from table1
natural join table2
可以在
内部联接中写入相同的内容,如下所示

select t1.*
from table1 t1
inner join table2 t2
on t1.a = t2.a and t1.b = t2.b

你自己看看

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

实际上,自然连接是一种东西(交叉乘积+某些条件)

自然连接的简称为:

Select*from Table\u A NATURAL JOIN Table\u B

因此,另一种写作方式是:

从表A、表B中选择*其中(表A.id=表B.id)

这相当于自然连接

(表A、表B)
表示叉积


(Table_A.id=Table_B.id)
象征常见条件

自然连接只是内部连接的简写,引擎可以从表元数据自动构造连接子句。6993个视图只有两个答案,但没有一个被接受,拜托有人帮忙吗?@PieterGeerkens no,
NATURAL JOIN
本身就是一种连接类型,并不像您描述的那么简单,例如,它消除了重复的列,最近的等效
内部连接
是出于传统(1992年以前)的目的被迫生成的。这是否回答了您的问题@好的。我以前从未见过SQL FIDLE。您FIDLE并不是为我构建的,但逻辑上它们不能有相同的结果,即第一个将包含
C
,第二个不会(旁白:您的代码在区分大小写的数据库上会失败,例如a>a)…但是将其转换为
内部联接有什么意义呢?!自然连接不是内部连接的变体。只有在没有公共列时,它们才会返回相同的结果。自然联接返回每个公共列的一个副本,可以通过内部联接、合并和select子句表示。内部联接只返回每个公共列的一个副本。此外,联接表达式在from子句中具有含义,而不引用select子句。此外,这是非常糟糕的措词&没有解释自然连接&示例不是来自问题&示例没有关联。等。使用足够的单词、句子和引用部分例子来清楚、完整地表达你的意思。然而,自然连接的工作原理是多次重复的;请不要回答重复的问题,将其标记/投票为重复问题。