SQL优化时我们提到,很多时候用 exists 代替 in 是一个好的选择,这里明确说一下exists的用法和作用。

语法:

SELECT column_name(s)
FROM table_name
WHERE EXISTS
(SELECT column_name FROM table_name WHERE condition);

意义:

  • EXISTS 运算符用于判断查询子句是否有记录,如果有一条或多条记录存在返回 True,否则返回 False。

注意:

  • EXISTS子句中不允许有COMPUTE子句和INTO关键字

  • EXISTS中column_name实际上是不影响查询结果的,所以为了更快地检索,建议只写一个主键字段,另外EXISTS中where子句要和外面的表有逻辑关系,否则要不查询所有数据,要不一行数据都不出现。

用法:

1620264242(1).jpg

  • 在子查询中使用NULL仍然返回结果集

select * from TableIn where exists(select null)
select * from TableIn//与上方效果相同
  • 比较使用EXISTS和IN的查询的使用,返回结果相同

select * from TableIn where exists(select BID from TableEx where BNAME=TableIn.ANAME)
select * from TableIn where ANAME in(select BNAME from TableEx比较使用EXISTS和)
  • 比较使用 EXISTS 和 ANY 的查询。注意两个查询返回相同的结果。

select * from TableIn where exists(select BID from TableEx where BNAME=TableIn.ANAME)
select * from TableIn where ANAME=ANY(select BNAME from TableEx)