您现在的位置是:首页 > 正文

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

2024-02-01 04:29:17阅读 2

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而无法查询到数据。

网站文章

  • linux问题排查常用命令详解

    linux问题排查常用命令详解

    前阵子部署的服务器出现了故障,针对故障现场做了个排查,后来发现是nginx的quic分支代码的问题,出现了死循环导致CPU 近100%记录下在排查过程中使用的命令和

    2024-02-01 04:29:11
  • Git远程仓库配置SSH(以github为例)

    Git远程仓库配置SSH(以github为例)

    输入命令以及。 输入命令,查看配置是否正确。 输入命令。 然后连续敲三次回车,如果没问题你会看到如下界面 输入命令,查看生成的公钥。 也可以直接打开文件进行查看。 打开github,点击用户头像,再点...

    2024-02-01 04:28:42
  • idea 一键导包

    idea 一键导包 一键删除没有 的包,导入缺失的包 ctrl + alt + o

    2024-02-01 04:28:33
  • Session会话追踪的实现机制

    Session会话追踪的实现机制

    Session(会话)是Servlet中的一种特殊的机制,它可以用来存储K-V键值对,它的生命周期较长,在服务器关闭或Session失效和客户端浏览器关闭之前,Session中的数据都不会消失,而且每...

    2024-02-01 04:28:26
  • SSM整合相关知识

    SSM整合相关知识

    SSM整合时,classpath:与 jdbc.properties的使用

    2024-02-01 04:27:56
  • 腾讯云Linux 轻量应用服务器如何搭建 FTP 服务?

    腾讯云Linux 轻量应用服务器如何搭建 FTP 服务?

    如果您选择了 FTP 主动模式,请确保客户端机器已获取真实的 IP 地址,否则可能会导致客户端无法登录 FTP 服务器。1. 修改以下配置参数,设置匿名用户和本地用户的登录权限,设置指定例外用户列表文...

    2024-02-01 04:27:49
  • nginx 无证书代理https stream模块的ssl_preread on

    当启用 &quot;ssl_preread on&quot; 时,nginx 会在没有证书的情况下使用 Stream 模块代理 HTTPS 流量。这意味着 nginx 将在没有验证客户端证书的情况下转发流量,但是这种方法可能不够安全。 ...

    2024-02-01 04:27:42
  • 页面访问时发生错误: java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config

    页面访问时发生错误: java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config在使用SpringMVC时,出现上述错误解决方法:将jstl-1.1.2.jar、standard-1.1.2.jar这2个jar包放到tomcat内的lib目录下,即可解决问题

    2024-02-01 04:27:13
  • 服务器帮挂项目,云服务器挂机项目

    服务器帮挂项目,云服务器挂机项目

    云服务器挂机项目 内容精选换一换查询云服务器组列表。GET /v2.1/{project_id}/os-server-groups参数说明请参见表1。参数说明参数是否必选描述project_id是项目...

    2024-02-01 04:27:08
  • JDK8系列:阻塞队列 之 DelayQueue(延迟队列)源码分析

    1、DelayQueue 简介 DelayQueue 是一个支持延时获取元素的无界阻塞队列,队列使用PriorityQueue来实现,队列中的元素必须实现Delayed接口,在创建元素时可以指定多久才...

    2024-02-01 04:27:00