SQL的集合运算符简介

最近学习了SQL SERVER方面的知识,毕竟做Web应用,少不了跟数据库打交道。学习的来源主要是《 程序员的SQL金典》这本书。

今天介绍数据库里面的集合运算符,它是指匹配集合的每一个结果。数据库集合运算符包括:IN、 ANY、SOME、ALL、EISTS及EXCEPT和INTERSECT等。

(1)IN运算符:它可以用来匹配一个固定集合中的某一项。比如说一个集合里面的年份有 (2001,2003,2005),那么就可以有:

SELECT * FROM T_Book

WHERE FYearPublished IN(2001,2003,2005)

IN运算符,除了支持从固定的集合里面去匹配,当然也支持动态的集合方式去匹配。比如如下方式:

SELECT * FROM T_Reader

WHERE FYearOfJoin IN

(

select FYearPublished FROM T_Book

)

(2)ANY和SOME集合运算符:在SQL SERVER里面,ANY和SOME是同义词,二者的用法和功能一样(一 样还搞两个,不知道是不是蛋疼)。相比于IN运算符,ANY和SOME需要与其它的比较符(大于(>)、 等于(=)、小于(<)、大于等于(>=)、小于等)共同使用,而且比较符需要在它们的前面。

SELECT * FROM T_Reader

WHERE FYearOfJoin =ANY

(

select FYearPublished FROM T_Book

)

注意:和IN 运算符不同,ANY 和SOME运算符不能与固定的集合相匹配,比如下面的SQL 语句是错误 的:

SELECT * FROM T_Book

WHERE FYearPublished<ANY(2001,2003,2005)

(3)ALL集合运算符:在SQL SERVER里面,ALL运算符也需要与其它的比较符(大于(>)、等于 (=)、小于(<)、大于等于(>=)、小于等)共同使用,而且比较符需要在它们的前面。

SELECT * FROM T_Book

WHERE FYearPublished<ALL

(

SELECT FYearOfJoin FROM T_Reader

)

注意:

I、与ANY和SOME 运算符相同,ALL 运算符同样不能与固定的集合相匹配,比如下面的SQL 语句是错 误的:

SELECT * FROM T_Book

WHERE FYearPublished<ALL(2001,2003,2005)

II、关于使用ALL运算符,还有一项需要注意,那就是这个ALL子查询结果为空时,匹配的结果并不是 以空的方式来处理,而是相当于全部匹配成功。所以在使用ALL运算符的时候,这一个问题很容易在系统 中造成BUG,因此使用时必须注意。比如:

SELECT * FROM T_Book

WHERE FYearPublished<ALL

(

SELECT FYearOfJoin FROM T_Reader

WHERE FProvince = 'JiangSu'

)

如果ALL子查询的结果为空时,则将会取SELECT FYearOfJoin FROM T_Reader的全部结果来作为成功 匹配的结果。

时间: 2024-09-20 22:35:24

SQL的集合运算符简介的相关文章

sql集合运算符使用方法_MsSql

