UNION
是 MySQL 中的一个集合操作符,用于合并两个或多个 SELECT
语句的结果集。它会自动去除重复的行,并且默认按照列的顺序进行排序。
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
UNION
会去除结果集中的重复行。UNION
会默认对结果集进行排序。假设有两个表 employees
和 contractors
,它们都有 name
和 salary
列:
-- employees 表
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2)
);
-- contractors 表
CREATE TABLE contractors (
id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2)
);
-- 插入示例数据
INSERT INTO employees (id, name, salary) VALUES
(1, 'Alice', 50000),
(2, 'Bob', 60000),
(3, 'Charlie', 55000);
INSERT INTO contractors (id, name, salary) VALUES
(1, 'David', 55000),
(2, 'Eve', 65000),
(3, 'Alice', 50000);
使用 UNION
合并两个表的结果:
SELECT name, salary FROM employees
UNION
SELECT name, salary FROM contractors;
输出:
+---------+---------+
| name | salary |
+---------+---------+
| Alice | 50000 |
| Bob | 60000 |
| Charlie | 55000 |
| David | 55000 |
| Eve | 65000 |
+---------+---------+
问题1:结果集未按预期排序
UNION
默认会对结果集进行排序,但有时可能不符合预期。ORDER BY
子句对最终结果进行排序。SELECT name, salary FROM employees
UNION
SELECT name, salary FROM contractors
ORDER BY salary DESC;
问题2:结果集中包含重复行
UNION ALL
,结果集中会包含重复行。UNION
而不是 UNION ALL
。SELECT name, salary FROM employees
UNION
SELECT name, salary FROM contractors;
希望这些信息对你有所帮助!如果有更多问题,请随时提问。
领取专属 10元无门槛券
手把手带您无忧上云