您的位置:首页 > 数据库 > Oracle

Oracle 中的 exists 和 not exists 用法

2015-08-31 15:07 465 查看
2015年8月31日14:53:29

天气雨阴

文章转自http://blog.csdn.net/zhiweianran/article/details/7868894

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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: