zoukankan      html  css  js  c++  java
  • 被遗忘的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而无法查询到数据。

  • 相关阅读:
    【LeetCode】048. Rotate Image
    【LeetCode】036. Valid Sudoku
    【LeetCode】060. Permutation Sequence
    【LeetCode】001. Two Sum
    【LeetCode】128. Longest Consecutive Sequence
    【LeetCode】081. Search in Rotated Sorted Array II
    【LeetCode】033. Search in Rotated Sorted Array
    顺时针打印矩阵
    矩形覆盖
    二维数组中的查找
  • 原文地址:https://www.cnblogs.com/cl1024cl/p/6204820.html
Copyright © 2011-2022 走看看