MySQL 十几个 Union

MySQL 是一种流行的开源关系型数据库管理系统,拥有丰富的功能和灵活的查询语言。其中,UNION 是一种用于合并两个或多个 SELECT 语句结果集的操作,它能够将多个查询的结果合并成一个结果集。在本篇文章中,我们将介绍 MySQL 中使用 UNION 的技巧和示例代码。

什么是 UNION

UNION 是 SQL 的一个关键字,用于合并两个或多个 SELECT 语句的结果集。它的语法如下:

SELECT column1, column2, ...
FROM table1
WHERE condition1
UNION
SELECT column1, column2, ...
FROM table2
WHERE condition2;

UNION 运算符必须满足以下条件:

  • 必须由两个或多个 SELECT 语句组成。
  • 每个 SELECT 语句的列数必须相同。
  • 列的数据类型必须兼容。

UNION 运算符会自动去重,即结果集中不会包含重复的行。如果需要包含重复的行,则可以使用 UNION ALL 运算符。

下面是一个使用 UNION 的示例代码:

SELECT name, age FROM students
UNION
SELECT name, age FROM teachers;

上述代码会将 students 表和 teachers 表中的姓名和年龄合并成一个结果集,并自动去重。

UNION 的应用场景

UNION 运算符在许多场景下都很有用。下面是一些常见的应用场景:

1. 合并多个表的数据

假设我们有多个表存储了不同用户角色的信息,比如 students 表和 teachers 表。如果我们需要获取所有用户的姓名和年龄,可以使用 UNION 运算符将两个表的查询结果合并起来。

SELECT name, age FROM students
UNION
SELECT name, age FROM teachers;

2. 合并多个查询的结果

有时候我们需要将多个查询的结果合并起来,以便进行统计或分析。例如,我们需要获取所有国家的城市数量。我们可以分别查询每个国家的城市数量,然后使用 UNION 运算符将这些结果合并起来。

SELECT COUNT(*) AS city_count FROM cities WHERE country = 'China'
UNION
SELECT COUNT(*) AS city_count FROM cities WHERE country = 'USA'
UNION
SELECT COUNT(*) AS city_count FROM cities WHERE country = 'Japan';

上述代码会返回一个包含三个查询结果的结果集,每个查询结果都表示某个国家的城市数量。

3. 合并多个条件的查询结果

有时候我们需要根据不同的条件进行查询,然后将这些查询结果合并起来。例如,我们需要获取所有姓张和姓李的学生和老师的姓名。

SELECT name FROM students WHERE name LIKE '张%'
UNION
SELECT name FROM students WHERE name LIKE '李%'
UNION
SELECT name FROM teachers WHERE name LIKE '张%'
UNION
SELECT name FROM teachers WHERE name LIKE '李%';

上述代码会返回一个包含所有姓张和姓李的学生和老师的姓名的结果集。

4. 合并不同表的列

有时候我们需要将不同表的列合并起来,以便进行统计或分析。例如,我们需要获取所有购买了书籍和电影的用户的姓名。

SELECT name FROM users WHERE id IN (SELECT user_id FROM books)
UNION
SELECT name FROM users WHERE id IN (SELECT user_id FROM movies);

上述代码会返回一个包含所有购买了书籍和电影的用户的姓名的结果集。

UNION 的注意事项

在使用 UNION 运算符时,需要注意以下几个方面:

1. 列的顺序和数据类型

UNION 运算符要求每个 SELECT 语句返回的列的顺序和数据类型必须相同。如果列的顺序或数据类型不同,可以通过使用 AS 关键字来对列进行重命名,