在 SELECT 查询中使用集运算符,可以将来自两个或多个查询的结果合并到单个结果集中。

  在进行集运算之前,请确保:

(1)所有输入集合中,列数和列的顺序必须相同。

(2)对应的列中,数据类型必须兼容。

  可以在一个查询中使用多个集运算符,运算时基于以下的优先级:

(1)包含在括号中的表达式。

(2)INTERSECT 运算符

(3)从左到右求值的 EXCEPT 和 UNION

一、UNION 和 UNION ALL

  UION 和 UNION ALL 用于合并两个输入查询的结果。如果某一行出现在任一输入集合中,那么它将出现在结果集合中。

  当对输入集合进行比较时,NULL 被视为相等。

  ORDER BY 不允许出现在输入集合中,但可以出现在输出结果中。

1. UNION ALL

  UNION ALL 返回所有的输入集合中的所有行,此过程不消除重复的数据行,因此相同的行可以在结果集合中多次出现。

SELECT country, region, city FROM Employees

UNION ALL

SELECT country, region, city FROM Customers

UNION ALL

SELECT country, region, city FROM Suppliers ;

2. UNION(隐式的DISTINCT)

  UNION(隐式的DISTINCT)不但组合两个输入集合,而且还将消除重复的数据行。如果某一行出现在两个输入集合中,那么它在结果集合中仅出现一次。由于排除了重复的数据行,因此需要额外的系统开销。

SELECT country, region, city FROM Employees

UNION

SELECT country, region, city FROM Customers

ORDER BY country, region, city ;

二、EXCEPT 和 INTERSECT

  EXCEPT 和 INTERSECT 比较两个输入查询的结果,返回非重复值。

  在查询执行计划的图形显示功能中,EXCEPT 运算被显示为 left anti semi join,INTERSECT 运算被显示为 left semi join。

1. EXCEPT

  EXCEPT从左输入集合中返回右输入查询中没有找到的所有非重复的值。

SELECT country, region, city FROM Employees

EXCEPT

SELECT country, region, city FROM Customers ;

2.INTERSECT

  INTERSECT返回两个输入集合中都返回的行,而且这些数据行只出现一次(非重复值)。

SELECT country, region, city FROM HR.Employees

INTERSECT

SELECT country, region, city FROM Sales.Customers ;

三、APPLY 运算符

  APPLY 运算符用在 FROM 子句。它的右边的表通常是一个表表达式(派生表或者是一个内联TVF)。

  CROSS APPLY 可以在为外部查询中的每行飞速生成数据子集的情况下使用。APPLY 运算与 JOIN 非常相似,不同之处在于 APPLY 的右侧的表表达式可以对来自左侧表的每一行表示一个不同的行集。也就是说,当在右侧使用一个表表达式时,表表达式可以引用左侧表的参数。

1. CROSS APPLY

  CROSS APPLY 允许用户指定根据外部查询中的行构造子集的方式。

SELECT

*

FROM

Orders AS O CROSS APPLY

(

SELECT TOP(2) * --for each row in Orders there will be at most 2 customers

FROM Customers C

WHERE C.[Customer ID] = O.[Customer ID]

ORDER BY C.[Customer ID]

) AS theOrdersTopCustomers

2. OUTER APPLY

  与 CROSS APPLY 不同,OUTER APPLY 还保留外部查询中与内部查询不匹配的行。

SELECT S.supplierid, s.companyname, P.productid, P.productname, P.unitprice

FROM Production.Suppliers AS S

CROSS APPLY

dbo.fn_TopProductsByShipper(S.supplierid) AS P

  前面的示例显示 OUTER APPLY 结果包括客户 ID“PARIS”,原因是 Orders 表不包含“PARIS”的任何记录。因此,内部查询返回 NULL,原因是 TOP 客户 ID 与 Orders 表中的“PARIS”匹配。将 OUTER 更改为 CROSS 会从结果中排除“PARIS”。

