1. 程式人生 > >Oracle 條件運算子

Oracle 條件運算子

比較運算子 
>,<:大於,小於 
>=.<=:大於等於,小於等於 
=:等於 
!=,<>,^=:不等於 

邏輯運算子運算的優先順序是NOT,AND,OR。如果要改變優先順序,可以使用括號

邏輯運算子 
AND:邏輯與,表示兩個條件必須同時滿足 
OR:邏輯或,表示兩個條件中有一個條件滿足即可 
NOT:邏輯非,返回與某條件相反的結果 

特殊運算子 
[NOT] BETWEEN…AND…:用於測試是否在範圍內 
[NOT] IN (…):用於測試是否在列表中 
[NOT] LIKE:用於進行模式匹配 
IS [NOT] NULL:用於測試是否為空值 
ANY SOME:同列表或查詢中的每一個值進行比較,測試是否有一個滿足,前面必須使用的運算子包括=、!=、>=、<=、>、<等


ALL:同列表或查詢中的每一個值進行比較,測試是否所有的值都滿足,前面必須使用的運算子包括=、!=、>=、<=、>、<等 
[NOT] EXISTS:測試是否子查詢至少返回一行 

IN的用法
使用以下運算形式,可以顯示值滿足特定集合的結果: 
[NOT] IN (...) 
顯示職務為“SALESMAN',“CLERK”和“MANAGER”的僱員資訊。 
輸入並執行查詢: 

SELECT * FROM emp WHERE job IN ('SALESMAN','CLERK','MANAGER');

執行結果從略。 
注意:如果在IN前面增加NOT,將顯示職務不在集合列表中的僱員。以上用法同樣適用於數值型集合, 


多行子查詢
如果子查詢返回多行的結果,則我們稱它為多行子查詢。多行子查詢要使用不同的比較運算子號,它們是IN、ANY和ALL。 
查詢工資低於任何一個“CLERK”的工資的僱員資訊。 
執行以下查詢: 
SELECT  empno, ename, job,sal FROM emp
		WHERE   sal < ANY (SELECT sal FROM emp WHERE job = 'CLERK')
		AND job <> 'CLERK';

說明:在emp表的僱員中有4個職務為“CLERK”,他們的工資分別是800、1100、950、1300。滿足工資小於任何一個“CLERK”的工資的記錄有2個,在這裡使用了ANY運算子表示小於子查詢中的任何一個工資。 

注意:條件job <> 'CLERK'排除了職務是CLERK的僱員本身。 
查詢工資比所有的“SALESMAN”都高的僱員的編號、名字和工資。 
執行以下查詢: 
Sql程式碼  收藏程式碼
  1. SELECT  empno, ename,sal FROM emp  
  2.         WHERE sal > ALL(SELECT sal FROM emp WHERE job= 'SALESMAN');  

執行結果為: 
Sql程式碼  收藏程式碼
  1. EMPNO ENAME             SAL  
  2.     ---------------- ------------- -----------------------  
  3.       7566 JONES               2975  
  4.       7698 BLAKE               2850  
  5.       7782 CLARK               2450  
  6.       7788 SCOTT               3000  
  7.       7839 KING                5000  
  8.       7902 FORD                3000  

    說明:在emp表的僱員中有4個職務為“SALESMAN”,他們的工資分別是1600、1250、1250、1500。在這裡使用了ALL運算子,表示大於查詢中所有的工資。 
查詢部門20中職務同部門10的僱員一樣的僱員資訊。 
執行以下查詢: 
Sql程式碼  收藏程式碼
  1. SELECT  empno, ename, job FROM emp  
  2. WHERE   job IN (SELECT job FROM emp WHERE deptno=10)  
  3. AND deptno =20;  

執行結果為: 
Sql程式碼  收藏程式碼
  1. EMPNO ENAME          JOB  
  2.     ------------------ -------------- ----------------------  
  3.       7369 SMITH        CLERK  
  4.       7876 ADAMS        CLERK  
  5.       7566 JONES        MANAGER  


說明:在該訓練中,使用IN運算子表示職務是子查詢結果中的任何一個。部門10中有3種職務:MANAGER、PRESIDENT和CLERK,以上查詢得到的是部門20中是這3種職務的僱員。 

多列子查詢
如果子查詢返回多列,則對應的比較條件中也應該出現多列,這種查詢稱為多列子查詢。以下是多列子查詢的訓練例項。 
查詢職務和部門與SCOTT相同的僱員的資訊。 
執行以下查詢: 
Sql程式碼  收藏程式碼
  1. SELECT  empno, ename, sal FROM emp  
  2.         WHERE (job,deptno) =(SELECT job,deptno FROM emp WHERE empno=7788);  

執行結果為: 
Sql程式碼  收藏程式碼
  1. EMPNO ENAME      JOB  
  2.         ------------------ --------------- ----------------  
  3.             7902 FORD        ANALYST  

說明:在該例的子查詢中返回兩列,查詢條件中也要出現兩列,表示僱員的職務和部門應該和SCOTT的職務和部門相同。 

LIKE的用法
使用LIKE操作符可完成按萬用字元查詢字串的查詢操作,該操作符適合於對資料進行模糊查詢。其語句法為: 
[NOT] LIKE 匹配模式 
匹配模式中除了可以包含固定的字元之外,還可以包含以下的萬用字元: 
%:代表0個或多個任意字元。 
_ :代表一個任意字元。 
顯示姓名以“S”開頭的僱員資訊。 
輸入並執行查詢: 
Sql程式碼  收藏程式碼
  1. SELECT * FROM emp WHERE ename LIKE 'S%';  

執行結果為: 
Sql程式碼  收藏程式碼
  1. EMPNO ENAME     JOB             MGR HIREDATE     SAL   COMM     DEPTNO  
  2.         ------------- -------------- ------------------------- ---------- ------------------ ----------- ------------ ------------------  
  3. 7369 SMITH    CLERK 7902 17-12月-80       800     20  
  4. 7788 SCOTT    ANALYST   7566 19-4月 -87   3000           20  

說明:SMITH和SCOTT名字均以S開頭,名字後邊的字元和長度任意。 
顯示姓名第二個字元為“A”的僱員資訊。 
執行查詢: 
Sql程式碼  收藏程式碼
  1. SELECT * FROM emp WHERE ename LIKE '_A%';  


說明:“_”代表第一個字元任意,第二個字元必須為“A”,“%”代表第二個字元後面的字元為任意字元,個數任意。 

判斷空值NULL
在表中,欄位值可以是空,表示該欄位沒有內容。如果不填寫,或設定為空則我們說該欄位的內容為NULL。NULL沒有資料型別,也沒有具體的值,但是使用特定運算可以判斷出來。這個運算就是: 
IS  [NOT] NULL 
顯示經理編號沒有填寫的僱員。 
輸入並執行查詢: 
Sql程式碼  收藏程式碼
  1. SELECT  ename, mgr FROM emp WHERE mgr IS NULL;  

執行結果為: 
Sql程式碼  收藏程式碼
  1. ENAME     MGR  
  2.         ------------ ---------------  
  3.         KING  

注意:以下用法是錯誤的。
SELECT  ename, mgr FROM emp WHERE mgr=NULL; 

黑色頭髮:http://heisetoufa.iteye.com/