我对oracle IN
和EXISTS
感到困惑。我有以下要求。
我需要让所有名字都在的员工 -
select * from emp where ename in('smith','brown','john','johnson');
我可以在这里使用EXISTS
吗? IN
子句也有1000个限制。 EXISTS
是否也有这样的限制?
谢谢!
答案 0 :(得分:2)
简单地说,EXISTS
通常用于检查符合条件的行是否存在于另一个(或相同的)表中。
使用EXISTS
的SQL看起来像这样:
select *
from emp e
where exists(select * from emp e2 where e.empno = e2.empno and e2.ename in ('smith', 'brown', 'john', 'johnson'))
所以你可以看到它不是你需要的
答案 1 :(得分:2)
IN
选择匹配值列表。 EXISTS
返回布尔值,如true或false。存在比在中更快。
实施例
在
select ename from emp e where mgr in(select empno from emp where ename='KING');
EXISTS
select ename from emp e
where exists (select 1 from emp where e.mgr = empno and ename = 'KING');