应用场景:用于查询一个表中有,另一个表中没有的记录。 特点:
- 外连接的查询结果为主表中的所有记录,如果从表中有和他匹配的,则显示匹配的值,如果从表中没有,则显示
null
。
外连接查询结果 = 内连接结果 + 主表中有而从表中没有的记录。 - 左外连接中:left 左边的为主表 右外连接:right 右边的为主表
- 左外和右外交换两个表的顺序,可以实现同样的效果。
- 全外连接 = 内连接 + 表1有但表2没有 + 表2有但表1没有的
案例1:左、右外连接
-- 引入:查询男朋友不在男生表的女神名
SELECT b.`name`, bo.*
FROM beauty b
LEFT OUTER JOIN boys bo
ON b.boyfriend_id=bo.id
WHERE bo.id IS NULL;
案例2:查询哪个部门没有员工
-- 左外连接
SELECT d.*,e.employee_id
FROM departments d
LEFT OUTER JOIN employees e
ON d.department_id=e.department_id
WHERE e.employee_id IS NULL;
-- 右外连接
SELECT d.*,e.employee_id
FROM employees e
RIGHT OUTER JOIN departments d
ON d.department_id=e.department_id
WHERE e.employee_id IS NULL;
案例3:全外连接
-- 不支持!
USE girls;
SELECT b.*,bo.*
FROM beauty b
FULL OUTER JOIN boys bo
ON b.boyfriend_id = bo.id;