T-SQL查询进阶--数据集之间的运算

简介:
概述

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

 

数据集运算的种类

       在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查询有很大的帮助。

分类: T-SQL




本文转自CareySon博客园博客,原文链接:http://www.cnblogs.com/CareySon/archive/2011/10/13/2210156.html,如需转载请自行联系原作者

相关文章
|
1月前
|
SQL 安全 数据库
如何在Django中正确使用参数化查询或ORM来避免SQL注入漏洞?
如何在Django中正确使用参数化查询或ORM来避免SQL注入漏洞?
141 77
|
27天前
|
SQL NoSQL Java
Java使用sql查询mongodb
通过MongoDB Atlas Data Lake或Apache Drill,可以在Java中使用SQL语法查询MongoDB数据。这两种方法都需要适当的配置和依赖库的支持。希望本文提供的示例和说明能够帮助开发者实现这一目标。
45 17
|
21天前
|
SQL Oracle 关系型数据库
如何在 Oracle 中配置和使用 SQL Profiles 来优化查询性能?
在 Oracle 数据库中,SQL Profiles 是优化查询性能的工具,通过提供额外统计信息帮助生成更有效的执行计划。配置和使用步骤包括:1. 启用自动 SQL 调优;2. 手动创建 SQL Profile,涉及收集、执行调优任务、查看报告及应用建议;3. 验证效果;4. 使用 `DBA_SQL_PROFILES` 视图管理 Profile。
|
28天前
|
SQL Java 数据库连接
【潜意识Java】MyBatis中的动态SQL灵活、高效的数据库查询以及深度总结
本文详细介绍了MyBatis中的动态SQL功能,涵盖其背景、应用场景及实现方式。
92 6
|
2月前
|
SQL 存储 人工智能
Vanna:开源 AI 检索生成框架,自动生成精确的 SQL 查询
Vanna 是一个开源的 Python RAG(Retrieval-Augmented Generation)框架,能够基于大型语言模型(LLMs)为数据库生成精确的 SQL 查询。Vanna 支持多种 LLMs、向量数据库和 SQL 数据库,提供高准确性查询,同时确保数据库内容安全私密,不外泄。
381 7
Vanna:开源 AI 检索生成框架,自动生成精确的 SQL 查询
|
2月前
|
SQL NoSQL Java
Java使用sql查询mongodb
通过使用 MongoDB Connector for BI 和 JDBC,开发者可以在 Java 中使用 SQL 语法查询 MongoDB 数据库。这种方法对于熟悉 SQL 的团队非常有帮助,能够快速实现对 MongoDB 数据的操作。同时,也需要注意到这种方法的性能和功能限制,根据具体应用场景进行选择和优化。
109 9
|
3月前
|
SQL Java
使用java在未知表字段情况下通过sql查询信息
使用java在未知表字段情况下通过sql查询信息
54 8
|
3月前
|
SQL 安全 PHP
PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全
本文深入探讨了PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全。
106 4
|
3月前
|
SQL 监控 关系型数据库
SQL语句当前及历史信息查询-performance schema的使用
本文介绍了如何使用MySQL的Performance Schema来获取SQL语句的当前和历史执行信息。Performance Schema默认在MySQL 8.0中启用,可以通过查询相关表来获取详细的SQL执行信息,包括当前执行的SQL、历史执行记录和统计汇总信息,从而快速定位和解决性能瓶颈。
129 1
|
3月前
|
SQL 存储 缓存
如何优化SQL查询性能?
【10月更文挑战第28天】如何优化SQL查询性能?
246 10