何时使用SQL自然连接而不是join .. on?

时间:2012-05-09 06:40:25

标签: sql

我正在学习数据库考试的SQL,我看到SQL的方式就是它在这个页面上的样子:

http://en.wikipedia.org/wiki/Star_schema IE joinJoin <table name> On <table attribute>的方式编写,然后是选择的连接条件。然而,我的课程书和我从学术机构给我的练习,在他们的例子中只使用了自然的联接。那么什么时候使用自然连接呢?如果查询也可以使用JOIN ... ON?

编写,是否应该使用自然连接

感谢您的回答或评论

5 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:5)

IMO,JOIN ON语法比自然连接语法更具可读性和可维护性。自然联合是一些旧标准的遗留物,我试图像瘟疫一样避免它。

答案 2 :(得分:1)

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

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

INNER JOIN http://www.w3schools.com/sql/sql_join_inner.asp

完全加入 http://www.w3schools.com/sql/sql_join_full.asp

答案 3 :(得分:0)

自然连接被认为是可憎的,因为它不允许限定键列,这使它变得混乱。因为您仅通过查看sql语句就无法知道正在使用哪个“公共”列来联接两个表。

答案 4 :(得分:0)

NATURAL JOIN与表之间的任何共享列名称匹配,而INNER JOIN仅在给定的ON条件下匹配。

这些连接通常可以互换,并且通常会产生相同的结果。但是,有一些重要的注意事项:

  • 如果NATURAL JOIN未找到匹配的列,则为returns the cross product。如果架构是 改性。另一方面,INNER JOIN会传回'column 不存在”错误。 容错

  • 带有IN子句的INNER JOIN 自文档,导致 更清晰的查询,向读者描述表架构。

  • INNER JOIN导致在可维护和可重用查询 可以通过更改其中的名称来交换列名称 用例或表架构。

  • 如果程序员被迫定义ON谓词,他们可以更快地通知列名不匹配(例如item_ID与itemID)。

否则,对于快速的即席查询,NATURAL JOIN仍然是不错的选择。