当前位置:  开发笔记 > 编程语言 > 正文

Join和Natural Join有什么区别?

如何解决《Join和NaturalJoin有什么区别?》经验,为你挑选了1个好方法。

我正在学习Oracle SQL,现在我仍然坚持加入章节.我无法理解Join和Natural Join之间的区别

SELECT         employee_id, job_id, department_id,
               e.last_name, e.hire_date, j.end_date
FROM           employees e
NATURAL JOIN   job_history j;

176 SA_REP 80 Taylor 24/03/2006 31/12/2006

SELECT         e.employee_id, e.job_id, e.department_id,
               e.last_name, e.hire_date, j.end_date
FROM           employees e
JOIN           job_history j
ON             (e.department_id = j.department_id)
ORDER BY        employee_id, last_name;

172 SA_REP  80  Bates   24/03/2007  31/12/2006
173 SA_REP  80  Kumar   21/04/2008  31/12/2007
173 SA_REP  80  Kumar   21/04/2008  31/12/2006
174 SA_REP  80  Abel    11/05/2004  31/12/2007
174 SA_REP  80  Abel    11/05/2004  31/12/2006
175 SA_REP  80  Hutton  19/03/2005  31/12/2007
175 SA_REP  80  Hutton  19/03/2005  31/12/2006
176 SA_REP  80  Taylor  24/03/2006  31/12/2007
176 SA_REP  80  Taylor  24/03/2006  31/12/2006
177 SA_REP  80  Livingston  23/04/2006  31/12/2007
177 SA_REP  80  Livingston  23/04/2006  31/12/2006

如果Join和Natural Join都具有相似的功能,我不知道为什么会收到不同的结果.



1> Gordon Linof..:

不要用natural join.这是一个等待发生的错误.

explicit join有一个on子句,列出了表之间匹配的条件.在您的示例中,department_id用于此目的(尽管其他列可能可用).

using条款是另一个非常有用的选择.你用它作为:

FROM employees e JOIN
     job_history j
     USING (department_id)

department_id在两个表中都找到并用于连接条件.

NATURAL JOINJOIN为表中相同的所有列添加条件.在您的情况下,这将是department_id 加上其他列.

问题 - 正如您所遇到的 - 是您不知道使用哪些列join.更糟糕的是,不使用显式外键引用.

因为您的查询没有指定发生了什么,所以存在很多错误和错误的余地.没有实际需要NATURAL JOIN,所以你也可以学会使用ONUSING.

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有