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;希望这些信息对你有所帮助!如果有更多问题,请随时提问。
没有搜到相关的沙龙