在 SELECT 查询中使用集运算符
在 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 查询中使用集运算符的更多相关文章
- MYSQL常用函数(聚合函数(常用于GROUP BY从句的SELECT查询中))
AVG(col)返回指定列的平均值 COUNT(col)返回指定列中非NULL值的个数 MIN(col)返回指定列的最小值 MAX(col)返回指定列的最大值 SUM(col)返回指定列的所有值之和 ...
- Mybatis-plus在原有的select查询语句中动态追加查询条件
一.适用场景 1.使用了xml形式的mapper.2.不想在select查询中大量使用<if>标签来判断条件是否存在而加入条件. 二.步骤 1.自定义wrapper继承QueryWrapp ...
- select查询
4.2 查询功能 SQL的核心是查询.SQL的查询命令也称作SELECT命令,它的基本形式由SELECT-FROM-WHERE查询块组成,多个查询块可以嵌套执行. 以下表为以后的例子中使用表: 档案 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (14) -----第三章 查询之查询中设置默认值和存储过程返回多结果集
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 3-6在查询中设置默认值 问题 你有这样一个用例,当查询返回null值时,给相应属性 ...
- SELECT查询结果集INSERT到数据表
简介 将查询语句查询的结果集作为数据插入到数据表中. 一.通过INSERT SELECT语句形式向表中添加数据 例如,创建一张新表AddressList来存储班级学生的通讯录信息,然后这些信息恰好存在 ...
- LINQ to Entities 查询中的标准查询运算符
投影和筛选方法 投影指的是转换的结果集到所需的窗体中的元素. 例如,可以从结果集中的每个对象投影所需的属性子集,可以投影一个属性并对其执行数学计算,也可以从结果集投影整个对象. 投影方法有 Selec ...
- 【MYSQL】update/delete/select语句中的子查询
update或delete语句里含有子查询时,子查询里的表不能在update或是delete语句中,如含有运行时会报错:但select语句里含有子查询时,子查询里的表可以在select语句中. 如:把 ...
- SQL Fundamentals: 子查询 || WHERE,HAVING,FROM,SELECT子句中使用子查询,WITH子句
SQL Fundamentals || Oracle SQL语言 子查询(基础) 1.认识子查询 2.WHERE子句中使用子查询 3.在HAVING子句中使用子查询 4.在FROM子句中使用子查询 5 ...
- SELECT列表中的标量子查询
发现了一种表连接新的写法,以前还没有这样写过或者见别人写过.跟同学聊天他们公司却很多人这样写,看来真的要学学sql了 表 CREATE TABLE `t_book` ( `FId` ) NOT NUL ...
随机推荐
- 【manacher】HDU4513-吉哥系列故事——完美队形II
[题目大意] 求最长回文队伍且队伍由中间向两边递减. [思路] 和字符串一样的做法,在递推的时候增加判断条件:a[i-p[i]]<=a[i-p[i]+2]. #include<iostre ...
- PHP 正则表达式匹配 img ,PHP 正则提取或替换图片 img 标记中的任意属性。
PHP正则提取或替换img标记属性 PHP 正则表达式匹配 img ,PHP 正则提取或替换图片 img 标记中的任意属性. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...
- NHibernate官方文档中文版——批量插入(Batch inserts)
A naive approach t7o inserting 100 000 rows in the database using NHibernate might look like this: 一 ...
- mysql错误10060
setenforce 0 service iptables stop mysql -u root -p Aaa111222333 GRANT ALL PRIVILEGES ON *.* TO 'roo ...
- HDU 4635 Strongly connected (2013多校4 1004 有向图的强连通分量)
Strongly connected Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- webpack与browser-sync热更新原理深度讲解
本文首发于CSDN网站,下面的版本又经过进一步的修订.原文:webpack与browser-sync热更新原理深度讲解本文包含如下内容: webpack-hot-middleware EventSou ...
- 修改activeMQ端口号
原文:http://jingyan.baidu.com/article/3ea51489fba6a152e61bbacc.html 修改TCP 61616端口 打开您的mq安装目录 请看下图 如下图所 ...
- Mac OS X 11年9个版本的历经变化
本月苹果将发布OS X 10.8 Mountain Lion,是Mac OS X系统在其11年生命长河中的第9个版本.2001年,刚从鬼门关爬回来的苹果决定在OS X上做一个赌注,因为他们已经浪费了1 ...
- QT5的程序打包发布(将QT5的工程项目打包成一个exe程序)
最近,在学习QT5的过程中,想尝试着把自己写的工程程序给打包发布出来,在任何一台windows系统都能运行,这样就不会限于电脑需不需要安装QT安装包了. 首先,先介绍自己使用的环境.我使用的QT版本是 ...
- LeetCode56:Jump Game
Given an array of non-negative integers, you are initially positioned at the first index of the arra ...