欢迎投稿

今日深度:

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

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


目录
  • 使用UNION和UNION ALL合并两个或多个SELECT语句的结果集
    • 举个通用的例子
    • 举个实际的例子
  • 总结

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

    在MySQL中, UNIONUNION ALL 是用于合并两个或多个 SELECT 语句的结果集的操作符。

    UNION 会去除结果集中的重复行,返回唯一的行,而 UNION ALL 会返回所有的行,包括重复行。

    举个通用的例子

    SELECT column1, column2, ...
    FROM table1
    WHERE condition
    UNION
    SELECT column1, column2, ...
    FROM table2
    WHERE condition;
    
    • SELECT column1, column2, ...: 指定要查询的列。
    • FROM table: 指定要查询的表。
    • WHERE condition: 指定筛选条件(可选)。

    注意事项:

    UNION 连接的两个 SELECT 语句必须包含相同数量和类型的列,列的顺序也必须相同。

    默认情况下,UNION 会去除重复的行。如果要包含重复的行,可以使用 UNION ALL

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

    举个实际的例子

    假设有两个表 employees1employees2

    包含相同的列结构和部分重复数据,然后使用 UNIONUNION ALL 进行查询和合并。

    创建两个表并插入一些数据

    -- 创建 employees1 表
    CREATE TABLE employees1 (
        employee_id INT,
        first_name VARCHAR(50),
        last_name VARCHAR(50)
    );
    
    -- 插入数据到 employees1 表
    INSERT INTO employees1 VALUES
    (1, 'John', 'Doe'),
    (2, 'Jane', 'Smith'),
    (3, 'Bob', 'Johnson'),
    (4, 'Alice', 'Doe');
    
    -- 创建 employees2 表
    CREATE TABLE employees2 (
        employee_id INT,
        first_name VARCHAR(50),
        last_name VARCHAR(50)
    );
    
    -- 插入数据到 employees2 表,包含一些与 employees1 表重复的数据
    INSERT INTO employees2 VALUES
    (3, 'Bob', 'Johnson'),
    (4, 'Alice', 'Doe'),
    (5, 'Eva', 'Williams');
    

    使用 UNION 合并这两个表的数据:

    -- 使用 UNION 合并,去除重复行
    SELECT employee_id, first_name, last_name
    FROM employees1
    UNION
    SELECT employee_id, first_name, last_name
    FROM employees2;
    

    结果如下:

    +-------------+------------+-----------+
    | employee_id | first_name | last_name |
    +-------------+------------+-----------+
    | 1           | John       | Doe       |
    | 2           | Jane       | Smith     |
    | 3           | Bob        | Johnson   |
    | 4           | Alice      | Doe       |
    | 5           | Eva        | Williams  |
    +-------------+------------+-----------+
    

    可以看到,UNION 自动去除了重复的行。

    使用 UNION ALL 合并这两个表的数据:

    -- 使用 UNION ALL 合并,包含重复行
    SELECT employee_id, first_name, last_name
    FROM employees1
    UNION ALL
    SELECT employee_id, first_name, last_name
    FROM employees2;
    

    结果如下:

    +-------------+------------+-----------+
    | employee_id | first_name | last_name |
    +-------------+------------+-----------+
    | 1           | John       | Doe       |
    | 2           | Jane       | Smith     |
    | 3           | Bob        | Johnson   |
    | 4           | Alice      | Doe       |
    | 3           | Bob        | Johnson   |
    | 4           | Alice      | Doe       |
    | 5           | Eva        | Williams  |
    +-------------+------------+-----------+
    

    可以看到

    • UNION ALL 保留了所有行,包括重复的行。

    总结

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

    您可能感兴趣的文章:
    • MySQL之union和union all的使用及区别说明
    • MySQL窗口函数 over(partition by)的用法
    • mysql中over partition by的具体使用
    • 解决Mysql磁盘IO占用过高的问题

    www.htsjk.Com true http://www.htsjk.com/Mysql/47760.html NewsArticle MySQL之使用UNION和UNIONALL合并两个或多个SELECT语句的结果集, 目录 使用UNION和UNION ALL合并两个或多个SELECT语句的结果集 举个通用的例子 举个实际的例子 总结 使用UNION和UNION ALL合并两个或...
    评论暂时关闭