1. 程式人生 > 其它 >Oracle筆記03——Oracle操作符和運算子

Oracle筆記03——Oracle操作符和運算子

一、選擇限定資料行

語法
SELECT [DISTINCT] {* | 列名...} FROM 表名 WHERE 條件表示式;

二、比較操作符

(1)=:等於
(2)>:大於
(3)>=:大於或等於
(4)<:小於
(5)<=:小於或等於
(6)<>:不等於

三、使用WHERE字句

1.比較數值型資料

2.比較字元型別資料

注意:

(1)使用單引號‘ ’括起來
(2)區分大小寫

3.比較日期型別資料

注意:

(1)使用單引號' '括起來
(2)預設日期格式為:DD-MON-RR

四、特殊比較運算子

(1)BETWEEN...AND...

判斷要比較的值是否在某個範圍內

(2)IN(集合列表)

判斷要比較的值是否和集合列表中的任何一個值相等

(3)LIKE

判斷要比較的值是否滿足部分匹配


其中,%:匹配零個或多個字元;_:匹配一個任意的字元;
注意:當需要查詢的欄位裡面包含"_"時,可以這樣寫:

SELECT 欄位1,欄位2,欄位3... FROM 表名 WHERE 欄位 LIKE '@_' ESCAPE '@';

(4)IS NULL

判斷要比較的值是否為空值

五、邏輯運算子

(1)AND

要求兩個都為真時,結果才為真

(2)OR

只要有一個為真,結果就為真

(3)NOT

結果取反
注意NOT運算子可以和BETWEEN...AND...INLIKE

IS NULL一起使用

六、邏輯運算子的優先順序

優先順序 運算分類 運算子舉例
1 算術運算子 +,-,*,\
2 連線運算子 ||
3 比較運算子 <,>,<=,>=,=,<>
4 特殊比較運算子 BETWEEN...AND...,IN,LIKE,IS NULL
5 邏輯非 NOT
6 邏輯與 AND
7 邏輯或 OR

七、ORDER BY

1.語法:

SELECT [DISTINCT] {* | 列名...} FROM 表名 WHERE 條件 ORDER BY {[列名...] | [列別名...] | [結果集列序號...] } [ASC(升序) | DESC(降序)];

2.排序規則(以升序為例):

(1)數值型別:數字升序排列,小值在前,大值在後。
(2)日期型別:日期升序排列,較早的日期在前,較後的日期在後。
(3)字元型別:字元升序排列,字母由A-Z排列,中文按照字典順序排列。
(4)空值型別:空值升序排列,排列在最後。

3.注意:

不推薦按照結果集序列排序

八、練習

--一、普通比較運算子
--1.查詢部門編號為10的員工資訊
SELECT * FROM emp WHERE deptno = 10;--比較數值型資料

--2.查詢職位為“SALESMAN”的職工資訊
SELECT * FROM emp WHERE job = 'SALESMAN';--比較字元型別資料
SELECT * FROM emp WHERE job = 'salesman';--注意:1.使用單引號‘ ’括起來 2.區分大小寫

--3.查詢入職日期為“1980/12/17”的員工資訊
SELECT * FROM emp WHERE hiredate = '17-12月-80';--比較日期型別資料,注意:1.使用單引號' '括起來 2.預設日期格式為:DD-MON-RR
--4.查詢入職日期不為“1980/12/17”的員工資訊
SELECT * FROM emp WHERE hiredate <> '17-12月-80';

--二、特殊比較運算子
--1.查詢薪資在800-1000之間的員工資訊(BETWEEN...AND..運算子)
SELECT * FROM emp WHERE sal BETWEEN 800 AND 1000;--包括區間值
--相當於
SELECT * FROM emp WHERE sal >= 800 and sal <= 1000;

--2.查詢82年入職的員工資訊
SELECT * FROM emp WHERE hiredate BETWEEN '1-1月-82' AND '31-12月-82';--BETWEEN...AND...

--3.查詢部門編號為10或者30的員工資訊
SELECT * FROM emp WHERE deptno IN(10,30);--IN

--4.查詢員工姓名以“A”開頭的員工資訊
SELECT * FROM emp WHERE ename LIKE 'A%';--LIKE
--5.查詢員工姓名以“S”結尾的員工資訊
SELECT * FROM emp WHERE ename LIKE '%S';--LIKE
--6.查詢員工姓名第三個字元為“A”的員工資訊
SELECT * FROM emp WHERE ename LIKE '__A%';--LIKE
--7.查詢員工姓名以“AB_”開頭的員工資訊
SELECT * FROM emp WHERE ename LIKE 'AB@_%' ESCAPE '@';--LIKE

--8.查詢沒有獎金的員工資訊
SELECT * FROM emp WHERE comm IS NULL;--IS NULL

--三、邏輯運算子
--1.查詢職位為CLERK,並且薪水大於1000的員工資訊
SELECT * FROM emp WHERE job = 'CLERK' AND sal > 1000;--AND
--2.查詢職位為CLERK,或者薪水大於1000的員工資訊
SELECT * FROM emp WHERE job = 'CLERK' OR sal > 1000;--OR
--3.查詢部門編號不在10或者30的員工資訊
SELECT * FROM emp WHERE deptno NOT IN(10,30);--NOT
--4.查詢獎金不為空的員工資訊
SELECT * FROM emp WHERE comm IS NOT NULL;--NOT

--四、邏輯運算子的優先順序
--1.查詢職位為CLERK或者MANAGER,同時薪水大於1000的員工資訊
SELECT * FROM emp WHERE job = 'CLERK' OR job = 'MANAGER' AND sal > 1000;--不能滿足題意;此處先判斷AND,再判斷OR,也就是:查詢職位為“MANAGER”且薪水大於1000,或者職位為“CLERK”的員工資訊
SELECT * FROM emp WHERE (job = 'CLERK' OR job = 'MANAGER') AND sal > 1000;

--五、ORDER BY
--1.查詢所有員工資訊,並按薪水的升序排序
SELECT * FROM emp ORDER BY sal;--預設為升序ASC,數值型別
--2.查詢所有員工資訊,並按入職日期降序排序
SELECT * FROM emp ORDER BY hiredate DESC;--日期型別
--3.查詢所有員工資訊,並按入職日期降序和工資升序排列
SELECT * FROM emp ORDER BY hiredate DESC,sal ASC;--多列排序
--4.查詢員工表中的員工姓名、部門編號、薪水、年薪(薪水*12),並按年薪降序排序
SELECT ename,deptno,sal,sal*12 FROM emp ORDER BY sal*12;
--也可以寫成:
SELECT ename,deptno,sal,sal*12 AS 年薪 FROM emp ORDER BY 年薪;--按列別名排序

--5.查詢所有員工資訊,並按第七列降序排序
SELECT * FROM emp ORDER BY 7;--按結果集列序號排序,空值型別