假设我执行A自然连接B,其中:
A架构是:(aID),其中(aID)是主键 B&#39的架构是:(aID,bID),其中(aID,bID)是复合主键。
在这种情况下执行自然连接工作会是什么?或者A是否有必要同时使用aID和bID?
答案 0 :(得分:1)
NATURAL JOIN返回每个公共输入表列名称只有一个副本的行,并且每个输入表都是唯一的列名称。它返回一个包含所有这些行的表,可以通过组合每个输入表中的一行来生成。这与有多少常见的列名无关,包括零。当没有常见的列名时,这是一种CROSS JOIN又名CARTESIAN JOIN。当所有列名都很常见时,这就是一种INTERSECTION。所有这些都与PK,UNIQUE,FKs&其他约束。
NATURAL JOIN作为关系代数运算符很重要。 In SQL it can be used in a certain style of relational programming that is in a certain sense simpler than usual.
对于真正的关系结果,您将选择SELECT DISTINCT。关系也没有特殊的NULL值,而SQL JOIN则将NULL视为不等于NULL;因此,如果我们将NULL视为另一个关系值,那么SQL有时不会返回真正的关系结果。 (当两个参数对于每个共享列都具有NULL并且两个共享列具有相同的非NULL值时。)
答案 1 :(得分:0)
“自然”联接使用列的名称来匹配表。它使用任何匹配的名称,无论密钥定义如何。
因此,
select . . .
from a natural join b
将使用AId
,因为这是唯一具有相同名称的列。
在我看来,natural join
是令人厌恶的。首先,它忽略了明确的声明的外键关系。这些是“自然连接”键,无论其名称如何。
其次,SELECT
语句中的联接键不明确。这使得调试查询变得更加困难。
第三,我想不出一个SQL结构,其中添加列或从表中删除列需要工作查询并更改结果中行的数量集。
此外,我的表格中经常有一些共同的列 - CreatedAt
,CreatedOn
,CreatedBy
。只是这些列的存在排除了使用自然连接。
答案 2 :(得分:-1)
自然联接需要两者。
此致
泰德