• 【数据库】组合查询 UNION



    概述

    • 组合查询允许将两个或多个查询的结果合并成一个单一的结果集。
    • 组合查询分类包括 UNIONUNION ALLINTERSECTEXCEPT 来合并查询结果。下述不同的组合查询;

    下述示例中将使用的表:IllinoisIndiana

    -- 表 Illinois
    cust_id		last_name	 phone 		address
    -------		---------	 --------	--------
    00100		Kevin		 123456		No.123 Rd.Green
    00123		John		 122234		No.221 Rd.Brown
    00213		Kevin		 223122		No.111 Rd.Green
    
    -- 表 Indiana
    cust_id		last_name	 phone 		address
    -------		---------	 --------	--------
    00100		Kevin		 123456		No.123 Rd.Green
    12002		Green		 123322		No.091 Rd.Yellow
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    组合查询

    UNION

    • UNION 合并两个或多个查询的结果,并且去除重复的行,所以结果集中的行是唯一的,不会包含重复的数据。

    e . g . e.g. e.g. 获取两个表中 Illinois Indiana 中所有人员(不重复);

    SELECT *
    FROM Illinois
    UNION
    SELECT *
    FROM Indiana
    
    • 1
    • 2
    • 3
    • 4
    • 5

    结果为:

    -- 结果表
    cust_id		last_name	 phone 		address
    -------		---------	 --------	--------
    00100		Kevin		 123456		No.123 Rd.Green
    00123		John		 122234		No.221 Rd.Brown
    00213		Kevin		 223122		No.111 Rd.Green
    12002		Green		 123322		No.091 Rd.Yellow
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    UNION ALL

    • UNION ALL 合并两个或多个查询的结果,但不去除重复的行。所以结果集中可能包含重复的数据;
    • UNION 相比,UNION ALL 不执行去重操作,因此性能通常更好;

    e . g . e.g. e.g. 获取两个表中 Illinois Indiana 中所有人员(可重复);

    SELECT *
    FROM Illinois
    UNION ALL
    SELECT *
    FROM Indiana;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    结果为:

    -- 结果表
    cust_id		last_name	 phone 		address
    -------		---------	 --------	--------
    00100		Kevin		 123456		No.123 Rd.Green
    00123		John		 122234		No.221 Rd.Brown
    00213		Kevin		 223122		No.111 Rd.Green
    00100		Kevin		 123456		No.123 Rd.Green
    12002		Green		 123322		No.091 Rd.Yellow
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    结果表中第一项与第四项重复。


    INTERSECT

    • INTERSECT 用于找到两个查询结果之间的交集。结果集将包含同时存在于两个查询结果中的行。

    e . g . e.g. e.g. 获取两个表中 Illinois Indiana 中都包含的行;

    SELECT *
    FROM Illinois
    INTERSECT
    SELECT *
    FROM Indiana;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    结果为:

    -- 结果表
    cust_id		last_name	 phone 		address
    -------		---------	 --------	--------
    00100		Kevin		 123456		No.123 Rd.Green
    
    • 1
    • 2
    • 3
    • 4

    EXCEPT

    • EXCEPT 结果集包含存在于第一个查询结果中但不存在于第二个查询结果中的行。

    e . g . e.g. e.g. 获取表 Illinois 中不包含 Indiana 表中值的行;

    SELECT *
    FROM Illinois
    EXCEPT
    SELECT *
    FROM Indiana;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    结果为:

    -- 结果表
    cust_id		last_name	 phone 		address
    -------		---------	 --------	--------
    00123		John		 122234		No.221 Rd.Brown
    00213		Kevin		 223122		No.111 Rd.Green
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 查询将返回在 Illinois 表中存在但在 Indiana 表中不存在的顾客信息。


    以上

  • 相关阅读:
    c#使用自带库对字符串进行AES加密、解密
    聊一聊 .NET高级调试 内核模式堆泄露
    Java#15(集合)
    快来玩AI画图!StableDiffusion模型搭建与使用入门~
    Godot 脚本外置参数设置
    Nginx浏览器缓存
    建造者模式(创建型)
    使用 Anaconda 配置 Python 环境
    为什么同样是测试,他能年薪50W?
    文本的换行与包裹 之可能是全网最详细的 line-break 中文介绍
  • 原文地址:https://blog.csdn.net/weixin_43098506/article/details/134010252