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


    以上

  • 相关阅读:
    nginx(五十三)nginx中使用的PCRE正则
    linux centos7 安装nginx
    Spring MVC 入门指南
    Simulink仿真中将工作空间中的数据变量保存成.mat文件
    前置路由守卫、后置路由守卫,前置请求守卫、后置请求守卫
    OPNET Modeler 的安装及其相关配置
    Jenkins插件开发——插件的拓展
    SpringBoot bbs(3~4) 过度创作总结。
    macos brew安装多版本protobuf,切换指定版本protobuf 为默认版本方法
    网络安全(黑客)自学
  • 原文地址:https://blog.csdn.net/weixin_43098506/article/details/134010252