not exists用法

zzoozozj 2007-11-08 04:29:57
哪位达人能介绍一下exists和not exists用法(sql)

最好能举个例子

我看网上说not exists select * from table where a=1 or b=2;

只要a=1成立,就不会查询b=2了

那如果or 换成 and呢?

还有人说not exists是个双重否定.

请牛人指教.
...全文
13610 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
gongxu6688 2010-10-28
  • 打赏
  • 举报
回复
kkkkkkkkk
xiadi8364 2010-05-04
  • 打赏
  • 举报
回复
exists : 强调的是是否返回结果集,不要求知道返回什么, 比如:
select name from student where sex = 'm' and mark exists(select 1 from grade where ...) ,只要
exists引导的子句有结果集返回,那么exists这个条件就算成立了,大家注意返回的字段始终为1,所以exists子句不在乎返回什么,而是在乎是不是有结果集返回。

而 exists 与 in 最大的区别在于 in引导的子句只能返回一个字段,比如:
select name from student where sex = 'm' and mark in (select 1,2,3 from grade where ...)
,in子句返回了三个字段,这是不正确的,exists子句是允许的,但in只允许有一个字段返回,在1,2,3中随便去了两个字段即可。

而not exists 和not in 分别是exists 和 in 的 对立面,就不用在说了吧?!
不知道你看懂了没有 ?希望对你有用。
yueying5235 2010-02-01
  • 打赏
  • 举报
回复
有点明白了,继续找。。。
chenbo19867758 2009-12-20
  • 打赏
  • 举报
回复
up
hly930 2009-10-23
  • 打赏
  • 举报
回复
mark
wyl8491797 2009-10-12
  • 打赏
  • 举报
回复
不错

nana0001 2008-05-08
  • 打赏
  • 举报
回复
发现一个电子书下载的网站
很多方面的书
大家可以去看看
http://www.51cnnet.net
还是江筱吧 2007-11-09
  • 打赏
  • 举报
回复
从语义上理解就是不存在符合条件的记录
但是具体是怎么个意思还得实践阿,
联机丛书吧
BlueSuperMan 2007-11-09
  • 打赏
  • 举报
回复
exists (sql 返回结果集为真)
not exists (sql 不返回结果集为真)
如下:
表A
ID NAME
1 A1
2 A2
3 A3

表B
ID AID NAME
1 1 B1
2 2 B2
3 2 B3

表A和表B是1对多的关系 A.ID => B.AID

SELECT ID,NAME FROM A WHERE EXIST (SELECT * FROM B WHERE A.ID=B.AID)
执行结果为
1 A1
2 A2
原因可以按照如下分析
SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=1)
--->SELECT * FROM B WHERE B.AID=1有值返回真所以有数据

SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=2)
--->SELECT * FROM B WHERE B.AID=2有值返回真所以有数据

SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=3)
--->SELECT * FROM B WHERE B.AID=3无值返回真所以没有数据

NOT EXISTS 就是反过来
SELECT ID,NAME FROM A WHERE NOT EXIST (SELECT * FROM B WHERE A.ID=B.AID)
执行结果为
3 A3
===========================================================================
EXISTS = IN,意思相同不过语法上有点点区别,好像使用IN效率要差点,应该是不会执行索引的原因
SELECT ID,NAME FROM A  WHERE ID IN (SELECT AID FROM B)

NOT EXISTS = NOT IN ,意思相同不过语法上有点点区别
SELECT ID,NAME FROM A WHERE ID NOT IN (SELECT AID FROM B)



kanxue660 2007-11-09
  • 打赏
  • 举报
回复
最基础的语法,看看书吧
kelph 2007-11-09
  • 打赏
  • 举报
回复
我看网上说not exists select * from table where a=1 or b=2;

只要a=1成立,就不会查询b=2了

------
你的例子就可以
not exists 判断后面的select语句不返回结果集
你例子中,因为是Or,如果a=1返回,那么已经不满足,or后面当然也没有必要执行了
如果and,当然要前后都判断,才能知道是否能够返回结果集

buctreny 2007-11-09
  • 打赏
  • 举报
回复
我个人认为查看一下《lecture 7 集合代数.ppt》中的最后一个片子,可能有些帮助。下载地址为:http://www.aybook.cn/soft/7/78/2007/book_2868.html。
x03570227 2007-11-09
  • 打赏
  • 举报
回复
楼主的意思应该是exit与in的区别
zzoozozj 2007-11-09
  • 打赏
  • 举报
回复
还是没有很清楚,谁能说的再详细点?
onejune4450 2007-11-08
  • 打赏
  • 举报
回复
exists (sql 返回结果集为真)
not exists (sql 不返回结果集为真)
HelloWorld_001 2007-11-08
  • 打赏
  • 举报
回复
我的理解:
exists 存在 和not exists 不存在
先把sql写成in ,not in ,然后加个where条件就变成 exists和not exists


你说的那个在高级语言中都有的,教什么忘了,优化的结果

17,137

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