SQL UNION 操作符的使用方法和注意事项

UNION 是 SQL 中用于合并多个 SELECT 查询结果集的操作符。它会将多个查询的结果合并为一个结果集,并自动去除重复的行。以下是 UNION 的使用方法和注意事项。


使用方法

基本语法:
SELECT column1, column2, ...
FROM table1
UNION
SELECT column1, column2, ...
FROM table2;
示例:

假设有两个表 AB

  • A

    id | name
    ---|-----
    1  | Alice
    2  | Bob
    
  • B

    id | name
    ---|-----
    2  | Bob
    3  | Charlie
    

使用 UNION 合并两个表的 name 列:

SELECT name FROM A
UNION
SELECT name FROM B;

结果:

name
-----
Alice
Bob
Charlie

注意事项

  1. 列数和数据类型必须匹配

    • 每个 SELECT 语句的列数必须相同。
    • 对应列的数据类型必须兼容(例如,不能将字符串列与数字列合并)。

    错误示例

    SELECT id FROM A
    UNION
    SELECT name FROM B; -- 错误:id 和 name 数据类型不匹配
    
  2. 自动去重

    • UNION 会自动去除重复的行。如果不需要去重,可以使用 UNION ALL

    示例

    SELECT name FROM A
    UNION ALL
    SELECT name FROM B;
    

    结果:

    name
    -----
    Alice
    Bob
    Bob
    Charlie
    
  3. 性能问题

    • UNION 会去重,因此需要对结果集进行排序和比较,可能会影响性能。
    • 如果不需要去重,尽量使用 UNION ALL,因为它不会去重,性能更高。
  4. 列名规则

    • 最终结果集的列名由第一个 SELECT 语句的列名决定。
    • 如果需要对列名进行重命名,可以在第一个 SELECT 语句中使用别名。

    示例

    SELECT name AS full_name FROM A
    UNION
    SELECT name FROM B;
    

    结果:

    full_name
    ---------
    Alice
    Bob
    Charlie
    
  5. 排序

    • 如果需要对合并后的结果集排序,只能在最后一个 SELECT 语句后添加 ORDER BY
    • ORDER BY 只能使用最终结果集的列名。

    示例

    SELECT name FROM A
    UNION
    SELECT name FROM B
    ORDER BY name DESC;
    

    结果:

    name
    -----
    Charlie
    Bob
    Alice
    
  6. NULL 值处理

    • 如果某列包含 NULL 值,UNION 会将其视为相同的值并去重。

    示例

    SELECT name FROM A
    UNION
    SELECT NULL FROM B;
    

    结果:

    name
    -----
    Alice
    Bob
    NULL
    

UNION 和 UNION ALL 的区别

特性UNIONUNION ALL
去重自动去重不去重
性能较慢(需要去重)较快(不需要去重)
结果集大小可能小于输入结果集的总和等于输入结果集的总和

总结

  • 使用 UNION 时,确保每个 SELECT 语句的列数和数据类型一致。
  • 如果需要去重,使用 UNION;如果不需要去重,使用 UNION ALL 以提高性能。
  • 排序只能在最后一个 SELECT 语句后使用 ORDER BY
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值