SQL99使用JOIN...ON...实现多表查询。
JOIN...ON...,同INNER JOIN...ON...LEFT JOIN...ON...,同LEFT OUTER JOIN...ON...RIGHT JOIN...ON...,同RIGHT OUTER JOIN...ON...JOIN...ON...。INNER JOIN...ON...,可简写为JOIN...ON...# 查询员工的id及其所在部门名称
# JOIN...ON...
SELECT employee_id,department_name
FROM employees e JOIN departments d
ON e.department_id = d.department_id; -- 返回106行记录。
# INNER JOIN...ON...
SELECT employee_id,department_name
FROM employees e INNER JOIN departments d
ON e.department_id = d.department_id; -- 返回106行记录。
JOIN...ON...JOIN...ON...或者JOIN ... JOIN ...ON ...AND...# JOIN...ON...JOIN...ON...
SELECT employee_id,department_name,city
FROM employees e JOIN departments d
ON e.department_id = d.department_id
JOIN locations l
ON d.location_id = l.location_id; -- 返回106行记录
# JOIN ... JOIN ...ON ...AND...
SELECT e.last_name,d.department_name,l.city
FROM employees e JOIN departments d JOIN locations l
ON e.department_id = d.department_id
AND d.location_id = l.location_id; -- 返回106行记录
查询所有员工的id及其所在部门名称。LEFT JOIN...ON...,左外连接。
LEFT OUTER JOIN...ON...,可简写为LEFT JOIN...ON...。
# LEFT JOIN...ON
SELECT employee_id,department_name
FROM employees e LEFT JOIN departments d
ON e.department_id = d.department_id; -- 返回107行记录
# LEFT OUTER JOIN...ON
SELECT employee_id,department_name
FROM employees e LEFT OUTER JOIN departments d
ON e.department_id = d.department_id; -- 返回107行记录

查询所有部门及其所有员工的id。RIGHT JOIN...ON...,右外连接。
RIGHT OUTER JOIN...ON...,可简写为RIGHT JOIN...ON...。
SELECT employee_id,department_name
FROM employees e RIGHT JOIN departments d
ON e.department_id = d.department_id;-- 返回122行记录

SELECT employee_id,department_name
FROM employees e FULL JOIN departments d
ON e.department_id = d.department_id;
/*
报错:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FULL JOIN departments d
ON e.department_id = d.department_id' at line 2
*/
SQL99下满外连接,使用FULL JOIN ...ON,但MySQL不支持SQL99满外连接的语法,Orcale支持这种语法。
