我读过W3学习笔记和数据库系统概念书,但自然的完全外部连接和完全外部连接之间的区别似乎仍然很模糊。到目前为止,我的理解是自然连接将自然地连接匹配的列值,而在完全外部连接中,我们必须显式地声明on子句。我们应该这样吗?还是我在理解上犯了一些错误?
发布于 2017-02-16 12:58:50
Natural join基本上是一个令人厌恶的东西。不要用它。
问题是natural join使用表中的列名来定义join关系。这使得理解查询变得很困难,因为您不知道关系是什么。更糟糕的是,natural join甚至没有使用声明的外键关系。
请改用using或on。
至于natural full outer join和full outer join之间的区别。它们都是full outer join。在后者中,您将显式定义join条件的键。在前者中,数据库引擎根据表之间的公共名称选择键。
发布于 2017-02-16 12:59:19
这些连接的正确术语是: 1.内连接2.左外连接3.右外连接4.完全外连接5.自然连接
1.内部连接:(典型的连接操作,它使用一些比较运算符,如=或)。这些连接包括等连接和自然连接。内部联接使用比较运算符来根据每个表的公共列中的值匹配两个表中的行。
2.外部联接:外部联接可以是左联接、右联接或完全外联接。在FROM子句中指定外部联接时,将使用以下关键字之一指定它们:
2.a.LEFT JOIN或LEFT OUTER JOIN:左外部联接的结果集包括在Left Outer子句中指定的左表中的所有行,而不仅仅是联接列匹配的行。如果左表中的行在右表中没有匹配的行,则关联的结果集行将包含来自右表的所有选择列表列的空值。
2.b.右联接或右外联接:右外联接与左外联接相反。返回右表中的所有行。只要右表中的行在左表中没有匹配的行,就会为左表返回空值。
2.c.完全联接或完全外部联接:完全外部联接同时返回左表和右表中的所有行。任何时候,只要行在另一个表中没有匹配项,另一个表中的选择列表列就会包含空值。当表之间存在匹配时,整个结果集行将包含基表中的数据值。
3.自然连接:自然连接是一种连接操作,它基于连接的两个表中的公共列为您创建隐式连接子句。公共列是两个表中具有相同名称的列。
自然联接可以是内联接、左外联接或右外联接。默认值为INNER。
如果显示自然联接操作的SELECT语句在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 columnhttps://stackoverflow.com/questions/42265203
复制相似问题