为什么自然连接和内部连接结果在我的SqlDeveloper查询中有所不同?

时间:2015-05-17 16:38:36

标签: sql oracle join natural-join

我在下面运行查询以显示姓氏, 所有在职员工的工作,部门编号和部门名称 多伦多。

表结构就像这样

  • 员工(employee_id,last_name,department_id,...)
  • 部门(部门标识,部门名称,LOCATION_ID ...)
  • 位置(LOCATION_ID,城市,...)

使用ON和USING子句,它返回两行结果和

使用NATURAL JOIN子句只返回一个。

有什么区别,我用自然连接错误查询吗?

使用ON

SELECT 
  e.last_name,
  e.job_id,
  d.department_name, 
  l.city
FROM employees e 
  JOIN departments d ON e.department_id= d.department_id
  JOIN locations l ON d.location_id=l.location_id
WHERE upper(l.city)='TORONTO'; 

使用

SELECT 
  e.last_name,
  e.job_id,
  d.department_name, 
  l.city
FROM employees e 
  JOIN departments d USING(department_id)
  JOIN locations l USING(location_id)
WHERE upper(l.city)='TORONTO';

使用NATURAL JOIN

SELECT 
  last_name,
  job_id, 
  department_name, 
  city
FROM employees 
  NATURAL JOIN departments
  NATURAL JOIN locations
WHERE upper(city)='TORONTO';

1 个答案:

答案 0 :(得分:4)

我猜你在oracle中使用了HR模式。员工和部门都有一个您没有加入的字段mangager_id。但是自然联接会加入它们。