当前位置: 首页 > news >正文

SQL 连接类型示例:内连接与外连接

SQL 连接类型示例:内连接与外连接

示例数据表

假设我们有两个表:

employees 表:

emp_idemp_namedept_id
1张三101
2李四102
3王五103
4赵六NULL

departments 表:

dept_iddept_name
101销售部
102技术部
104财务部

1. 内连接 (INNER JOIN)

内连接只返回两个表中匹配的行。
相当于左右表两个列做交集运算。

SELECT e.emp_name, d.dept_name
FROM employees e
INNER JOIN departments d ON e.dept_id = d.dept_id;

结果:

emp_namedept_name
张三销售部
李四技术部

说明:只返回了 dept_id 在两个表中都存在的记录(101 和 102),王五(103)和赵六(NULL)没有匹配的部门,财务部(104)没有匹配的员工,所以都不出现在结果中。

2. 左外连接 (LEFT OUTER JOIN)

左外连接返回左表的所有行,以及右表中匹配的行(不匹配则为 NULL)。
相当于左右表两个列做交集运算,再补充上左表对右表的差集。

SELECT e.emp_name, d.dept_name
FROM employees e
LEFT JOIN departments d ON e.dept_id = d.dept_id;

结果:

emp_namedept_name
张三销售部
李四技术部
王五NULL
赵六NULL

说明:保留了左表(employees)的所有记录,王五和赵六没有匹配的部门信息,所以 dept_name 为 NULL。

3. 右外连接 (RIGHT OUTER JOIN)

右外连接返回右表的所有行,以及左表中匹配的行(不匹配则为 NULL)。
相当于左右表两个列做交集运算,再补充上右表对左表的差集。

SELECT e.emp_name, d.dept_name
FROM employees e
RIGHT JOIN departments d ON e.dept_id = d.dept_id;

结果:

emp_namedept_name
张三销售部
李四技术部
NULL财务部

说明:保留了右表(departments)的所有记录,财务部没有匹配的员工,所以 emp_name 为 NULL。

4. 全外连接 (FULL OUTER JOIN)

全外连接返回两个表中的所有行,不匹配的部分为 NULL。
相当于左右表两个列做并集运算。

SELECT e.emp_name, d.dept_name
FROM employees e
FULL JOIN departments d ON e.dept_id = d.dept_id;

结果:

emp_namedept_name
张三销售部
李四技术部
王五NULL
赵六NULL
NULL财务部

说明:包含了两个表的所有记录,不匹配的部分用 NULL 填充。

关键区别总结

连接类型结果包含
INNER JOIN只返回两个表中匹配的行
LEFT JOIN返回左表所有行 + 右表匹配行(不匹配的右表字段为 NULL)
RIGHT JOIN返回右表所有行 + 左表匹配行(不匹配的左表字段为 NULL)
FULL JOIN返回两个表所有行(不匹配的部分为 NULL)

注意:MySQL 不支持 FULL OUTER JOIN,但可以通过 LEFT JOIN 和 RIGHT JOIN 的组合来实现类似效果。

http://www.dtcms.com/a/305905.html

相关文章:

  • 分布式系统:一致性
  • 二叉树(全)
  • InspireFace SDK gRPC 开发详细指导
  • 大厂主力双塔模型实践与线上服务
  • 嵌入式——C语言:内存管理、位运算符、构造数据类型(共用体、枚举)
  • NVIDIA Isaac平台推动医疗AI机器人发展研究
  • 【LeetCode 热题 100】33. 搜索旋转排序数组——(解法二)一次二分
  • ragflow 报错ERROR: [Errno 111] Connection refused
  • 2025年6月电子学会青少年软件编程(C语言)等级考试试卷(三级)
  • LeetCode 面试经典 150_数组/字符串_轮转数组(6_189_C++_中等)(额外数组;转置)
  • 磁盘io查看命令iostat与网络连接查看命令netstat
  • Apache HTTP Server 2.4.50 路径穿越漏洞(CVE-2021-42013)
  • 矩阵指数函数 e^A
  • AR技术赋能航空维修:精度与效率的飞跃
  • 基于Catboost的铁路交通数据分析及列车延误预测系统的设计与实现【全国城市可选、欠采样技术】
  • Three.js 与 WebXR:初识 VR/AR 开发
  • nest generate从入门到实战
  • 6.Origin2021如何绘制Y轴截断图?
  • Java 笔记 封装(Encapsulation)
  • 常见存储卡类型及对比
  • Elasticsearch 索引管理 API 实战:涵盖创建、查看、修改、删除及别名
  • 10 分钟上手 Elasticsearch 语义搜索(Serverless Cloud 本地双版本教程)
  • 在 Kubernetes 上部署 Label Studio
  • 汽车免拆诊断案例 | 免拆诊断发动机起动困难故障2例
  • Visual Studio Code 使用指南 (2025年版)
  • lesson28:Python单例模式全解析:从基础实现到企业级最佳实践
  • 【网络工程师软考版】路由协议 + ACL
  • 网络资源模板--基于Android Studio 实现的图书商城App
  • 如何不让android studio自动换行
  • UDP通讯和TCP通讯的区别-UDP(用户数据报协议)和 TCP(传输控制协议)