哪位达人能介绍一下exists和not exists用法(sql)最好能举个例子我看网上说not exists select * from table where a=1 or b=2;只要a=1成立,就不会查询b=2了那如果or 换成 and呢?还有人说not exists是个双重否定.请牛人指教.
解决方案 »
- 只有一位小数时,如何加0????
- 右链接问题
- 我不知道这是否是10.2.0.5的一个重大BUG.
- oracle 自定义函数(将有效数字字符串排序后返回)
- oracle中要查询某个时间段(年月日)内的记录,SQL语句怎么写最方便?
- oracle下dmp文件如何在windows下文本或excel打开,急呀!!
- 怎样在sql中使用function返回的cursor
- 请问大家,怎么样能把数据库中所有值为负最大值的字段及表找出来呢?先谢谢了。
- 数据库备份的问题
- 哪里有下载JAVA中驱动SQL2000的具体网络地址阿。微软中国站点似乎没有
- oracle 如何灵活的处理不包含的关系
- 关于oracle游标的问题。
exists 存在 和not exists 不存在
先把sql写成in ,not in ,然后加个where条件就变成 exists和not exists
你说的那个在高级语言中都有的,教什么忘了,优化的结果
not exists (sql 不返回结果集为真)
你的例子就可以
not exists 判断后面的select语句不返回结果集
你例子中,因为是Or,如果a=1返回,那么已经不满足,or后面当然也没有必要执行了
如果and,当然要前后都判断,才能知道是否能够返回结果集
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.AIDSELECT 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)
很多方面的书
大家可以去看看
http://www.51cnnet.net
select name from student where sex = 'm' and exists(select 1 from grade where ...) ,只要
exists引导的子句有结果集返回,那么exists这个条件就算成立了,大家注意返回的字段始终为1,所以exists子句不在乎返回什么,而是在乎是不是有结果集返回。而 exists 与 in 最大的区别在于 in引导的子句只能返回一个字段,比如:
select name from student where sex = 'm' and in (select 1,2,3 from grade where ...)
,in子句返回了三个字段,这是不正确的,exists子句是允许的,但in只允许有一个字段返回,在1,2,3中随便去了两个字段即可。而not exists 和not in 分别是exists 和 in 的 对立面,就不用在说了吧?!
不知道你看懂了没有 ?希望对你有用。