gpt4 book ai didi

sql - 加入和自然加入有什么区别?

转载 作者:行者123 更新时间:2023-12-01 07:24:31 25 4
gpt4 key购买 nike

我正在学习 Oracle SQL,现在我被困在连接一章。我无法理解加入和自然加入之间的区别

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 具有相似的功能,我不知道为什么我会收到不同的结果。

最佳答案

请勿使用 natural join .这是一个等待发生的错误。

一个明确的 join有一个 on列出表之间匹配条件的子句。在您的示例中,department_id用于此目的(尽管其他列可能可用)。
using子句是另一个非常有用的选择。您将其用作:

FROM employees e JOIN
job_history j
USING (department_id)

它找到 department_id在两个表中并将其用于连接条件。
NATURAL JOIN添加 JOIN表中所有列的条件相同。在您的情况下,这将是 department_id加上其他列。

问题——正如你所遇到的——是你不知道什么列用于 join .更糟糕的是,不使用显式外键引用。

由于您的查询未指定发生了什么,因此存在大量错误和错误。没有实际需要 NATURAL JOIN ,所以你不妨学着使用 ONUSING .

关于sql - 加入和自然加入有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41581876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com