代码示例
# 中图:内连接 A∩BSELECT employee_id,last_name,department_nameFROM employees e JOIN departments dON e.`department_id` = d.`department_id`;
# 左上图:左外连接SELECT employee_id,last_name,department_nameFROM employees e LEFT JOIN departments dON e.`department_id` = d.`department_id`;
# 右上图:右外连接SELECT employee_id,last_name,department_nameFROM employees e RIGHT JOIN departments dON e.`department_id` = d.`department_id`;
# 左中图:A - A∩BSELECT employee_id,last_name,department_nameFROM employees e LEFT JOIN departments dON e.`department_id` = d.`department_id`WHERE d.`department_id` IS NULL
# 右中图:B-A∩BSELECT employee_id,last_name,department_nameFROM employees e RIGHT JOIN departments dON e.`department_id` = d.`department_id`WHERE e.`department_id` IS NULL
# 左下图:满外连接# 左中图 + 右上图 A∪BSELECT employee_id,last_name,department_nameFROM employees e LEFT JOIN departments dON e.`department_id` = d.`department_id`WHERE d.`department_id` IS NULLUNION ALL # 没有去重操作,效率高SELECT employee_id,last_name,department_nameFROM employees e RIGHT JOIN departments dON e.`department_id` = d.`department_id`;
# 右下图# 左中图 + 右中图 A∪B - A∩B 或者 (A - A∩B) ∪ (B - A∩B)SELECT employee_id,last_name,department_nameFROM employees e LEFT JOIN departments dON e.`department_id` = d.`department_id`WHERE d.`department_id` IS NULLUNION ALLSELECT employee_id,last_name,department_nameFROM employees e RIGHT JOIN departments dON e.`department_id` = d.`department_id`WHERE e.`department_id` IS NULL
语法格式小结
左中图
# 实现 A - A∩Bselect 字段列表from A表 left join B表on 关联条件where 从表关联字段 is null and 等其他子句;
右中图
# 实现 B - A∩Bselect 字段列表from A表 right join B表on 关联条件where 从表关联字段 is null and 等其他子句;
左下图
# 实现查询结果是 A∪B# 用左外的 A,union 右外的 Bselect 字段列表from A表 left join B表on 关联条件where 等其他子句unionselect 字段列表from A表 right join B表on 关联条件where 等其他子句;
右下图
# 实现 A∪B - A∩B 或 (A - A∩B) ∪ (B - A∩B)# 使用左外的 (A - A∩B) union 右外的 (B - A∩B)select 字段列表from A表 left join B表on 关联条件where 从表关联字段 is null and 等其他子句unionselect 字段列表from A表 right join B表on 关联条件where 从表关联字段 is null and 等其他子句
