翼度科技»论坛 编程开发 mysql 查看内容

MySQL之使用UNION和UNION ALL合并两个或多个SELECT语句的结果集

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
使用UNION和UNION ALL合并两个或多个SELECT语句的结果集

在MySQL中,
  1. UNION
复制代码
  1. UNION ALL
复制代码
是用于合并两个或多个 SELECT 语句的结果集的操作符。
  1. UNION
复制代码
会去除结果集中的重复行,返回唯一的行,而
  1. UNION ALL
复制代码
会返回所有的行,包括重复行。

举个通用的例子
  1. SELECT column1, column2, ...
  2. FROM table1
  3. WHERE condition
  4. UNION
  5. SELECT column1, column2, ...
  6. FROM table2
  7. WHERE condition;
复制代码

    1. SELECT column1, column2, ...
    复制代码
    : 指定要查询的列。
    1. FROM table
    复制代码
    : 指定要查询的表。
    1. WHERE condition
    复制代码
    : 指定筛选条件(可选)。
注意事项:
  1. UNION
复制代码
连接的两个 SELECT 语句必须包含相同数量和类型的列,列的顺序也必须相同。
默认情况下,
  1. UNION
复制代码
会去除重复的行。如果要包含重复的行,可以使用
  1. UNION ALL
复制代码

使用
  1. UNION
复制代码
  1. UNION ALL
复制代码
时,结果集的列名是由第一个
  1. SELECT
复制代码
语句中的列名决定的,因此要确保两个
  1. SELECT
复制代码
语句中的列名和类型相匹配。

举个实际的例子

假设有两个表
  1. employees1
复制代码
  1. employees2
复制代码
包含相同的列结构和部分重复数据,然后使用
  1. UNION
复制代码
  1. UNION ALL
复制代码
进行查询和合并。
创建两个表并插入一些数据
  1. -- 创建 employees1 表
  2. CREATE TABLE employees1 (
  3.     employee_id INT,
  4.     first_name VARCHAR(50),
  5.     last_name VARCHAR(50)
  6. );

  7. -- 插入数据到 employees1 表
  8. INSERT INTO employees1 VALUES
  9. (1, 'John', 'Doe'),
  10. (2, 'Jane', 'Smith'),
  11. (3, 'Bob', 'Johnson'),
  12. (4, 'Alice', 'Doe');

  13. -- 创建 employees2 表
  14. CREATE TABLE employees2 (
  15.     employee_id INT,
  16.     first_name VARCHAR(50),
  17.     last_name VARCHAR(50)
  18. );

  19. -- 插入数据到 employees2 表,包含一些与 employees1 表重复的数据
  20. INSERT INTO employees2 VALUES
  21. (3, 'Bob', 'Johnson'),
  22. (4, 'Alice', 'Doe'),
  23. (5, 'Eva', 'Williams');
复制代码
使用
  1. UNION
复制代码
合并这两个表的数据:
  1. -- 使用 UNION 合并,去除重复行
  2. SELECT employee_id, first_name, last_name
  3. FROM employees1
  4. UNION
  5. SELECT employee_id, first_name, last_name
  6. FROM employees2;
复制代码
结果如下:
  1. +-------------+------------+-----------+
  2. | employee_id | first_name | last_name |
  3. +-------------+------------+-----------+
  4. | 1           | John       | Doe       |
  5. | 2           | Jane       | Smith     |
  6. | 3           | Bob        | Johnson   |
  7. | 4           | Alice      | Doe       |
  8. | 5           | Eva        | Williams  |
  9. +-------------+------------+-----------+
复制代码
可以看到,
  1. UNION
复制代码
自动去除了重复的行。
使用
  1. UNION ALL
复制代码
合并这两个表的数据:
  1. -- 使用 UNION ALL 合并,包含重复行
  2. SELECT employee_id, first_name, last_name
  3. FROM employees1
  4. UNION ALL
  5. SELECT employee_id, first_name, last_name
  6. FROM employees2;
复制代码
结果如下:
  1. +-------------+------------+-----------+
  2. | employee_id | first_name | last_name |
  3. +-------------+------------+-----------+
  4. | 1           | John       | Doe       |
  5. | 2           | Jane       | Smith     |
  6. | 3           | Bob        | Johnson   |
  7. | 4           | Alice      | Doe       |
  8. | 3           | Bob        | Johnson   |
  9. | 4           | Alice      | Doe       |
  10. | 5           | Eva        | Williams  |
  11. +-------------+------------+-----------+
复制代码
可以看到

    1. UNION ALL
    复制代码
    保留了所有行,包括重复的行。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

来源:https://www.jb51.net/database/319144u9u.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具