何时使用SQL自然连接而不是连接..在哪里?

6
我正在为数据库考试学习SQL,我所见的SQL是在这个页面上展示的方式:http://en.wikipedia.org/wiki/Star_schema。例如Join <table name> On <table attribute>的写法和选择的连接条件。然而,我的课程书和来自学术机构的练习只使用自然连接。那么何时应该使用自然连接?如果可以使用JOIN .. ON编写查询,是否应该使用自然连接?谢谢任何答案或评论。

4
一篇关于SQL连接的视觉表述很有帮助。http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html - Sanath
1
http://en.wikipedia.org/wiki/Join_%28SQL%29 - Sanath
1
自然连接是等值连接的一种类型,这意味着条件只使用等式(=)比较。如果您有像 ... JOIN tblA a ON a.amount > b.amount 这样的内容,那么它就不能表示为自然连接。 - Wiseguy
此外,自然连接将在所有可能的列上进行连接。如果您不想这样做,并且需要指定要连接的列,请不要使用自然连接。 - Wiseguy
5个回答

10

自然连接会找到两个表中具有相同名称的列,并为每个找到的配对添加一个结果列。而内连接允许您使用任何列来指定要进行比较的内容。


1
这是最好的答案,因为它是客观的、理论性的,而不仅仅是SQL。 - Niklas Rosencrantz

7

在我看来,使用JOIN ON语法比使用自然连接语法更易读、易于维护。自然连接是一些旧标准的剩余物,我尽量避免使用。


3
自然连接除了可读性之外,还存在许多问题。例如,如果您更改其中一个表,可能会破坏查询。 - Saulo Vallory
使用自然连接,您的查询将更符合关系代数的要求。可惜SQL并没有严格遵循创造它的数学:https://en.wikipedia.org/wiki/Relational_algebra - Sombriks

2
自然连接会在两个表中找到同名的列,并添加一个结果列,每对列都会添加一个。内部连接允许您使用任何列来指定要进行比较的内容。
JOIN关键字用于SQL语句中,根据这些表中某些列之间的关系从两个或多个表中查询数据。
不同的连接方式。
*  JOIN: Return rows when there is at least one match in both tables
* LEFT JOIN: Return all rows from the left table, even if there are no matches in the right table
* RIGHT JOIN: Return all rows from the right table, even if there are no matches in the left table
* FULL JOIN: Return rows when there is a match in one of the tables

内连接 http://www.w3schools.com/sql/sql_join_inner.asp

完全连接 http://www.w3schools.com/sql/sql_join_full.asp


1
这个回答根本没有回答所问的问题。 - Brad

1
自然连接被称为丑陋的连接,因为它不允许限定关键列,这使得它很难理解。因为仅仅通过查看 SQL 语句,你永远不知道哪些“公共”列被用于连接两个表。

0
自然连接(NATURAL JOIN)根据表之间的共享列名进行匹配,而内连接(INNER JOIN)只根据给定的ON条件进行匹配。
连接通常是可以互换的,并且通常会产生相同的结果。然而,有一些重要的考虑因素:
- 如果自然连接找不到匹配的列,则会返回交叉乘积。如果模式被修改,这可能会产生灾难性的结果。另一方面,内连接将返回“列不存在”错误。这更具有容错性。 - 内连接通过其ON子句进行了自描述,从而产生了一个更清晰的查询,向读者描述了表模式。 - 内连接会生成一个可维护和可重用的查询,其中列名可以在用例或表模式发生变化时进行切换。 - 如果程序员被强制定义ON谓词,他们可以更早地注意到列名不匹配(例如,item_ID与itemID)。
否则,自然连接仍然是快速的、即席查询的好选择。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接