Oracle exists and not exist |
發(fā)布時間: 2012/9/19 17:30:08 |
先看下面的例子:Oracle中兩個系統(tǒng)表.emp,dept.example: 1:not exists(not in) not exists: 這條語句返回select * from scott.dept d where e.deptno=d.deptno and d.deptno=10條件滿足的結(jié)果集.也就是說, - 返回的結(jié)果集中不存在d.deptno=10結(jié)果集的記錄,即emp表中沒有dept表中d.deptno=10的記錄. SQL> select empno,ename,deptno from scott.emp e where not exists(select * from scott.dept d where e.deptno=d.deptno and d.deptno=10); EMPNO ENAME DEPTNO 11 rows selected not in: 第一個where條件必須給定字段(deptno), 第二個sql語句中,必須明確給定要查詢的字段是哪個(deptno). SQL> select empno,ename,deptno from scott.emp e where deptno not in(select deptno from scott.dept d where e.deptno=d.deptno and d.deptno=10); EMPNO ENAME DEPTNO 11 rows selected 2: exists(in) exists: 這條語句返回select * from scott.dept d where e.deptno=d.deptno and d.deptno=10條件滿足的記錄結(jié)果集. 也就是說返回的結(jié)果集中只存在有d.deptno=10的記錄,即emp表中只存在dept表中d.deptno=10的記錄. SQL> select empno,ename,deptno from scott.emp e where exists(select * from scott.dept d where e.deptno=d.deptno and d.deptno=10); EMPNO ENAME DEPTNO in: 第一個where條件必須給定字段(deptno), 第二個sql語句中,必須明確給定要查詢的字段是哪個(deptno). SQL> select empno,ename,deptno from scott.emp e where deptno in(select deptno from scott.dept d where e.deptno=d.deptno and d.deptno=10); EMPNO ENAME DEPTNO
請注意:not in 邏輯上不完全等同于not exists,如果你誤用了not in,小心你的程序存在致命的BUG:因此,請盡量不要使用not in(它會調(diào)用子查詢),而盡量使用not exists(它會調(diào)用關(guān)聯(lián)子查詢)。
本文出自:億恩科技【1tcdy.com】 服務(wù)器租用/服務(wù)器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |