MySQL UNION 操作(附带实例)
                           
天天向上
发布: 2025-02-18 00:28:24

原创
79 人浏览过

在 MySQL 中,UNION 操作符用于将多个 SELECT 查询的结果合并成一个结果集。它可以将来自多个表或多个查询的结果按行拼接起来。默认情况下,UNION 会去除重复的记录,如果你想保留重复的记录,可以使用 UNION ALL

1. UNION 操作符的基本语法

SELECT column1, column2, ...
FROM table1
WHERE condition
UNION
SELECT column1, column2, ...
FROM table2
WHERE condition;
  • SELECT column1, column2, ...:你要从表中选取的列。
  • FROM table1, table2:你要查询的表。
  • WHERE condition:查询条件,限制你要返回的数据。

2. UNION 的使用规则

  • 所有的 SELECT 查询必须返回相同数量的列,并且每列的顺序和数据类型必须兼容。
  • 默认情况下,UNION 会删除重复的记录。如果你希望保留重复记录,应该使用 UNION ALL

3. 实例:UNION 操作符的使用

假设你有两个表:employeesmanagers,它们都有相同的字段结构:id, name, 和 position

示例 1:使用 UNION 合并来自不同表的数据

SELECT id, name, position FROM employees
UNION
SELECT id, name, position FROM managers;
  • 这个查询将从 employees 表和 managers 表中获取 id, name, 和 position 字段的记录,并将它们合并到一个结果集中。结果将去除重复的记录。

示例 2:使用 UNION ALL 保留重复的记录

SELECT id, name, position FROM employees
UNION ALL
SELECT id, name, position FROM managers;
  • 这个查询与上面的查询类似,但会保留重复的记录。如果 employees 表和 managers 表中有相同的 id, name, 和 position 组合,UNION ALL 会返回它们。

4. UNION 与排序

你可以在 UNION 查询结果的最后使用 ORDER BY 来排序整个结果集。注意,ORDER BY 只能出现在 UNION 查询的最后一个部分,而不能出现在单个 SELECT 查询中。

示例 3:使用 ORDER BY 对合并结果进行排序

SELECT id, name, position FROM employees
UNION
SELECT id, name, position FROM managers
ORDER BY name ASC;
  • 这个查询将根据 name 字段按升序对结果进行排序。

5. UNIONLIMIT

如果你希望限制返回的记录数,可以使用 LIMIT 子句,但要注意 LIMIT 只能限制整个 UNION 查询结果的记录数,而不能单独限制每个 SELECT 子查询的结果。

示例 4:对 UNION 查询结果使用 LIMIT

SELECT id, name, position FROM employees
UNION
SELECT id, name, position FROM managers
LIMIT 10;
  • 这个查询将合并来自 employeesmanagers 表的记录,并只返回前 10 条记录。

6. UNIONJOIN 的比较

UNIONJOIN 都可以用于合并多个表的数据,但它们的工作方式不同:

  • UNION 合并多个查询的结果集,返回的行是不同查询的拼接。
  • JOIN 通过基于共同字段连接多个表,返回的是跨表的联合数据。

示例 5:JOINUNION 的区别

假设有两个表:employeesdepartments,并且你想要获取员工及其部门的信息。

  • 使用 JOIN
SELECT employees.name, employees.position, departments.department_name
FROM employees
JOIN departments ON employees.department_id = departments.id;
  • 使用 UNION(假设你有不同的查询,想合并它们):
SELECT name, position FROM employees
UNION
SELECT name, position FROM managers;
  • JOIN 用于根据某个公共字段(如 department_id)将表连接在一起,返回跨表的数据。
  • UNION 用于合并来自不同查询的结果集,行之间没有直接关系。

7. 注意事项

  • 列的数量与数据类型UNION 的每个查询返回的列数和数据类型必须相同。否则,MySQL 会报错。
  • 默认去重UNION 会去除重复的记录。如果你希望保留重复记录,可以使用 UNION ALL
  • 排序与分页ORDER BYLIMIT 应放在 UNION 查询的最后部分。ORDER BY 会对整个结果集进行排序,而不是单独的查询。

总结

  • UNION 用于将多个 SELECT 查询的结果合并成一个结果集,默认去除重复记录。
  • UNION ALL 用于将多个查询的结果合并并保留重复记录。
  • UNION 查询可以使用 ORDER BY 来对合并的结果进行排序,并使用 LIMIT 来限制返回的记录数。
  • UNIONJOIN 的使用场景不同,UNION 用于合并查询结果,JOIN 用于跨表连接数据。
发表回复 0

Your email address will not be published. Required fields are marked *