被遗忘的SQLServer比较运算符谓词

官方的参考文档

http://technet.microsoft.com/zh-cn/library/ms187074%28SQL.90%29.aspx

他们作用于比较运算符和子查询之间,作用类似Exists、not exists、in、not in以及其他逻辑意义,这些语法同样被SQLServer2000支持但是很少看到有人用它们。

复制代码 代码如下:

set nocount on

use tempdb

go

if (object_id ('t1' ) is not null ) drop table t1

create table t1 (n int )

insert into t1 select 2 union select 3

if (object_id ('t2' ) is not null ) drop table t2

create table t2 (n int )

insert into t2 select 1 union select 2 union select 3 union select 4

select * from t2 where n> all (select n from t1 ) --4

select * from t2 where n> any (select n from t1 ) --3,4

--select * from t2 where n>some(select n from t1) --3,4

select * from t2 where n= all (select n from t1 ) --无数据

select * from t2 where n= any (select n from t1 ) --2,3

--select * from t2 where n=some(select n from t1) --2,3

select * from t2 where n< all (select n from t1 ) --1

select * from t2 where n< any (select n from t1 ) --1,2

--select * from t2 where n<some(select n from t1) --1,2

select * from t2 where n<> all (select n from t1 ) --1,4

select * from t2 where n<> any (select n from t1 ) --1,2,3,4

--select * from t2 where n<>some(select n from t1)--1,2,3,4

set nocount off

注意,如果t1中包含null数据,那么所有All相关的比较运算将不会返回任何结果,原因就不用多解释了。而因为t1和t2表的null的存在他们和not exists之类的比较符会有一些区别。

比如下面两句

select * from t2 a where not exists(select 1 from t1 where n>=a.n)

select * from t2 where n >all(select n from t1)

他们逻辑上意义很像但是对于null的处理却是恰恰相反,第一句会忽略子查询的null而把t2的null同时查出来,第二句却是忽略了t2的null同时会因为t1中的null而无法查询到数据。

时间: 2024-08-20 21:10:08

被遗忘的SQLServer比较运算符谓词的相关文章

被遗忘的SQLServer比较运算符谓词_MsSql

官方的参考文档 http://technet.microsoft.com/zh-cn/library/ms187074%28SQL.90%29.aspx 他们作用于比较运算符和子查询之间,作用类似Exists.not exists.in.not in以及其他逻辑意义,这些语法同样被SQLServer2000支持但是很少看到有人用它们. 复制代码 代码如下: set nocount on use tempdb go if (object_id ('t1' ) is not null ) drop

被遗忘的SQLServer比较运算符修饰词

SQLServer中有三个关键字可以修改比较运算符:All.Any和Some,其中Some和Any等价.官方的参考文档http://technet.microsoft.com/zh-cn/library/ms187074%28SQL.90%29.aspx他们作用于比较运算符和子查询之间,作用类似Exists.not exists.in.not in以及其他逻辑意义,这些语法同样被SQLServer2000支持但是很少看到有人用它们. 复制代码 代码如下: set nocount on use t

浅析被遗忘的SQLServer比较运算符修饰词_MsSql

SQLServer中有三个关键字可以修改比较运算符:All.Any和Some,其中Some和Any等价.官方的参考文档http://technet.microsoft.com/zh-cn/library/ms187074%28SQL.90%29.aspx 他们作用于比较运算符和子查询之间,作用类似Exists.not exists.in.not in以及其他逻辑意义,这些语法同样被SQLServer2000支持但是很少看到有人用它们. 复制代码 代码如下: set nocount on use

浅析被遗忘的SQLServer比较运算符修饰词

SQLServer中有三个关键字可以修改比较运算符:All.Any和Some,其中Some和Any等价. 官方的参考文档 http://technet.microsoft.com/zh-cn/library/ms187074%28SQL.90%29.aspx 他们作用于比较运算符和子查询之间,作用类似Exists.not exists.in.not in以及其他逻辑意义,这些语法同样被SQLServer2000支持但是很少看到有人用它们. 复制代码 代码如下: set nocount on us

SQLSERVER对索引的利用及非SARG运算符认识_MsSql

写SQL语句的时候很多时候会用到filter筛选掉一些记录,SQL对筛选条件简称:SARG(search argument/SARG) 复制代码 代码如下: where amount>4000 and amount<6000上面这句就是筛选条件 当然这里不是说SQLSERVER的where子句,是说SQLSERVER对索引的利用在SQLSERVER对于没有SARG运算符的表达式,索引是没有用的,SQLSERVER对它们很难使用比较优化的做法. 意思是说,如果你的SQL语句中没有where子句包

SQLSERVER对索引的利用及非SARG运算符认识

写SQL语句的时候很多时候会用到filter筛选掉一些记录,SQL对筛选条件简称:SARG(search argument/SARG) 复制代码 代码如下: where amount>4000 and amount<6000上面这句就是筛选条件 当然这里不是说SQLSERVER的where子句,是说SQLSERVER对索引的利用在SQLSERVER对于没有SARG运算符的表达式,索引是没有用的,SQLSERVER对它们很难使用比较优化的做法. 意思是说,如果你的SQL语句中没有where子句包

SQLSERVER中union,cube,rollup,cumpute运算符使用说明

/* --1 UNION 运算符是将两个或更多查询的结果组合为单个结果集 使用 UNION 组合查询的结果集有两个最基本的规则: 1.所有查询中的列数和列的顺序必须相同. 2.数据类型必须兼容 a.UNION的结果集列名与第一个select语句中的结果集中的列名相同,其他select语句的结果集列名被忽略 b.默认情况下,UNION 运算符是从结果集中删除重复行.如果使用all关键字,那么结果集将包含所有行并且不删除重复行 c.sql是从左到右对包含UNION 运算符的语句进行取值,使用括号可以

SQLServer APPLY表运算符使用介绍_mssql2005

新增的APPLY表运算符把右表表达式应用到左表表达式中的每一行.它不像JOIN那样先计算那个表表达式都可以,APPLY必选先逻辑地计算左表达式.这种计算输入的逻辑顺序允许吧右表达式关联到左表表达式. APPLY有两种形式,一个是OUTER APPLY,一个是CROSS APPLY,区别在于指定OUTER,意味着结果集中将包含使右表表达式为空的左表表达式中的行,而指定CROSS,则相反,结果集中不包含使右表表达式为空的左表表达式中的行. 用几个例子解释这个会更清晰. 例1:CROSS APPLY

看懂SqlServer查询计划

原文:看懂SqlServer查询计划 对于SQL Server的优化来说,优化查询可能是很常见的事情.由于数据库的优化,本身也是一个涉及面比较的广的话题, 因此本文只谈优化查询时如何看懂SQL Server查询计划.毕竟我对SQL Server的认识有限,如有错误,也恳请您在发现后及时批评指正. 首先,打开[SQL Server Management Studio],输入一个查询语句看看SQL Server是如何显示查询计划的吧. 说明:本文所演示的数据库,是我为一个演示程序专用准备的数据库,