oracle exists and not exist
oracle exists and not exist
ORACLE 2007-08-30 11:06:08 閱讀6221 評論1 字號:大中小 訂閱
先看下面的例子:oracle中兩個系統表.emp,dept.
example:
1:not exists(not in)
not exists:
這條語句返回select * from scott.dept d where e.deptno=d.deptno and d.deptno=10條件滿足的結果集.也就是說,
返回的結果集中不存在d.deptno=10結果集的記錄,即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
----- ---------- ------
7369 SMITH 20
7499 ALLEN 30
7521 WARD 30
7566 JONES 20
7654 MARTIN 30
7698 BLAKE 30
7788 SCOTT 20
7844 TURNER 30
7876 ADAMS 20
7900 JAMES 30
7902 FORD 20
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
----- ---------- ------
7369 SMITH 20
7499 ALLEN 30
7521 WARD 30
7566 JONES 20
7654 MARTIN 30
7698 BLAKE 30
7788 SCOTT 20
7844 TURNER 30
7876 ADAMS 20
7900 JAMES 30
7902 FORD 20
11 rows selected
2: exists(in)
exists:
這條語句返回select * from scott.dept d where e.deptno=d.deptno and d.deptno=10條件滿足的記錄結果集.
也就是說返回的結果集中只存在有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
----- ---------- ------
7782 CLARK 10
7839 KING 10
7934 MILLER 10
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
----- ---------- ------
7782 CLARK 10
7839 KING 10
7934 MILLER 10
oracle 中exists (in)和not exists(not in)是判斷是否存在和不存在表中記錄的關鍵子.
請注意:not in 邏輯上不完全等同於not exists,如果你誤用了not in,小心你的程式存在致命的BUG:因此,請儘量不要使用not in(它會呼叫子查詢),而儘量使用not exists(它會呼叫關聯子查詢)。
ORACLE 2007-08-30 11:06:08 閱讀6221 評論1 字號:大中小 訂閱
先看下面的例子:oracle中兩個系統表.emp,dept.
example:
1:not exists(not in)
not exists:
這條語句返回select * from scott.dept d where e.deptno=d.deptno and d.deptno=10條件滿足的結果集.也就是說,
返回的結果集中不存在d.deptno=10結果集的記錄,即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
----- ---------- ------
7369 SMITH 20
7499 ALLEN 30
7521 WARD 30
7566 JONES 20
7654 MARTIN 30
7698 BLAKE 30
7788 SCOTT 20
7844 TURNER 30
7876 ADAMS 20
7900 JAMES 30
7902 FORD 20
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
----- ---------- ------
7369 SMITH 20
7499 ALLEN 30
7521 WARD 30
7566 JONES 20
7654 MARTIN 30
7698 BLAKE 30
7788 SCOTT 20
7844 TURNER 30
7876 ADAMS 20
7900 JAMES 30
7902 FORD 20
11 rows selected
2: exists(in)
exists:
這條語句返回select * from scott.dept d where e.deptno=d.deptno and d.deptno=10條件滿足的記錄結果集.
也就是說返回的結果集中只存在有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
----- ---------- ------
7782 CLARK 10
7839 KING 10
7934 MILLER 10
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
----- ---------- ------
7782 CLARK 10
7839 KING 10
7934 MILLER 10
oracle 中exists (in)和not exists(not in)是判斷是否存在和不存在表中記錄的關鍵子.
請注意:not in 邏輯上不完全等同於not exists,如果你誤用了not in,小心你的程式存在致命的BUG:因此,請儘量不要使用not in(它會呼叫子查詢),而儘量使用not exists(它會呼叫關聯子查詢)。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25897606/viewspace-712510/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [Oracle] exists 和 not existsOracle
- Oracle in and existOracle
- oracle中關於in和exists,not in 和 not existsOracle
- oracle中的exists 和not exists 用法詳解Oracle
- oracle 用EXISTS替代INOracle
- oracle中的exists和not exists和in用法詳解Oracle
- oracle中的exists理解Oracle
- [Oracle] minus 和 not exists比較Oracle
- ORACLE 中IN和EXISTS比較Oracle
- oracle in與exists 的區別Oracle
- oracle中in和exists的區別Oracle
- ORACLE 9I not exists的bugOracle
- (轉)ORACLE 中IN和EXISTS比較Oracle
- (轉)ORACLE 中IN和EXISTS的區別Oracle
- Oracle集合的first, last , next ,count,existOracleAST
- EXISTS、IN、NOT EXISTS、NOT IN用法區別
- in與exist , not in與not exist 的區別
- 對IN & EXISTS NOT IN & NOT EXISTS的優化優化
- EXISTS、IN、NOT EXISTS、NOT IN的區別(ZT)
- in/exists和not in/not exists執行效率
- oracle sql_not exists與null的測試OracleSQLNull
- oracle for linux安裝報錯 file /home/oracle/.Xauthority does not existOracleLinux
- Oracle not exist子查詢全掃的優化Oracle優化
- 【Oracle】-【許可權-ORA-04043】- object does not existOracleObject
- sql:delete if exists還是drop if exists?SQLdelete
- 關於 in與exist , not in與not exist 的區別
- 【SQL】existsSQL
- SQL中IN,NOT IN,EXISTS,NOT EXISTS的用法和差別SQL
- Oracle 中不使用NOT IN 和 NOT EXISTS的另一種方法Oracle
- In和exists使用及效能分析(二):exists的使用
- exists和not exists及in和not in的用法與區別
- SQL not exist out joinSQL
- jquery judge element existjQuery
- asmcmd does not exist in directoryASM
- aix Oracle 使用者報錯:Too many processes already existAIOracle
- 理解exists count
- 淺談Oracle中exists與in的執行效率問題Oracle
- 關於ORACLE MYSQL NOT IN和NOT exists需要注意的 NULL值OracleMySqlNull