'自然全外连接'和'全外连接'之间的区别

时间:2017-02-16 04:49:46

标签: sql oracle

我已阅读过W3学校笔记和数据库系统概念书,但自然全外连接和全外连接之间的区别似乎仍然模糊不清。到目前为止,我的理解是自然连接将自然地连接到匹配的列值,在完全外连接中,我们必须明确地声明on子句。我们应该吗?或者我在理解中犯了一些错误?

2 个答案:

答案 0 :(得分:9)

getActiveCell()基本上是令人厌恶的。不要使用它。

问题是Natural join使用表中列的名称来定义natural join关系。这使得查询很难理解,因为您不知道关系是什么。更糟糕的是,join甚至不使用声明的外键关系。

改为使用natural joinusing

至于onnatural full outer join之间的差异。它们都是full outer join。在后者中,您明确定义了full outer join条件的键。在前者中,数据库引擎根据表之间的通用名称选择密钥。

答案 1 :(得分:9)

嗯,这些联接的正确术语是: 1.内部联系 2. LEFT OUTER JOIN 3.正确的外部联接 4.完全外部加入 5.自然加入

<强> 1。 INNER JOIN:(典型的Join操作,它使用一些比较运算符,如=或)。这些包括等连接和自然连接。 内部联接使用比较运算符来匹配来自两个表的行,基于每个表的公共列中的值。

<强> 2。 OUTER JOIN:外连接可以是Left,Right或Full Outer Join。 在FROM子句中指定外连接时,使用以下关键字集之一指定外连接:

<强> 2.A。 LEFT JOIN或LEFT OUTER JOIN: Left Outer Join的结果集包括LEFT OUTER子句中指定的左表中的所有行,而不仅仅是连接列匹配的行。如果左表中的行在右表中没有匹配的行,则关联的结果集行包含来自右表的所有选择列表列的空值。

<强> 2.b中。 RIGHT JOIN或RIGHT OUTER JOIN:右外连接是左外连接的反向。返回右表中的所有行。只要右表行在左表中没有匹配的行,就会为左表返回空值。

<强> 2.C。 FULL JOIN或FULL OUTER JOIN: Full Outer Join返回Left和Right表中的所有行。每当一行在另一个表中没有匹配时,另一个表中的选择列表列包含空值。当表之间存在匹配时,整个结果集行包含基表中的数据值。

3.Natural JOIN: NATURAL JOIN是一个JOIN操作,它根据要连接的两个表中的公共列为您创建隐式连接子句。常用列是两个表中具有相同名称的列。

NATURAL JOIN可以是INNER联接,LEFT OUTER联接或RIGHT OUTER联接。默认为INNER join。

如果出现NATURAL JOIN操作的SELECT语句在选择列表中带有星号(*),则星号将扩展为以下列列(按此顺序):

All the common columns
Every column in the first (left) table that is not a common column
Every column in the second (right) table that is not a common column