• 【数据库】组合查询 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 表中不存在的顾客信息。


    以上

  • 相关阅读:
    Zookeeper经典应用场景实战
    计算机毕业设计(附源码)python智慧校园系统
    linux CentOS7 安装git 配置秘钥公钥克隆代码
    数据结构-散列表
    【项目管理】项目中如何进行风险管理
    springboot+jsp+ssm助农系统农产品宣传网站设计
    (王道考研计算机网络)第四章网络层-第三节1:IP数据报格式及分片
    top100-贪心算法
    为荣誉而战!祝贺Bulk Transfer摄像头调试成功
    858. Prim算法求最小生成树
  • 原文地址:https://blog.csdn.net/weixin_43098506/article/details/134010252