在 SELECT 查询中使用集运算符的更多相关文章

  1. MYSQL常用函数(聚合函数(常用于GROUP BY从句的SELECT查询中))

    AVG(col)返回指定列的平均值 COUNT(col)返回指定列中非NULL值的个数 MIN(col)返回指定列的最小值 MAX(col)返回指定列的最大值 SUM(col)返回指定列的所有值之和 ...

  2. Mybatis-plus在原有的select查询语句中动态追加查询条件

    一.适用场景 1.使用了xml形式的mapper.2.不想在select查询中大量使用<if>标签来判断条件是否存在而加入条件. 二.步骤 1.自定义wrapper继承QueryWrapp ...

  3. select查询

    4.2  查询功能 SQL的核心是查询.SQL的查询命令也称作SELECT命令,它的基本形式由SELECT-FROM-WHERE查询块组成,多个查询块可以嵌套执行. 以下表为以后的例子中使用表: 档案 ...

  4. 《Entity Framework 6 Recipes》中文翻译系列 (14) -----第三章 查询之查询中设置默认值和存储过程返回多结果集

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 3-6在查询中设置默认值 问题 你有这样一个用例,当查询返回null值时,给相应属性 ...

  5. SELECT查询结果集INSERT到数据表

    简介 将查询语句查询的结果集作为数据插入到数据表中. 一.通过INSERT SELECT语句形式向表中添加数据 例如,创建一张新表AddressList来存储班级学生的通讯录信息,然后这些信息恰好存在 ...

  6. LINQ to Entities 查询中的标准查询运算符

    投影和筛选方法 投影指的是转换的结果集到所需的窗体中的元素. 例如,可以从结果集中的每个对象投影所需的属性子集,可以投影一个属性并对其执行数学计算,也可以从结果集投影整个对象. 投影方法有 Selec ...

  7. 【MYSQL】update/delete/select语句中的子查询

    update或delete语句里含有子查询时,子查询里的表不能在update或是delete语句中,如含有运行时会报错:但select语句里含有子查询时,子查询里的表可以在select语句中. 如:把 ...

  8. SQL Fundamentals: 子查询 || WHERE,HAVING,FROM,SELECT子句中使用子查询,WITH子句

    SQL Fundamentals || Oracle SQL语言 子查询(基础) 1.认识子查询 2.WHERE子句中使用子查询 3.在HAVING子句中使用子查询 4.在FROM子句中使用子查询 5 ...

  9. SELECT列表中的标量子查询

    发现了一种表连接新的写法,以前还没有这样写过或者见别人写过.跟同学聊天他们公司却很多人这样写,看来真的要学学sql了 表 CREATE TABLE `t_book` ( `FId` ) NOT NUL ...

随机推荐

  1. 【拓扑排序】CDOJ1635 琵琶弦上说相思,当时明月在,曾照彩云归

    对于两个相邻的字符串 Si和Si+1 ,如果它们的前k-1位都相同,第k位不相同,那么,在字典序中 Si,k一定在 Si+1,k前面 建立有向边从 Si,k到 Si+1,k,进行拓扑排序 为了保证字典 ...

  2. NNVM代码阅读

    op.h #define DMLC_ATTRIBUTE_UNUSED __attribute__((unused)) __attribute__((unused)):通常,如果声明了某个变量,但从未对 ...

  3. 20172333 2017-2018-2 《Java程序设计》第9周学习总结

    20172333 2017-2018-2 <Java程序设计>第9周学习总结 教材学习内容 第十一章 异常与错误均是对象 异常是由代码的特定方法或者操作出错. 错误是代码运行中虚拟机出现错 ...

  4. 84. CYD啃骨头(背包问题)

    3111 CYD啃骨头  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description CYD吃饭时有N个骨头可以啃,但C ...

  5. PHP登录(连接数据库)小案例

    实现效果               数据库信息  代码示例: 1. login.php <!DOCTYPE html> <html> <head> <met ...

  6. BabyLinux制作过程详解

    转:http://www.360doc.com/content/05/0915/14/1429_12641.shtml BabyLinux制作过程详解 作者:GuCuiwen email:win2li ...

  7. git命令01

    1.了解git工具产生的背景知识.git 是什么? 目前它是一种分布式版本控制系统.那什么又是版本控制系统? 一种能自动帮助记录每次文件的改动,不仅仅是记录自己对文件的修 改变化,而且可以记录其他人对 ...

  8. TensorFlow进阶(一)----张量的阶和数据类型

    张量的阶和数据类型 TensorFlow用张量这种数据结构来表示所有的数据.你可以把一个张量想象成一个n维的数组或列表.一个张量有一个静态类型和动态类型的维数.张量可以在图中的节点之间流通.其实张量更 ...

  9. 关于RECOVERY清除数据的分析

    [前言] 讨论:双清和清空所有数据的问题 说明:以前写的帖子都写三清,那个是为了保险起见才叫大家三项清除,毕竟人都有刚开始的时候,但看了郭贤普的帖子<系统与数据兼容性测试>之后,我觉得有必 ...

  10. C#/Sqlite-单机Window 程序 sqlite 数据库实现

    数据库分析和选择 Excel 文件 做数据源 限制性比较强,且不适合查询,分析 等操作 Access 数据库 Access 管理数据界面和功能不强 mysql 和sql server 功能满足,但需要 ...