• TSQL查询进阶数据集之间的运算


    概述

           关系数据库的起源起源于数学中的集合概念.所以集合与集合之间,也同样继承了数学集合之间的运算.而对于在关系数据库中,常常用于两个数据集中并没有直接的关系数据库中的“关系”,比如外键.但两个数据集会有间接的关系,比如两届比赛,参加比赛人员集合之间会有间接关系.

    数据集运算的种类

           在T-SQL中,关系运算实际上可以分为四类,首先看我们举例子用的表:

           这里的例子表分别为两个不同会议参加的人员记录,分别为Meeting1和Meeting2,如下:

           1_1 1_2

           关系运算的具体可以分为以下四类:

    1.A∩B,既是所求数据集既在A中,又在B中

           在实例表中,实际的例子为既参加第一个会议,又参加第二个会议人的集合,如下图:

         2

    2.A∪B,既所求数据在数据集A中,或在数据集B中

            在实例表中,实际的例子为参加第一个会议,或参加第二个会议人的集合,如下图:

            3

    3.A-B,既所求数据在数据集A中,不在数据集B中

         在实例表中,实际的例子为参加了第一个会议,同时没有参加第二个会议的人的集合,如下图:

          4

    4.B-A,既所求数据在数据集B中,不在数据集A中

           这个其实和上面第三种情况没有本质区别,只是顺序颠倒了一下,如下图:

          5

    数据集的来源

          在T-SQL中,参与数据集运算的两个数据集可以来自任何返回数据集的表达式.比如,一张表,一张表的子集,多张表,临时表变量,虚拟列,甚至是一个scalar值

    数据集运算的条件

          并不是所有的数据集都可以做运算。就像一个苹果+一个鸭梨不能等于2一样,在T-SQL中,数据集之间的运算需要符合下面3个条件:

         1.两个数据集之间必须有相同数量的列(Column)

         2.两个数据集之间列出现的次序必须一致

         3.两个数据集之间每一个对应的列的数据类型必须匹配

    数据集运算在T-SQL中的实现

       

    1.A∪B  使用UNION实现

         T-SQL中提供了UNION来实现A∪B的运算,实际上UNION有两个版本,分别为:

         UNION

         UNION表示了A∪B的关系,当遇到两个数据集中相同的行时,保留唯一一个:

         6

       UNION ALL

       UNION ALL同样实现了A∪B的逻辑,但与UNION不同的是,当遇到两个数据集中重复的行时,全部保留:

       7

    2.A∩B,使用INTERSECT实现

         T-SQL提供了INTERSECT关键字来实现A∩B的关系:

         8

    3.A-B,使用EXCEPT实现

        T-SQL提供了EXCEPT关键字来实现A-B的关系:

        9

    数据集运算的别名和排序

        如果没有为数据列指定别名,则数据列的名称按照出现在第一个集合对应的列名算:

        10

        做UNION后:

        11

        如若我们想自定义列名,则需要为数据集运算中出现在第一位的数据集指定别名:

         12

    对运算后的结果进行排序

        对运算后的结果进行排序是一件非常简单的事情,只需要在运算的最后加上ORDER BY子句,但是这里一定要注意:

        1.ORDER BY是对整个运算后的结果排序,并不是对单个数据集

        2.ORDER BY后面排序的字段名称是第一个数据集的字段名或者别名

        13

    总结

        本文详细介绍了简单的集合运算,并给出了简单集合运算在T-SQL中的实现。在文章最后还介绍了运算的别名规则和排序规则.掌握集合之间的运算对更加清晰的了解T-SQL查询有很大的帮助。

  • 相关阅读:
    解决VS2012新建MVC4等项目时,收到加载程序集“NuGet.VisualStudio.Interop…”的错误
    BOM 清除
    sleep和Sleep区别
    出现error: stray ‘357’ in program的根源
    vi 复制或剪切多行超级强大方法
    CentOS乱码解决方法
    VBS实现文本文件按行数拆分的脚本
    python-门户应用状态检查脚本
    HTA+VBS实现的话单核查小工具
    oracle 11g 安装
  • 原文地址:https://www.cnblogs.com/CareySon/p/2210156.html
Copyright © 2020-2023  润新知