被遗忘的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 onuse 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,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而无法查询到数据。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- sql-server – SQL Server中的ISNULL(SUM(x),0)或SUM(ISNUL
- SQL Server批量替换语句 在SQL SERVER中批量替换字符串的方
- SQL Server -- 回忆笔记(五):T-SQL编程,系统变量,事务
- SQLServer 执行存错过程完成后却提示 不存在或者没有所需的
- sqlserver 数据库被注入解决方案
- sql-server – 公用表表达式上的PIVOT
- SQL Server将备份数据还原到数据库的步骤
- sql-server – Oracle和SQL Server可以存在于同一台服务器上
- SQLServer DBA 三十问(第11~20题)
- sql-server – 如何在保证Y某些特定行在结果中的同时选择X个