INTERSECT/EXCEPT VS. IN/NOT IN
我真是OLD到死,虽然记得以前肯定看到过INTERSECT/EXCEPT这两个关键字,前不久还在羡慕Oracle有+/-集合操作符而SQL Server怎么竟然没有。。。现在想想难怪当初微软面试的时候面试官告诉我最好了解一下SQL Server 2005新的函数。。。
下面翻译一下http://www.sqlstuff.dk/post/intersect-except-versus-in-not-in.aspx,对INTERSECT/EXCEPT与IN/NOT IN进行比较。
SQL Server有两个有用的,用于找到两个表之间共有与差异行的函数:EXCEPT与INTERSECT。EXCEPT返回属于第一个表而不属于第二个表的行,而INTERSECT返回第一个和第二个表的交集。但它们的性能如何?
实际生活中我发现我很少有机会比较两个拥有完全相同数据列的表,但偶尔也会有这种需求。(难道这两个函数基本只在面试和考试中派用场。。。?)但是大多数情况下,这些行都有主键或其他索引,所以我一般自己只用IN和NOT IN。
为了测试,我建立了两个测试表:
SET @I = 0
WHILE @I < 10000 BEGIN
IF @I % 5 <> 0
INSERT INTO Table1 VALUES (@I, REPLICATE('A', 10))
IF @I % 4 <> 0 INSERT
INTO Table2 VALUES (@I, REPLICATE('A', 10))
SET @I = @I + 1
END
我没有建立索引。
接下来我要查询属于表1不属于表2的行。由于我知道ID是一个唯一键(unique key),就只适用NOT IN。
FROM Table1
WHERE ID NOT IN (
SELECT ID FROM Table2
)
GO
SELECT * FROM Table1
EXCEPT
SELECT * FROM Table2
GO
这样是人都知道肯定NOT IN效率差的。比率差不多是23% vs. 77%,3.3倍左右。
如果我不仅需要确认ID,还需要确认VALUE,查询语句如下:
FROM Table1
WHERE ID NOT IN (
SELECT ID FROM Table2
)
OR [Value] NOT IN (
SELECT [Value] FROM Table2
)
GO
SELECT * FROM Table1
EXCEPT
SELECT * FROM Table2
GO
差异进一步拉大。22% vs. 78%。
INTERSECT的结果也大同小异。
转载于:https://www.cnblogs.com/galaxyyao/archive/2009/11/17/1604679.html
INTERSECT/EXCEPT VS. IN/NOT IN相关推荐
- R函数:交集intersect、并集union、找不同setdiff、判断相同setequal
R语言基础系列: 你知道R中的赋值符号箭头(<-)和等号(=)的区别吗? 1数据类型(向量.数组.矩阵. 列表和数据框) 2读写数据所需的主要函数.与外部环境交互 3数据筛选--提取对象的子集 ...
- 渗透脚本快速生成工具Intersect
渗透脚本快速生成工具Intersect 当渗透人员获取目标系统的执行权限,往往需要编写相应的脚本,实现更多的渗透操作.Kali Linux提供一款Python脚本快速生成工具Intersect.该工具 ...
- Oracle集合操作函数:Union、Union All、Intersect、Minus
Union.对两个结果集进行并集操作.不包含反复行,同一时候进行默认规则的排序: Union All.对两个结果集进行并集操作,包含反复行.不进行排序: Intersect,对两个结果集进行交集操作. ...
- Oracle中的Union、Union All、Intersect、Minus 使用用法区别
Oracle中的Union.Union All.Intersect.Minus 众所周知的几个结果集集合操作命令,今天详细地测试了一下,发现一些问题,记录备考. 假设我们有一个表Student,包 ...
- mysql 代替intersect_MySQL不支持INTERSECT和MINUS及其替代方法_MySQL
bitsCN.com MySQL不支持INTERSECT和MINUS及其替代方法 Doing INTERSECT and MINUS in MySQL Doing an INTERSECTAn INT ...
- SQL Server里的INTERSECT
在今天的文章里,我想讨论下SQL Server里的INTERSECT设置操作.INTERSECT设置操作彼此交叉2个记录集,返回2个集里列值一样的记录.下图演示了这个概念. INTERSECT与INN ...
- Oracle中的Union、Union All、Intersect、Minus
Oracle中的Union.Union All.Intersect.Minus 众所周知的几个结果集集合操作命令,今天详细地测试了一下,发现一些问题,记录备考. 假设我们有一个表Student,包括 ...
- 关于交集(Intersect)和差集(Except)
函数经常会用到关于运算方面的东西.有时复杂的逻辑会变得更加容易理解. 在C#3.0,可以有几个方法推荐用用.实际场景如下: 代码 /// <summary> ...
- Scala集合List的常用方法:take/flatMap/filter/zip/union/intersect/diff及WordCount集合实现
take 跟limit作用一样 WordCount 结合flatMap flatMap扁平化 filter过滤 对集合中的元素进行过滤 zip拉链 union并集运算 intersect交集运算 di ...
最新文章
- 输入任意个整数以回车键结束_Enter键只知道回车作用?以下7个用法,你会几个?...
- 23 Merge k Sorted Lists
- 孩子有必要学python吗_不学就落后了?孩子都能学得Python编程,究竟是什么?
- HDU4633(Polya计数)
- 前端学习(2879):实现v-if和v-show设计分析 视图搭建
- linux克隆后重新封装,克隆后立即在OSX上修改Linux内核源代码
- 二级c语言统计小于n素数的个数,关于求N以内素数的一点小问题(N小于一亿)...
- idea文件为橙色去掉版本控制
- 桌面云计算: 提供灵活、可靠双保险
- Username is not in the sudoers file. This incident will be reported
- laravel插入数据时报 502 Bad Gateway
- C语言编写一个计算器(附全源代码)
- 2018年值得推荐的20个Bootstrap网站模板
- 【SPSS统计分析】SPSS聚类分析:一个案例演示聚类分析全过程(附SPSS 19.0中文版下载)
- cad编辑节点快捷键是什么_cad进入块编辑快捷键是什么,Auto CAD进入块编辑快捷键是什么?...
- 轻松教你苹果airdrop怎么用
- 数据分析之数据质量分析和数据特征分析
- FPGA基础知识----第三章 第2节 综合和仿真
- GCM与CCM的的规格和加解密过程
- 上海市高等学校计算机一级证书,上海市高等学校计算机等级考试(二级)
热门文章
- 使用TypeScript映射和条件类型使React组件更出色
- 两个主键怎么设置tsql_索引该怎么创建?
- 开机不进去桌面执行gui_电脑系统崩溃进不去,简单几步设置U盘,快速找回桌面重要文件...
- 1097 Deduplication on a Linked List
- UI设计培训分享:平面广告设计中的文案表达技巧
- 配置linux-Fedora系统下iptables防火墙
- JHipster开发环境安装
- docker的网络架构配置
- filter-mapping中的dispatcher使用
- 精品软件 推荐 瑞星 杀毒软件 安全软件