多表查询
多表查询(基础)
多表查询用于从两个或更多表中获取数据。常见的连接类型包括内连接、外连接(左、右)和自连接。
一、内连接(INNER JOIN)
作用:返回两个表中连接字段匹配的行。不匹配的行会被丢弃。
语法:
SELECT 列列表
FROM 表1
INNER JOIN 表2 ON 表1.关联列 = 表2.关联列;
(INNER 可省略)
示例:查询每个员工的部门名称
SELECT e.name, d.dept_name
FROM employees e
INNER JOIN departments d ON e.dept_id = d.id;
只有 dept_id 在 departments 中存在的员工才会出现。
二、左外连接(LEFT JOIN)
作用:返回左表所有行,即使右表中没有匹配的行。右表中不匹配的列将填充 NULL。
语法:
SELECT 列列表
FROM 表1
LEFT JOIN 表2 ON 表1.关联列 = 表2.关联列;
示例:查询所有员工及其部门(包括没有部门的员工)
SELECT e.name, d.dept_name
FROM employees e
LEFT JOIN departments d ON e.dept_id = d.id;
如果某员工的 dept_id 不存在于 departments,则 dept_name 显示为 NULL。
三、右外连接(RIGHT JOIN)
作用:返回右表所有行,左表不匹配则补充 NULL。与 LEFT JOIN 对称,但通常可用 LEFT JOIN 重写,因此使用较少。
语法:
SELECT 列列表
FROM 表1
RIGHT JOIN 表2 ON 表1.关联列 = 表2.关联列;
示例:查询所有部门及其员工(包括空部门)
SELECT e.name, d.dept_name
FROM employees e
RIGHT JOIN departments d ON e.dept_id = d.id;
如果某个部门没有员工,则员工列显示为 NULL。
提示:
RIGHT JOIN可以通过交换表顺序改写为LEFT JOIN,因此习惯上多用LEFT JOIN。
四、自连接
作用:将一张表与它自身进行连接,通常用于处理具有层级关系(如员工-经理)或比较同一表中不同行的数据。
语法:必须使用表别名来区分同一张表的两个实例。
SELECT a.列, b.列
FROM 表 a
INNER JOIN 表 b ON a.关联列 = b.关联列;
(也可以用外连接)
示例:查询每个员工及其经理的名字
SELECT e.name AS employee, m.name AS manager
FROM emp e
LEFT JOIN emp m ON e.manager_id = m.id;
这里 emp 表既作为员工表(别名 e),又作为经理表(别名 m)。使用 LEFT JOIN 确保没有经理的员工(如 CEO)也会显示。
五、连接类型对比
| 连接类型 | 保留行 | 不匹配时右/左表表现 |
|---|---|---|
| INNER JOIN | 仅匹配 | 丢弃 |
| LEFT JOIN | 左表全部 | 右表列 NULL |
| RIGHT JOIN | 右表全部 | 左表列 NULL |
| 自连接 | 取决于是 INNER/LEFT/RIGHT | 同上 |
实际选择:
- 需要匹配数据时用
INNER JOIN。 - 需要保留左表全部数据(即使无匹配)时用
LEFT JOIN。 - 处理层次或比较同一表内行时用自连接(配合别名)。
六、完整示例
-- 内连接:查询已分配部门的员工
SELECT e.name, d.dept_name
FROM employees e
INNER JOIN dept d ON e.dept_id = d.id;
-- 左连接:查询所有员工及其部门(未分配也显示)
SELECT e.name, d.dept_name
FROM employees e
LEFT JOIN dept d ON e.dept_id = d.id;
-- 自连接:查询每个员工及其上级经理
SELECT worker.name AS employee, manager.name AS manager
FROM employees worker
LEFT JOIN employees manager ON worker.manager_id = manager.id;
掌握这些基础连接类型,可以应对绝大多数多表查询需求。后续可进一步学习 FULL OUTER JOIN(MySQL 不支持,需用 UNION 模拟)、交叉连接等高级用法。
参考文献
| 资料 | 说明 |
|---|---|
| MySQL 8.0 手册 | 官方 |
| 数据存储导读 | 学习路径 |
相关文章
常用函数
MySQL 提供了丰富的内置函数,用于处理字符串、数值、日期和时间以及条件逻辑。下面分类介绍最常用的基础函数。
MySQL 安装与基本操作
MySQL 的安装因操作系统而异,但安装完成后,通过命令行客户端连接并进行基本管理的方法是通用的。下面分别介绍安装方式和常用命令。
数据类型
MySQL 支持多种数据类型,可分为数值、字符串、日期时间、枚举/集合以及 JSON 等。选择合适的类型可以优化存储空间和查询性能。
查询数据
数据查询语言(DQL)用于从数据库中检索数据,核心是 SELECT 语句。下面从基础查询、条件筛选、排序、限制行数、聚合与分组等方面进行介绍。
数据库与表的基本操作
DDL(Data Definition Language)用于定义数据库结构,包括创建、修改、删除数据库和表。下面介绍 MySQL 中常用的 DDL 语句。
数据操作
DML(Data Manipulation Language)用于对表中的数据进行增(INSERT)、删(DELETE)、改(UPDATE)。下面详细介绍这三类操作。
Series
mysql
9 / 11