oracle exists 和 not exists
exists我目前接触的用法就是更效率的实现类似这样的逻辑:
select * from tableA where id in (SELECT id FROM tableB)
用exists实现:
select * from tableA where exists(SELECT 1 FROM tableB WHERE id = tableA.id)
not exists就是相反
select * from tableA where id in (SELECT id FROM tableB)
用exists实现:
select * from tableA where exists(SELECT 1 FROM tableB WHERE id = tableA.id)
not exists就是相反
20210913更新:
impala也有这个用法
其实以下三种是等价的:
1、in 、not in
2、join、left join + is null
3、exists、not exists
EXISTS 运算符用于判断查询子句是否有记录,如果有一条或多条记录存在(即有查询结果集)返回 True,否则返回 False。
子查询exists(SELECT 1 FROM tableB WHERE id = tableA.id)相当于是把a表的每一条记录带入这个表达式,每条记录存在一个True OR False
留言
張貼留言