SQL(7):合并字段,使用UNION,首先应使用SELECT进行检索,再使用UMION进行拼接

发布于:2025-04-16 ⋅ 阅读:(41) ⋅ 点赞:(0)

核心功能:合并查询结果

想象一下,你有两个不同的名单,你想把它们合并成一个大名单。UNIONUNION ALL 都是 SQL 里用来干这个“合并名单”的活儿的。它们可以把两个(或更多)SELECT 查询语句的结果合并到一起,显示成一个结果。

前提条件:
要合并的这几个 SELECT 查询,它们选出来的“列”的数量必须一样,并且对应位置的“列”的数据类型也得差不多兼容(比如都是数字,或者都是文字)。就像你要合并两个表格,它们的列标题和格式得对得上才行。


UNION:合并同类项,只要独一份

  • 作用: 合并多个查询结果,并且 自动去掉重复的行。如果几份名单里有完全一样的信息(整行都相同),最后结果里只保留一份。
  • 特点: 会进行去重处理,所以相对慢一点点。
  • 通俗理解: 就像你要整理一个所有朋友的通讯录。你可能从微信好友导出一份,从手机通讯录导出一份。用 UNION 合并,如果“张三”在两份名单里都有,最终的通讯录里,“张三”只出现一次。它帮你做了“合并同类项”的工作,确保每个人都是独一无二的。

UNION ALL:全部都要,不管重复

  • 作用: 合并多个查询结果,保留所有的行,包括重复的行。它只是简单地把结果堆叠在一起。
  • 特点: 不进行去重处理,所以速度通常比 UNION 快。
  • 通俗理解: 还是整理通讯录的例子。如果你用 UNION ALL 合并微信好友和手机通讯录,“张三”如果在两份名单里都有,那么最终的大名单里,“张三”就会出现两次。它不管你重不重复,拿到什么就给你什么,全部堆在一起。

主要区别:

  • UNION:去重! (Unique - 独一无二)
  • UNION ALL:不去重! (All - 全部都要)

生动形象的例子:

例子一:统计参加两个活动的人员名单

假设你们公司办了两个活动:

  1. 活动A_参与者 表:记录参加了活动A的人员名单 (张三, 李四)
  2. 活动B_参与者 表:记录参加了活动B的人员名单 (李四, 王五)
  • 使用 UNION:你想知道 总共有哪些不同的人 参加了活动(不重复计数)。

    SELECT 姓名 FROM 活动A_参与者
    UNION
    SELECT 姓名 FROM 活动B_参与者;
    
    • 结果:
      张三
      李四
      王五
      
    • 解释: 李四虽然参加了两个活动,但在最终名单里只出现一次。UNION 帮你去掉了重复的名字,得到了一个不重复的总参与人员名单。
  • 使用 UNION ALL:你想知道 两个活动总共有多少人次 参与(重复也算)。

    SELECT 姓名 FROM 活动A_参与者
    UNION ALL
    SELECT 姓名 FROM 活动B_参与者;
    
    • 结果:
      张三
      李四  (来自活动A)
      李四  (来自活动B)
      王五
      
    • 解释: 李四参加了两个活动,所以他的名字出现了两次。UNION ALL 把两个名单直接拼在一起,保留了所有的记录,包括重复的。

例子二:合并两个分店的商品列表

假设你有一个连锁超市,有两个分店:

  1. 分店1_商品 表:记录分店1在售的商品 (苹果, 香蕉, 牛奶)
  2. 分店2_商品 表:记录分店2在售的商品 (香蕉, 牛奶, 面包)
  • 使用 UNION:你想知道你的连锁超市 总共在卖哪些种类的商品(不看具体哪个店,只要种类不重复)。

    SELECT 商品名称 FROM 分店1_商品
    UNION
    SELECT 商品名称 FROM 分店2_商品;
    
    • 结果:
      苹果
      香蕉
      牛奶
      面包
      
    • 解释: 香蕉和牛奶虽然两个店都有卖,但在最终的商品种类列表里只出现一次。UNION 帮你汇总了所有不重复的商品种类。
  • 使用 UNION ALL:你想列出 所有分店的所有在售商品记录(可能用于盘点或生成一个包含重复的总列表)。

    SELECT 商品名称 FROM 分店1_商品
    UNION ALL
    SELECT 商品名称 FROM 分店2_商品;
    
    • 结果:
      苹果    (来自店1)
      香蕉    (来自店1)
      牛奶    (来自店1)
      香蕉    (来自店2)
      牛奶    (来自店2)
      面包    (来自店2)
      
    • 解释: 香蕉和牛奶因为两个店都有,所以它们各自出现了两次。UNION ALL 把两个店的商品列表原封不动地拼在了一起。

总结一下:

  • 当你需要一个合并后的、不包含重复项的干净列表时,用 UNION
  • 当你需要一个包含所有原始记录(包括重复项)的完整合并列表,或者你确定两个源没有重复(或者重复也需要保留),并且想快一点时,用 UNION ALL

网站公告

今日签到

点亮在社区的每一天
去签到