sql集合运算符使用方法

(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的全部结果来作为成功匹配的结果。

(4)EXISTS集合运算符:和IN、ANY、SOME、ALL等运算符不同,EXISTS运算符是单目运算符,它不与列匹配,因此它也不要求待匹配的集合是单列的。EXISTS运算符用来检查每一行是否匹配子查询,可以认为EXISTS就是用来测试子查询的结果是否为空,如果结果集为空则匹配结果为false,否则匹配结果为true。

代码如下:

SELECT * FROM T_Category
WHERE EXISTS
(
SELECT * FROM T_Book
WHERE T_Book. FCategoryId = T_Category.FId
AND T_Book. FYearPublished<1950
)

在EXISTS后的子查询中,SQL对T_Category表中的每一行数据到子查询中进行匹配,测试T_Book 表中是否存在FCategoryId 字段值等于当前类别主键值且出版年份在1950 年之前的书籍。

(0)

相关推荐

  • sql集合运算符使用方法

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

  • Python正确重载运算符的方法示例详解

    前言 说到运算符重载相信大家都不陌生,运算符重载的作用是让用户定义的对象使用中缀运算符(如 + 和 |)或一元运算符(如 - 和 ~).说得宽泛一些,在 Python 中,函数调用(()).属性访问(.)和元素访问 / 切片([])也是运算符. 我们为 Vector 类简略实现了几个运算符.__add__ 和 __mul__ 方法是为了展示如何使用特殊方法重载运算符,不过有些小问题被我们忽视了.此外,我们定义的Vector2d.__eq__ 方法认为 Vector(3, 4) == [3, 4]

  • Php中用PDO查询Mysql来避免SQL注入风险的方法

    当我们使用传统的 mysql_connect .mysql_query方法来连接查询数据库时,如果过滤不严,就有SQL注入风险,导致网站被攻击,失去控制.虽然可以用mysql_real_escape_string()函数过滤用户提交的值,但是也有缺陷.而使用PHP的PDO扩展的 prepare 方法,就可以避免sql injection 风险. PDO(PHP Data Object) 是PHP5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连

  • php简单实现sql防注入的方法

    本文实例讲述了php简单实现sql防注入的方法.分享给大家供大家参考,具体如下: 这里没有太多的过滤,主要是针对php和mysql的组合. 一般性的防注入,只要使用php的 addslashes 函数就可以了. 以下是一段copy来的代码: PHP代码: $_POST = sql_injection($_POST); $_GET = sql_injection($_GET); function sql_injection($content) { if (!get_magic_quotes_gpc

  • python判断集合的超集方法及实例

    1.说明 可以使用 >= 运算符判断当前集合是否为另一个集合的超集,即判断集合 b 中的所有元素是否都包含在集合 a 中. 2.语法 set_a >= set_b # 相当于set_a.issuperset(set_b) 3.参数 set_a:集合 a. set_b:集合 b. 4.返回值 返回布尔值,如果集合 b 中的所有元素都包含在集合 a 中,则返回 True,否则返回 False. 5.实例 # 创建集合 a = {'赵', '钱', '孙', '李'} b = {'赵', '孙',

  • SQL Server实现分页方法介绍

    一.创建测试表 CREATE TABLE [dbo].[Student]( [id] [int] NOT NULL, [name] [nvarchar](50) NULL, [age] [int] NULL) 二.创建测试数据 declare @i int set @i=1 while(@i<10000) begin insert into Student select @i,left(newid(),7),@i+12 set @i += 1 end 三.测试 1.使用top关键字 top关键字

  • MySQL解决SQL注入的另类方法详解

    本文实例讲述了MySQL解决SQL注入的另类方法.分享给大家供大家参考,具体如下: 问题解读 我觉得,这个问题每年带来的成本可以高达数十亿美元了.本文就来谈谈,假定我们有如下 SQL 模板语句: select * from T where f1 = '{value1}' and f2 = {value2} 现在我们需要根据用户输入值填充该语句: value1=hello value2=5 我们得到了下面的 SQL 语句,我们再提交给数据库: select * from T where f1='h

  • DBCC SHRINKDATABASEMS SQL数据库日志压缩方法

    MS SQL数据库日志压缩方法 MS SQL性能是很不错的,但是数据库用了一段时间之后,数据库却变得很大,实际的数据量不大.一般都是数据库日志引起的!数据库日志的增长可以达到好几百M. 网上的MSSQL虚拟主机价格也贵,要想不让数据库超容,只好压缩下数据库日志,或者删除数据库日志. 下面我给大家介绍一个方法 1.打开企业管理器 2.打开要处理的数据库 3.点击菜单>工具>SQL查询分析器 4.在输入窗口里面输入: DUMP TRANSACTION [数据库名] WITH NO_LOG BACK

  • ASP.NET防范SQL注入式攻击的方法

    一.什么是SQL注入式攻击?  SQL注入式攻击就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令.在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击.常见的SQL注入式攻击过程类如: ⑴ 某个ASP.NET Web应用有一个登录页面,这个登录页面控制着用户是否有权访问应用,它要求用户输入一个名称和密码. ⑵ 登录页面中输入的内容将直接用来构造动态的SQL命令,或者直

  • go语言通过odbc访问Sql Server数据库的方法

    本文实例讲述了go语言通过odbc访问Sql Server数据库的方法.分享给大家供大家参考.具体如下: 这里需要用到go-odbc库,开源地址为:https://github.com/weigj/go-odbc 复制代码 代码如下: package main; import (     "fmt"     "database/sql"     _"odbc/driver" ) func main(){     conn,err := sql.O

随机推荐