0

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

表结构是这样的

  • 员工(employee_id、last_name、department_id、...)
  • 部门(department_id、department_name、location_id...)
  • 位置(location_id,城市,...)

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

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

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

开启

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';

自然加入

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

1 回答 1

4

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

于 2015-05-18T01:08:41.430 回答