1
SELECT e.employee_id, e.last_name, d.department_id, d.location_id
FROM employees e JOIN departments d
ON (e.department_id=d.department_id);

ON 子句到底是做什么的?我对为什么 e.department_id 和 d.department_id 不会导致错误感到困惑?e不代表employees表,d代表department表吗?那么如果department_id 不在employees 表中,如何使用e.department_id 呢?我对 ON 子句的目的感到非常困惑。

4

2 回答 2

2

ON子句是JOIN语法的一部分,它用于标识表应该如何相互连接,换句话说,哪些列将表相互关联。

在您的情况下,您将加入 和 上的e.department_id表格d.department_id

e是表的别名,employees而 是表的d别名departments

您当前的查询正在执行INNER JOIN,它将仅返回在两个表中匹配的那些行。

如果您想全部返回,employees即使没有departments与员工行关联,那么您将需要使用LEFT JOIN

SELECT e.employee_id, e.last_name, d.department_id, d.location_id
FROM employees e 
LEFT JOIN departments d
  ON e.department_id=d.department_id;
于 2013-03-11T23:07:34.877 回答
0

不确定它是否有助于您理解,但可以(尽管不推荐)用WHERE子句形式的隐式内部连接重写这​​个查询:

SELECT e.employee_id, e.last_name, d.department_id, d.location_id
FROM employees e, departments d
WHERE (e.department_id=d.department_id);
于 2013-03-11T23:33:21.187 回答