美文网首页软件测试Oracle数据库管理之道
七、SQL–子查询⑧(ALL运算符)

七、SQL–子查询⑧(ALL运算符)

作者: 小小一颗卤蛋 | 来源:发表于2020-05-26 08:07 被阅读0次

ALL运算符

ALL运算符要求比较的值需要匹配子查询中的所有值。
ALL运算符不能单独使用,必须和比较运算符共同使用。

如:检索在所有会员入会之前出版的图书:

SELECT * FROM T_Book WHERE FYearPublished<ALL(SELECT FYearOfJoin FROM T_Reader)

执行结果:

FId FName FYearPublished FCategoryId
6 History of China 1982 2
7 History of England 1860 2
8 History of America 1700 2
10 Atom 1930 3
11 RELATIVITY 1945 3
12 Computer 1970 3
13 Astronomy 1971 3
14 How To Singing 1771 5

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

SELECT * FROM T_Book WHERE FYearPublished<ALL(2001,2003,2005)

不过这个限制并不会妨碍功能的实现,因为没有对固定的集合进行ALL匹配的必要,因为待匹配的集合是固定的,所以上面的SQL语句完全可以用下面的SQL语句来代替:

SELECT * FROM T_Book WHERE *FYearPublished<2001

注意:当使用ALL运算符时,若带匹配的集合为空,即子查询没有返回任何数据时,不论与什么比较运算符搭配使用,ALL的返回值将永远是true。
如:检索在所有江苏省会员入会之前出版的图书:

SELECT * FROM T_Book WHERE FYearPublished<ALL(SELECT FYearOfJoin FROM T_Reader WHERE FProvince = "JiangSu")

执行结果:

FId FName FYearPublished FCategoryId
1 About J2EE 2005 4
2 Learning Hibernate 2003 4
3 Two Cites 1999 1
4 Jane Eyre 2001 1
5 Oliver Twist 2002 1
6 History of China 1982 2
7 History of England 1860 2
8 History of America 1700 2
9 History of TheWorld 2008 2
10 Atom 1930 3
11 RELATIVITY 1945 3
12 Computer 1970 3
13 Astronomy 1971 3
14 How To Singing 1771 5
15 DaoDeJing 2001 6
16 Obedience toAuthority 1995 6

这个查询结果将所有的会员都检索出来了,可是根本没有江苏省的会员,应该是返回空结果才对的。看起来这是错误的,其实这完全符合ALL 运算符的语义,因为没有江苏省的会员,所以每本书的出版年份就在所有的江苏省的会员之前,所以每一本书都符合匹配条件。在使用ALL运算符的时候,这一个问题很容易在系统中造成BUG,因此使用时必须注意。

相关文章

  • 七、SQL–子查询⑧(ALL运算符)

    ALL运算符 ALL运算符要求比较的值需要匹配子查询中的所有值。ALL运算符不能单独使用,必须和比较运算符共同使用...

  • ALL和ANY操作符

    运算符=,!=, >,>=,<,<= 后跟操作符,再跟一个列表或子查询。 列表或子查询必须用圆括号包围。 ALL ...

  • sql中几个子查询关键词any,all,exists,in

    sql中几个子查询关键词any,all,exists,in in in表示值是否存在子查询结果集中 select ...

  • 数据分析之SQL子查询

    文章阅读路线: SQL子查询概念 独立子查询实例 相关子查询实例 SQL子查询常见玩伴 1.SQL子查询概念 子查...

  • 七、SQL –子查询⑨(EXISTS运算符)

    EXISTS运算符 和IN、ANY、ALL等运算符不同,EXISTS运算符是单目运算符,它不与列匹配,因此它也不要...

  • 七、SQL-子查询⑥(in运算符)

    IN 运算符: 使用IN运算符可以用来匹配一个固定集合中的某一项。 如:检索在2001、2003和2005年出版的...

  • 7.MySQL子查询与连接

    子查询 使用比较运算符的子查询 =、 >、 <、 >=、 <=、 <>、 !=、 <=> eg 在这种比较运算符中...

  • 七、SQL–子查询③(列子查询)

    列值子查询 与标量子查询不同,列值子查询可以返回一个多行多列的结果集。这样的子查询又被称为表子查询,表子查询可以看...

  • 第三章 SQL谓词 ALL

    第三章 SQL谓词 ALL 将值与子查询中的所有对应值匹配。 大纲 参数 scalar-expression - ...

  • Oracle | 子查询和伪列

    1. 子查询 (1)单行子查询 (2)多行子查询 1)ANY子查询 2)ALL 子查询 2. 伪列...

网友评论

    本文标题:七、SQL–子查询⑧(ALL运算符)

    本文链接:https://www.haomeiwen.com/subject/ruapahtx.html