(1)IN运算符:它可以用来匹配一个固定集合中的某一项.比如说一个集合里面的年份有(2001,2003,2005),那么就可以有: 复制代码 代码如下: SELECT * FROM T_BookWHERE FYearPublished IN(2001,2003,2005) IN运算符,除了支持从固定的集合里面去匹配,当然也支持动态的集合方式去匹配.比如如下方式: 复制代码 代码如下: SELECT * FROM T_ReaderWHERE FYearOfJoin IN(select FYearP

sql集合运算符使用方法

(1)IN运算符:它可以用来匹配一个固定集合中的某一项.比如说一个集合里面的年份有(2001,2003,2005),那么就可以有: 复制代码 代码如下:SELECT * FROM T_BookWHERE FYearPublished IN(2001,2003,2005) IN运算符,除了支持从固定的集合里面去匹配,当然也支持动态的集合方式去匹配.比如如下方式: 复制代码 代码如下:SELECT * FROM T_ReaderWHERE FYearOfJoin IN(select FYearPub

浅析SQL Server联合运算符总结教程

相关阅读:SQL Server常用运算符学习总结教程 技术准备 基于SQL Server2008R2版本,利用微软的一个更简洁的案例库(Northwind)进行解析. 一.联合运算符 所谓的联合运算符,其实应用最多的就两种:UNION ALL和UNION. 这两个运算符用法很简单,前者是将两个数据集结果合并,后者则是合并后进行去重操作,如果有过写T-SQL语句的码农都不会陌生. 我们来分析下这两个运算符在执行计划中的显示,举个例子 SELECT FirstName+N''+LastName,Ci

SQL Server常用运算符学习总结教程

技术准备 基于SQL Server2008R2版本,利用微软的一个更简洁的案例库(Northwind)进行解析. 一.数据连接 数据连接是我们在写T-SQL语句的时候最常用的,通过两个表之间关联获取想要的数据. SQL Server默认支持三种物理连接运算符:嵌套循环连接.合并连接以及哈希连接.三种连接各有用途,各有特点,不同的场景会数据库会为我们选择最优的连接方式. a.嵌套循环连接(nested loops join) 嵌套循环连接是最简单也是最基础的连接方式.两张表通过关键字进行关联,然后

SQL Server差异备份简介

此备份和还原主题与所有 SQL Server 数据库相关. 差异备份所基于的是最近一次的完整数据备份. 差异备份仅捕获自该次完整备份后发生更改的数据. 差异备份所基于的完整备份称为差异的"基准". 完整备份(仅复制备份除外)可以用作一系列差异备份的基准,包括数据库备份.部分备份和文件备份. 文件差异备份的基准备份可以包含在完整备份.文件备份或部分备份中. 本主题内容: 优点 差异备份概述 对只读数据库进行差异备份 相关任务 优点 与创建完整备份相比,创建差异备份的速度可能非常快. 差异

SQL SERVER日志链简介

先说清楚这些概念吧 SQLSERVER只有日志链,备份记录(有些人也叫备份链)本人觉得叫备份记录更合适 下面三个东西说的都是同一样东西 备份集=备份记录=备份链 备份集:比如备份的集合,比如有对一个数据库的完备1.差备.日备1.完备2.日备2,这些数据库的备份的集合就 是备份集 不过我更喜欢叫备份记录 备份记录实际上指 SELECT * FROM [msdb].[dbo].[backupset] 截断日志跟日志链断裂是否是同一样东西? 截断日志跟日志链断裂不是同一样东西 什么是日志链 其实大家可

LINQ体验(13)——LINQ to SQL语句之运算符转换和ADO.NET与LINQ to SQL

运算符转换1.AsEnumerable:将类型转换为泛型 IEnumerable 使用 AsEnumerable<TSource> 可返回类型化为泛型 IEnumerable 的参数.在 此示例中,LINQ to SQL(使用默认泛型 Query)会尝试将查询转换为 SQL 并在 服务器上执行.但 where 子句引用用户定义的客户端方法 (isValidProduct), 此方法无法转换为 SQL. 解决方法是指定 where 的客户端泛型 IEnumerable<T> 实现以替

mysql SQL AND &amp; OR 运算符

AND 和 OR 运算符用于基于一个以上的条件对记录进行过滤. AND 和 OR 运算符 AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来. 如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录. 如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录. 原始的表 (用在例子中的): LastName FirstName Address City Adams John Oxford Street London Bush George Fifth

Windows系统下Java连接SQL Server的方法简介_java

使用JDBC连接SQL Server 设置SQL Server服务器 我使用的是SQL Server 2005标准版SP2,这些都默认即可,一般不用配置.如果需要配置端口请看下面. 1."开始"→"程序"→"Microsoft SQL Server 2005"→"配置工具"→"SQL Server 配置管理器"→"SQL Server 2005 网络配置"→"MSSQLSERV