我已阅读W3学校笔记和数据库系统概念书,但自然完整外连接和全外连接之间的区别仍然显得模糊。到目前为止,我的理解是,自然连接将自然地加入匹配列值,在完全外连接中,我们必须明确声明on
子句。我们应该吗?或者我在理解中犯了一些错误?“自然全外连接”和“全外连接”之间的区别
回答
Natural join
基本上是一种憎恶。不要使用它。
问题是natural join
使用表中列的名称来定义join
关系。这使得很难理解查询,因为你不知道这些关系是什么。更糟糕的是,natural join
甚至没有使用声明外键关系。代替使用using
或on
。
至于natural full outer join
和full outer join
之间的差异。他们都是full outer join
。在后者中,您明确定义了join
条件的键。在前者中,数据库引擎根据表之间的通用名称选择密钥。
那么,对于这些连接正确的条件是:1。 INNER JOIN 2. LEFT OUTER JOIN 3. RIGHT OUTER JOIN 4. FULL OUTER JOIN 5.自然连接
1.内JOIN:(典型的Join操作,它使用一些比较运算符,如=或)。这些包括equi连接和自然连接。 根据每个表的公共列中的值,Inner Joins使用比较运算符来匹配来自两个表的行。
2.外部联接:外部联接可以是左侧,右侧或全部外部联接。 当在FROM子句中指定了外连接时,指定了以下一组关键字:
2.a. LEFT JOIN或LEFT OUTER JOIN:左外连接的结果集包括LEFT OUTER子句中指定的左表中的所有行,而不仅仅是连接列匹配的行。当左表中的行在右表中没有匹配的行时,关联的结果集行包含来自右表的所有选择列列的空值。
2.b.右连接或右连接:右外连接与左外连接相反。返回右表中的所有行。每当右表格行在左表格中没有匹配的行时,就会为左表格返回空值。
2.c. FULL JOIN或FULL OUTER JOIN: Full外部连接返回Left和Right表中的所有行。任何时候一行在另一个表中都不匹配时,另一个表中的选择列表列将包含空值。当表格之间存在匹配时,整个结果集行包含来自基表的数据值。
3。Natural JOIN: NATURAL JOIN是JOIN操作,它基于两个正在连接的表中的公共列为您创建隐式连接子句。通用列是两个表中具有相同名称的列。
NATURAL JOIN可以是INNER连接,LEFT OUTER连接或RIGHT OUTER连接。默认值是INNER连接。
如果在自然连接出现操作的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
- 1. 自然全外连接?
- 2. 全外连接与全连接
- 3. SQL全外连接
- 4. 全外连接sql
- 5. MySQL全外连接
- 6. 全外连接/ COALESCE
- 7. 全外连接(SQL)
- 8. SQL - 全外连接
- 9. 全外连接和计数
- 10. 左连接与全外连接组合
- 11. 全外连接的Linq
- 12. Postgres的全外连接headscratcher
- 13. 全外连接不工作
- 14. 全外连接甲骨文
- 15. 全外连接Clojure中
- 16. Oracle SQL全外连接
- 17. 查看与全外连接
- 18. 套接字连接和tcp连接之间的任何区别?
- 19. 套接字连接和XMPP连接之间的区别
- 20. 如何在没有完全外连接的情况下完成全外连接
- 21. ASP.NET和Flash之间的安全连接
- 22. 找到左外连接,右外连接和全外连接返回的记录数
- 23. 内连接和外连接有什么区别
- 24. 我们如何区别左外连接和左连接
- 25. 左连接和左外连接有什么区别?
- 26. http连接请求和socket.io连接之间的区别
- 27. 内部连接和列连接之间的区别
- 28. 左连接和左连接之间的区别
- 29. Hibernate中左连接和左连接FETCH之间的区别?
- 30. 连接和不连接选择之间的区别?
我我和Gordon Linoff在一起:简单地忘记自然连接的存在。想象一下,你有一个工作查询,然后有一天某人将某列添加到一个与已连接表中的现有列名称相同的表中(这很容易发生,例如'name','text','image'等列名称) ,“说明”,“状态”等)。然后突然你的查询将返回不正确的结果,尽管查询本身从未改变。 –
使用完全外连接时,通常使用'USING'而不是'ON'顺便说一句(例如'使用(x)'而不是'select coalesce(ax,bx)从完整的外连接b中选择x,ay,bz)作为x,ay,bz来自ax = bx'上的完整外连接b)。这尤其适用于在同一列上有多个外部联接的查询。 –