1、知识点

先了解一下集合概念,集合运算(UNION(并)、EXCEPT(补)、INTERSECT(交))是指表之间的垂直操作。区别联接(CROSS,INNER、OUTER)是指表之间的水平操作,基础知识:笛卡尔积,对多个表执行联接操作所得到的虚拟表包含这两个表的所有列。

今天我们主要来说集合运算。

UNION运算返回俩个输入中的行的并集;EXCEPT返回在第一个输入中出现但在第二个输入中没有出现的行;INTERSECT返回在俩个输入中都出现的行。

2、union和union all

a.集合运算的时候不支持使用可选DISTINCT,因为没有指定all时,DISTINCT是隐含的。

b.集合运算的俩个输入必须具备相同的列数,而且相应列必须可以相同的数据类型,或者至少可以隐式的转换,列的名称由第一个输入决定。

c.在单独的表,表达式不允许使用order by 子句,支持所有其他的逻辑处理(联接,筛选,分组)

d.对于集合运算的最终结果,order by 是唯一允许对其直接进行操作的逻辑处理阶段。

在我们处理数据的时候,需要将多个sql结果合并起来,这个时候就需要用到union和union all。例如:

 SELECT * FROM (SELECT TOP ( 1 ) jm.*
FROM dbo.JM_FutureIncomeSource jm
LEFT JOIN dbo.v_FY_Room rm ON rm.RoomNO = jm.RoomNo
WHERE rm.ZoneID = '' AND jm.RemainingMonths BETWEEN 30 AND 36 AND jm.FutureIncome>20000 ORDER BY rm.CreateDate ASC ) a
UNION ALL
SELECT * FROM (SELECT TOP ( 1 ) jm.*
FROM dbo.JM_FutureIncomeSource jm
LEFT JOIN dbo.v_FY_Room rm ON rm.RoomNO = jm.RoomNo
WHERE rm.ZoneID = '' AND jm.RemainingMonths BETWEEN 58 AND 63 AND jm.FutureIncome>20000 ORDER BY rm.CreateDate ASC )b

sql格式 

[SQL 语句 1]
UNION(all)
[SQL 语句 2]

3、union和union all的区别

union 不带all,隐式带distinct,并在结果上应用distinct(删除重复行)

union all 是没有删除重复行的union。

4、EXCEPT (补)

ecxept 返回在第一个输入中出现,第二输入没有出现的不重复行。

返回在employees出现的城市,但是没有在customers出现的

5、INTERSECT(交)

返回在俩个输入中都出现的行(支持隐含distinct形式)

 SELECT 6 AS age
INTERSECT
SELECT 6 AS age

性能分析,可以看出顶部输入扫描和底部输入扫描匹配开销最大。

6、集合运算的优先级

INTERSECT集合运算比其他集合运算的优先级更高,最先执行INTERSECT,但是可以依靠圆括号来控制逻辑顺序。

T-Sql之集合的更多相关文章

  1. SQL进阶系列之7用SQL进行集合运算

    写在前面 集合论是SQL语言的根基,因为这种特性,SQL也被称为面向集合语言 导入篇:集合运算的几个注意事项 注意事项1:SQL能操作具有重复行的集合(multiset.bag),可以通过可选项ALL ...

  2. SQL的集合运算符介绍

    最近学习了SQL SERVER方面的知识,毕竟做Web应用,少不了跟数据库打交道.学习的来源主要是<程序员的SQL金典>这本书. 今天介绍数据库里面的集合运算符,它是指匹配集合的每一个结果 ...

  3. sql的集合操作

    原文转自:http://blog.csdn.net/qsyzb/article/details/12560917 SELECT语句的查询结果是元组的集合,所以多个SELECT语句的结果可进行集合操作. ...

  4. PL/SQL 记录集合IS TABLE OF的使用

    在PL/SQL代码块中使用select into 赋值的话,有可能返回的是一个结果集.此时,如果使用基本类型或自定义的记录类型,将会报错. 因此,需要定义一个变量,是某种类型的集合.下面以一个基于表的 ...

  5. Oracle_PL/SQL(7) 集合

    pl/sql集合处理单行单列数据,可以使用标量变量:处理单行多列的数据,可以使用pl/sql记录(%rowtype,record):处理单列多行数据,可以使用pl/sql集合. pl/sql集合类型是 ...

  6. 用python(2.7)自定义实现SQL的集合操作

    有的时候需要在不同的数据库实例之间做集合操作,这就无法直接使用SQL语句的join,left join了.相同类型的数据库之间虽然也有类似于DBLINK和FEDERATED之类的东西,但一来这些东西不 ...

  7. SQL 语句集合

    创建数据库 创建之前判断该数据库是否存在 if exists (select * from sysdatabases where name='databaseName') drop database ...

  8. SQL函数集合

    1. PATINDEX ( '%pattern%' , expression ) 返回pattern字符串在表达式expression里第一次出现的位置,起始值从1开始算. pattern字符串在ex ...

  9. sql的集合运算

    表的加减法 union:使用union 对表进行假发(并集)运算, union等集合运算符通常都会去除重复记录. select shohin_id, shohin_mei from shohin un ...

  10. 常用SQL语句集合

    一.数据定义 1.创建新数据库:CREATE DATABASE database_name2.创建新表:CREATE TABLE table_name (column_name datatype,co ...

随机推荐

  1. 102. Binary Tree Level Order Traversal + 103. Binary Tree Zigzag Level Order Traversal + 107. Binary Tree Level Order Traversal II + 637. Average of Levels in Binary Tree

    ▶ 有关将一棵二叉树转化为二位表的题目,一模一样的套路出了四道题 ▶ 第 102 题,简单的转化,[ 3, 9, 20, null, null, 15, 7 ] 转为 [ [ 15, 7 ] , [ ...

  2. springmvc怎么在启动时自己执行一个线程

    之前使用springmvc的时候,都是写好controller和对应的数据库操作. 外界发请求的时候,controller进行一堆操作后返回相应的json数据. 似乎springmvc就是外界驱动的一 ...

  3. js解决弹窗问题实现班级跳转DIV示例

    js解决弹窗问题实现班级跳转DIV 1.js代码如下: <%--实现班级跳转DIV--%>  <div id="displayClassDiv" style=&q ...

  4. zookeeper无故挂掉,启动不起来的问题

    一台测试的服务器重启后,运行zookeeperd的启动脚本显示启动成功: [plain] view plain copy     JMX enabled by default Using config ...

  5. NBU 还原主/others服务器的SQLSERVER

    一.将数据库还原回主服务器 1.运行NetBackup MS SQL Client(10.10.0.14 administrator)2.设置连接属性 testsa 添加验证凭据 3.选择恢复,再选择 ...

  6. 13.Roman to Integer (HashTable)

    Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 t ...

  7. unity3d 移动与旋转 2

    这次的代码示例是配合动画系统使用的 4.3新的动画系统允许动画带有位置偏移,只需要在Animator组件中勾选Apply Root Motion我们就可以使用它了. using UnityEngine ...

  8. indexes和indices的区别

    indexes和indices的区别是: indexes在美国.加拿大等国的英语里比较常见.但indices盛行于除北美国家以外的英语里. indices一般在数学,金融和相关领域使用,而indexe ...

  9. Golang之实现(链表)

    链表算法 package main import "fmt" type LinkNode struct { data interface{} next *LinkNode } ty ...

  10. 一)get started with the Quartz project

    官网 http://www.quartz-scheduler.org/ 下载链接 http://www.terracotta.org/download/reflector.jsp?b=tcdistri ...