全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-15 6 分钟 ✍️ juanwangdev

MySQL 联合查询

联合查询用于合并多个 SELECT 语句的结果集,是数据整合的常用手段。

基本语法

SQL
SELECT 列名 FROM 1
UNION [ALL]
SELECT 列名 FROM 2;

UNION 与 UNION ALL

操作符功能性能
UNION合并并去重较慢,需排序去重
UNION ALL合并不去重较快,直接合并

使用示例

UNION 去重合并

SQL
-- 合并两个部门的员工,自动去重
SELECT emp_name FROM employees WHERE dept_id = 10
UNION
SELECT emp_name FROM employees WHERE dept_id = 20;

UNION ALL 保留重复

SQL
-- 合并两个部门的员工,保留重复记录
SELECT emp_name FROM employees WHERE dept_id = 10
UNION ALL
SELECT emp_name FROM employees WHERE dept_id = 20;

多表联合

SQL
-- 合并三个查询结果
SELECT product_name FROM products WHERE price > 1000
UNION ALL
SELECT product_name FROM archived_products WHERE price > 1000
UNION ALL
SELECT product_name FROM temp_products WHERE price > 1000
ORDER BY product_name;

联合查询排序

SQL
-- 排序必须放在最后一条SELECT语句
SELECT emp_name, salary FROM employees WHERE dept_id = 10
UNION ALL
SELECT emp_name, salary FROM employees WHERE dept_id = 20
ORDER BY salary DESC;

使用规则

  1. 列数必须相同:每条 SELECT 的列数必须一致
  2. 列类型兼容:对应列的数据类型必须兼容
  3. 列名取自首句:结果集列名由第一条 SELECT 决定
  4. 排序放末尾:ORDER BY 只能出现在最后一条 SELECT 后

典型应用场景

SQL
-- 场景1:合并不同表的结构相似数据
SELECT id, name, 'customers' AS source FROM customers
UNION ALL
SELECT id, name, 'suppliers' AS source FROM suppliers;

-- 场景2:分页数据合并展示
SELECT * FROM (
    SELECT id, title, create_time FROM articles
    UNION ALL
    SELECT id, title, create_time FROM videos
) AS combined
ORDER BY create_time DESC
LIMIT 20;

要点总结

  • UNION 自动去重,UNION ALL 保留所有记录
  • 各 SELECT 列数必须相同,类型必须兼容
  • ORDER BY 只能放在整个语句末尾
  • 性能优先选择 UNION ALL,需要去重时使用 UNION

📝 发现内容有误?点击此处直接编辑

← 上一篇 MySQL 子查询
下一篇 → MySQL 视图与存储过程
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库