FULL JOIN
FULL JOIN(全外连接)取两表的并集——两表所有行都返回,能匹配的并成一行,匹配不上的补 NULL。FULL JOIN = LEFT JOIN + RIGHT JOIN 的去重并集。
MySQL 不直接支持 FULL JOIN,但可以用 LEFT JOIN UNION RIGHT JOIN 模拟,效果相同。
全外连接适合"两张表都要完整呈现"的场景:员工全表 + 奖金全表,想看谁没奖金、哪笔奖金没对应员工。单用 LEFT JOIN 或 RIGHT JOIN 都会漏掉其中一方。
以飞翔科技为例——MySQL 的模拟写法:
-- 员工全表 + 奖金全表(模拟 FULL JOIN)
SELECT e.emp_name, e.basic_salary, b.bonus_amount
FROM employees e
LEFT JOIN bonus_records b ON e.emp_id = b.emp_id
UNION
SELECT e.emp_name, e.basic_salary, b.bonus_amount
FROM employees e
RIGHT JOIN bonus_records b ON e.emp_id = b.emp_id;
-- 在支持 FULL JOIN 的数据库(PostgreSQL/SQL Server)中:
/*
SELECT e.emp_name, e.basic_salary, b.bonus_amount
FROM employees e
FULL JOIN bonus_records b ON e.emp_id = b.emp_id;
*/
结果里既有所有员工(没奖金的补 NULL),也有所有奖金记录(员工已被删除的也显示,员工信息补 NULL)。比起单独用 LEFT JOIN,FULL JOIN 不会遗漏任何一方的数据。