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