我正在为数据库考试学习 SQL,而我看到 SQL 的方式就是它在此页面上的样子:
http://en.wikipedia.org/wiki/Star_schema
IEjoin
写了方式Join <table name> On <table attribute>
然后加入条件供选择。然而,我的课程书和学术机构给我的练习,在他们的例子中只使用自然连接。那么什么时候使用自然连接合适呢?如果查询也可以使用 JOIN .. ON 编写,是否应该使用自然连接?
感谢您的任何回答或评论
我正在为数据库考试学习 SQL,而我看到 SQL 的方式就是它在此页面上的样子:
http://en.wikipedia.org/wiki/Star_schema
IEjoin
写了方式Join <table name> On <table attribute>
然后加入条件供选择。然而,我的课程书和学术机构给我的练习,在他们的例子中只使用自然连接。那么什么时候使用自然连接合适呢?如果查询也可以使用 JOIN .. ON 编写,是否应该使用自然连接?
感谢您的任何回答或评论
自然连接将在两个表中查找具有相同名称的列,并在结果中为找到的每一对添加一列。内连接允许您指定要使用任何列进行的比较。
IMO,JOIN ON 语法比自然连接语法更具可读性和可维护性。自然连接是一些旧标准的遗留物,我尽量避免它像瘟疫一样。
自然连接将在两个表中查找具有相同名称的列,并在结果中为找到的每一对添加一列。内连接允许您指定要使用任何列进行的比较。
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
自然连接被认为是令人厌恶的,因为它不允许限定键列,这使得它变得混乱。因为你永远不知道哪些“公共”列被用于连接两个表,只需查看 sql 语句。
NATURAL JOIN 匹配表之间的任何共享列名,而 INNER JOIN 仅匹配给定的 ON 条件。
连接通常可以互换并且通常产生相同的结果。但是,有一些重要的考虑因素需要考虑:
如果 NATURAL JOIN 找不到匹配的列,则返回叉积。如果模式被修改,这可能会产生灾难性的结果。另一方面,INNER JOIN 将返回“列不存在”错误。这更容错。
INNER JOIN使用其 ON 子句自文档,从而产生更清晰的查询,向读者描述表模式。
INNER JOIN 产生可维护和可重用的查询,其中列名可以随着用例或表模式的更改而换入和换出。
如果他们被迫定义 ON 谓词,程序员可以更快地注意到列名不匹配(例如 item_ID 与 itemID)。
否则,NATURAL JOIN 仍然是快速、即席查询的好选择。