12
返回列表 发新帖
楼主: jixch

[SQL] where 条件 = ALL

[复制链接]
论坛徽章:
1088
金色在线徽章
日期:2007-04-25 04:02:08金色在线徽章
日期:2007-06-29 04:02:43金色在线徽章
日期:2007-03-11 04:02:02在线时间
日期:2007-04-11 04:01:02在线时间
日期:2007-04-12 04:01:02在线时间
日期:2007-03-07 04:01:022008版在线时间
日期:2010-05-01 00:01:152008版在线时间
日期:2011-05-01 00:01:342008版在线时间
日期:2008-06-03 11:59:43ITPUB年度最佳技术原创精华奖
日期:2013-03-22 13:18:30
11#
发表于 2014-8-31 09:19 | 只看该作者
all,any基本用不着,这玩意如果带上相关子查询,别人基本看不懂

使用道具 举报

回复
论坛徽章:
40
2014年新春福章
日期:2014-02-18 16:43:09喜羊羊
日期:2015-05-18 16:24:25慢羊羊
日期:2015-06-12 13:08:22暖羊羊
日期:2015-07-02 16:06:20暖羊羊
日期:2015-07-06 16:28:55狮子座
日期:2015-07-29 17:14:43摩羯座
日期:2015-09-02 13:58:47白羊座
日期:2015-09-08 10:39:06天枰座
日期:2015-09-17 21:41:53摩羯座
日期:2015-10-29 21:07:02
12#
发表于 2014-8-31 22:35 | 只看该作者
jixch 发表于 2014-8-31 01:12
不是很明白....
直接以数据举例吧

你的WHERE条件是:
deptno=all(select deptno  from emp1 t2 where t1.empno=t2.empno)

当ALL()中的SELECT查询结果为空(是指没有结果返回,不是说deptno的值为NULL)时,则整个条件的比较结果为真。
那我们逐条记录来分析一下:
emp表的第1条记录的EMPNO为1,代入“select deptno  from emp1 t2 where t1.empno=t2.empno”,查询结果为“10”,而EMP表的第1条记录的DEPTNO列的内容也是10,条件匹配,结果为真。故第1行要输出;

emp表的第2条记录的EMPNO为2,代入“select deptno  from emp1 t2 where t1.empno=t2.empno”,查询结果为“20”,而EMP表的第2条记录的DEPTNO列的内容也是20,条件匹配,结果为真。故第2行要输出;

emp表的第3条记录的EMPNO为3,代入“select deptno  from emp1 t2 where t1.empno=t2.empno”,EMP1表中不存在这些的记录,所以查询结果为空,这时整个条件比较的结果就为真。故第3行要输出;

同理,第4条也是因为在EMP1表中无EMPNO值为4的记录,所以,整个条件比较的结果就是真,故第4行仍要输出。

使用道具 举报

回复
求职 : 数据库开发
论坛徽章:
10
茶鸡蛋
日期:2012-04-19 16:08:35美羊羊
日期:2015-03-24 15:03:142015年新春福章
日期:2015-03-06 11:58:392015年新春福章
日期:2015-03-04 14:53:16马上有对象
日期:2014-08-15 13:23:54优秀写手
日期:2014-08-15 06:00:13马上加薪
日期:2014-08-14 22:48:12马上有房
日期:2014-09-04 07:54:53ITPUB 11周年纪念徽章
日期:2012-10-09 18:14:482015年新春福章
日期:2015-03-30 14:49:43
13#
 楼主| 发表于 2014-9-1 18:38 | 只看该作者
贴一段官方文档上找的:
ANY  SOME
Compares a value to each value in a list or returned by a query. Must be preceded by =, !=, >, <, <=, >=. Can be followed by any expression or subquery that returns one or more values.
Evaluates to FALSE if the query returns no rows.

ALL
Compares a value to every value in a list or returned by a query. Must be preceded by =, !=, >, <, <=, >=. Can be followed by any expression or subquery that returns one or more values.
Evaluates to TRUE if the query returns no rows.

发现主要是理解
all:如果子查询没有结果返回,则该逻辑表达式结果为真。
any:如果子查询没有结果返回,则该逻辑表达式结果为假。

本来还想写点什么的,发现有了 dingjun123 的答案,也不用写什么了

最后谢谢各位。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表