描述
- MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合,并去除重复的行。
- UNION 操作符必须由两个或多个 SELECT 语句组成,每个 SELECT 语句的列数和对应位置的数据类型必须相同。
语法
MySQL UNION 操作符语法格式:
SELECT column1, column2, …
FROM table1
WHERE condition1
UNION
SELECT column1, column2, …
FROM table2
WHERE condition2
[ORDER BY column1, column2, …];
参数说明:
column1, column2, … 是你要选择的列的名称,如果使用 * 表示选择所有列。
table1, table2, … 是你要从中查询数据的表的名称。
condition1, condition2, … 是每个 SELECT 语句的过滤条件,是可选的。
ORDER BY 子句是一个可选的子句,用于指定合并后的结果集的排序顺序。
实例
- 基本的 UNION 操作:
SELECT city FROM customers
UNION
SELECT city FROM suppliers
ORDER BY city;
以上 SQL 语句将选择客户表和供应商表中所有城市的唯一值,并按城市名称升序排序。
- 使用过滤条件的 UNION:
SELECT product_name FROM products WHERE category = ‘Electronics’
UNION
SELECT product_name FROM products WHERE category = ‘Clothing’
ORDER BY product_name;
以上 SQL 语句将选择电子产品和服装类别的产品名称,并按产品名称升序排序。
- UNION 操作中的列数和数据类型必须相同:
SELECT first_name, last_name FROM employees
UNION
SELECT department_name, NULL FROM departments
ORDER BY first_name;
以上 SQL 语句中,departments 表中的 department_name 列被映射到了 employees 表中的 last_name 列,但是列数和数据类型必须相同。
- 使用 UNION ALL 不去除重复行:
SELECT city FROM customers
UNION ALL
SELECT city FROM suppliers
ORDER BY city;
具体例子
表名dept
表名emp
- select deptno from dept union select deptno from emp order by deptno;
【 从dept表和emp表中分别查询deptno,去除重复,并且按deptno升序排序】
查询结构如下:
- select deptno from dept union all select deptno from emp order by deptno;
【将dep表和emp表中的deptno合并在一起不去重复行,也就是选取所有deptno】
查询结果如下: