Oracle 條件運算子
阿新 • • 發佈:2019-02-04
比較運算子
>,<:大於,小於
>=.<=:大於等於,小於等於
=:等於
!=,<>,^=:不等於
邏輯運算子運算的優先順序是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程式碼
- SELECT empno, ename,sal FROM emp
- WHERE sal > ALL(SELECT sal FROM emp WHERE job= 'SALESMAN');
執行結果為:
Sql程式碼
- EMPNO ENAME SAL
- ---------------- ------------- -----------------------
- 7566 JONES 2975
- 7698 BLAKE 2850
- 7782 CLARK 2450
- 7788 SCOTT 3000
- 7839 KING 5000
- 7902 FORD 3000
說明:在emp表的僱員中有4個職務為“SALESMAN”,他們的工資分別是1600、1250、1250、1500。在這裡使用了ALL運算子,表示大於查詢中所有的工資。
查詢部門20中職務同部門10的僱員一樣的僱員資訊。
執行以下查詢:
Sql程式碼
- SELECT empno, ename, job FROM emp
- WHERE job IN (SELECT job FROM emp WHERE deptno=10)
- AND deptno =20;
執行結果為:
Sql程式碼
- EMPNO ENAME JOB
- ------------------ -------------- ----------------------
- 7369 SMITH CLERK
- 7876 ADAMS CLERK
- 7566 JONES MANAGER
說明:在該訓練中,使用IN運算子表示職務是子查詢結果中的任何一個。部門10中有3種職務:MANAGER、PRESIDENT和CLERK,以上查詢得到的是部門20中是這3種職務的僱員。
多列子查詢
如果子查詢返回多列,則對應的比較條件中也應該出現多列,這種查詢稱為多列子查詢。以下是多列子查詢的訓練例項。
查詢職務和部門與SCOTT相同的僱員的資訊。
執行以下查詢:
Sql程式碼
- SELECT empno, ename, sal FROM emp
- WHERE (job,deptno) =(SELECT job,deptno FROM emp WHERE empno=7788);
執行結果為:
Sql程式碼
- EMPNO ENAME JOB
- ------------------ --------------- ----------------
- 7902 FORD ANALYST
說明:在該例的子查詢中返回兩列,查詢條件中也要出現兩列,表示僱員的職務和部門應該和SCOTT的職務和部門相同。
LIKE的用法
使用LIKE操作符可完成按萬用字元查詢字串的查詢操作,該操作符適合於對資料進行模糊查詢。其語句法為:
[NOT] LIKE 匹配模式
匹配模式中除了可以包含固定的字元之外,還可以包含以下的萬用字元:
%:代表0個或多個任意字元。
_ :代表一個任意字元。
顯示姓名以“S”開頭的僱員資訊。
輸入並執行查詢:
Sql程式碼
- SELECT * FROM emp WHERE ename LIKE 'S%';
執行結果為:
Sql程式碼
- EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
- ------------- -------------- ------------------------- ---------- ------------------ ----------- ------------ ------------------
- 7369 SMITH CLERK 7902 17-12月-80 800 20
- 7788 SCOTT ANALYST 7566 19-4月 -87 3000 20
說明:SMITH和SCOTT名字均以S開頭,名字後邊的字元和長度任意。
顯示姓名第二個字元為“A”的僱員資訊。
執行查詢:
Sql程式碼
- SELECT * FROM emp WHERE ename LIKE '_A%';
說明:“_”代表第一個字元任意,第二個字元必須為“A”,“%”代表第二個字元後面的字元為任意字元,個數任意。
判斷空值NULL
在表中,欄位值可以是空,表示該欄位沒有內容。如果不填寫,或設定為空則我們說該欄位的內容為NULL。NULL沒有資料型別,也沒有具體的值,但是使用特定運算可以判斷出來。這個運算就是:
IS [NOT] NULL
顯示經理編號沒有填寫的僱員。
輸入並執行查詢:
Sql程式碼
- SELECT ename, mgr FROM emp WHERE mgr IS NULL;
執行結果為:
Sql程式碼
- ENAME MGR
- ------------ ---------------
- KING
注意:以下用法是錯誤的。
SELECT ename, mgr FROM emp WHERE mgr=NULL;
黑色頭髮:http://heisetoufa.iteye.com/