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就是相反

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

留言

熱門文章