浅析被遗忘的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 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-18 11:17:32

浅析被遗忘的SQLServer比较运算符修饰词的相关文章

浅析被遗忘的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 use t

被遗忘的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比较运算符谓词

官方的参考文档 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

Java编程中常用修饰词的使用方法

Java语言定义了public.protected.private.abstract.static和final这6常用修饰词外还定义了5个不太常用的修饰词,下面是对这11个Java修饰词的介绍: 1.public 使用对象:类.接口.成员 介绍:无论它所处在的包定义在哪,该类(接口.成员)都是可访问的 2.private 使用对象:成员 介绍:成员只可以在定义它的类中被访问 3.static 使用对象:类.方法.字段.初始化函数 介绍:成名为static的内部类是一个顶级类,它和包含类的成员是不

怎么识别出描述句子中的主语或者宾语的修饰词

问题描述 比如手机领域中,数据源是若干条对某一款手机的评论.我想把描述手机属性,例如"屏幕",的修饰词识别出来.例如"屏幕"-->"精致"我尝试用哈工大的TLP进行依存句法分析,但是得出的属性与描述之间关系效果实在不行.请问各位大大有没有比较好的算法推荐,或者开源工具?本人大三课题设计所需,还望赐教. 解决方案

Java编程思想学习笔记——访问权限修饰词

几种访问权限修饰词 public,protected,private,friendly(Java中并无该修饰词,即包访问权限,不提供任何访问修饰词) 使用时,放置在类中成员(域或方法)的定义之前的,仅仅控制它所修饰的特定定义的访问权. 包访问权限 是默认访问权限,没有任何关键字 对于同一包中的所有其他类对这个成员都有访问权限,对于包之外的所有其他类,则没有访问权限. 取得对某成员访问访问权的途径有如下方式: 用public修饰成员,任何人在任何地方都有访问权限 不加访问权限修饰词,并将其他类放在

关于抽象方法的修饰词static native synchronized

问题描述 abstractclassfruit{abstractpublicnativevoidcolor();abstractpublicvoidweight();}classappleextendsfruit{intx,y;publicvoidcolor(){System.out.println("red");}publicvoidweight(){System.out.println("heavy");}}publicclasstest20{publicsta

Java类的声明和修饰词

*类的声明 [修饰符] class <类名> [extends 父类名] [implements 接口列表]{ } 修饰符:可选,用于指定访问权限,可用值为public,abstract和finnal. 类名:一般情况下,要求首字母要大写. extends 父类名:可选,用于指定要定义的类继承于哪个父类. implements 接口列表:用于指定该类实现的是那些接口. 一个类被声明为public,就表明该类可以被所有其他的类访问和引用,也就是说程序的其他部分可以创建这个类的对象,访问这个类内部