博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SOME,ANY,All,EXISTS,IN
阅读量:4050 次
发布时间:2019-05-25

本文共 3080 字,大约阅读时间需要 10 分钟。

----start

  这几个关键字有一个共同点,那就是它们一般应用于子查询中。大家对 IN 都比较熟悉,这里我们就不介绍了,下面我们看一看其他几个关键字的使用,首先,我们定义如下表:

 

假设现在让你查询一下,A班哪些学生的数学成绩高于B班数学成绩的最小值,怎么办?我们可以采用如下SQL:

  

除此之外,我们还可以使用SOME或ANY。注意:ANY和 SOME 的作用完全和使用方式完全相同,不知道制定SQL标准的人为什么要定义两个关键字。我们来看一下以上问题通过SOME或ANY怎么实现。如下SQL所示:

  

假设现在让你查询一下,A班哪些学生的数学成绩高于B班数学成绩的最大值,怎么办呢?我们可以采用如下SQL:

  

除此之外,我们还可以使用ALL,如下SQL所示:

  

至此,我们可以总结出SOME,ANY,ALL 和 MIN, MAX 的对应关系

  

至此,你应该理解了SOME,ANY,ALL关键字的作用了吧。下面我们看一看EXISTS关键字的作用。EXISTS的作用比较简单,它只关注它后面的子查询返没返回值,而不在乎返回多少。如果返回,则整个表达式就为真,否则为假。NOT EXISTS关键字则和EXISTS作用相反。假设现在让你查询一下有没有数学成绩为100的学生,如果有,则将所有学生的数学成绩输出,如果没有,则什么都不输出,我们使用EXISTS实现,如下:

 

至此,以上几个关键字的作用全部介绍给大家了,不知大家理解了没有。以上操作都针对数学成绩,如果你认为对语文成绩也执行类似的操作会得到类似的答案的话,那么你就错了。一切的原因都是因为NULL引起的。下面,我们来讨论NULL对各个关键字的影响。

通常,我们认为语句1和语句2会返回同样的结果,然而上面两条语句返回的结果却令人吃惊,语句1返回王五,语句2则什么也没返回,为什么会出现这样的情况呢?MAX函数默认会忽略NULL值,所以语句1返回了王五。那么为什么语句2返回NULL呢?答案是我也不知道。哪位朋友知道的话请告诉我一下。不仅如此,下面两条语句也返回不同的结果:

 

不仅如此,试一试下面的语句(子查询没有返回任何记录):

上面的几个例子提醒大家,使用ALL的时候应该特别注意,一不留神就会返回我们不期望的结果。

还有个关键字需要大家注意,那就是NOT IN,请看下面的例子:

 

如果你认为以上语句返回王五的话,那么,你就错了,虽然我们一般不会像上面那样主动写出NULL值,但是不能保证子查询也不会返回NULL值,所以在使用NOT NULL时也需要特别注意。

----更多参见:

----声明:转载请注明出处。

----last updated on 2010.1.15

----written by ShangBo on 2009.11.23

----end

你可能感兴趣的文章
VS 2005 CRT函数的安全性增强版本
查看>>
Visual Studio 2010:C++0x新特性
查看>>
drwtsn32.exe和adplus.vbs进行dump文件抓取
查看>>
cppcheck c++静态代码检查
查看>>
在C++中使用Lua
查看>>
一些socket的编程经验
查看>>
socket编程中select的使用
查看>>
可以在线C++编译的工具站点
查看>>
关于无人驾驶的过去、现在以及未来,看这篇文章就够了!
查看>>
所谓的进步和提升,就是完成认知升级
查看>>
为什么读了很多书,却学不到什么东西?
查看>>
长文干货:如何轻松应对工作中最棘手的13种场景?
查看>>
如何用好碎片化时间,让思维更有效率?
查看>>
No.174 - LeetCode1305 - 合并两个搜索树
查看>>
No.175 - LeetCode1306
查看>>
No.176 - LeetCode1309
查看>>
No.182 - LeetCode1325 - C指针的魅力
查看>>
mysql:sql alter database修改数据库字符集
查看>>
mysql:sql truncate (清除表数据)
查看>>
yuv to rgb 转换失败呀。天呀。谁来帮帮我呀。
查看>>