Hi-Fi優質I.T網:專題報告...
您尚未登入...
帳號:
密碼:

忘記密碼 
 
  訂閱電子報

取消   訂閱
 
2004/9/20-18:13:34
 踏入 Oracle 9i DBA 之四作者:站長│發表日期:2020/11/30│分數:4


第參章 資料排序與篩選

學習完本章您將會學習到:

  • 透過查詢限制資料列筆數語法
  • 透過查詢排序資料列語法

一、限制資料列筆數的語法

  • 使用 WHERE 子句查詢符合指定的資料列

SELECT * | {[DISTINCT] column_name | 運算式 [別名], ...}
FROM table_name [WHEWE 條件];

範例:

SELECT employee_id, last_name, job_id, epartment_id
FROM employees WHERE department_id = 90;

結果:
EMPLOYEE_ID LAST_NAME JOB_ID DEPARTMENT_ID
100 King AD_PRES 90
101 Kochhar AD_VP 90
102 De Haan AD_VP 90

在這範例中,我在表格 employees SELECT 句子中增加 WHERE 子句來限定在欄位名稱 department_id 的資料等於 90 才列出來,排除該欄不是等於 90 的資料。

二、字串和日期的篩選方式

  • 字串或日期的條件篩選必須以單引號( 'X XX' )標示起來,數值則不需使用單引號標示
  • 字串和日期的格式必須謹慎處理,如:英文字母的大小寫必須一致、日期的格式是否相同
  • 預設的日期格式為:DD-MON-RR

範例:

SELECT last_name, job_id, department_id FROM employees WHERE last_name = 'Zlotkey';

結果:
LAST_NAME JOB_ID DEPARTMENT_ID
Zlotkey SA_MAN 80

查詢 last_name 中叫 Zlotkey 的資料,如果英文名字都是小寫的話則是統會告知:

沒有任何資料列被選取

相對的如果日期格式不正確的話亦會顯示如上的訊息。

三、有條件搜尋方式

語法:
... WHERE 符號 值

範例:

... WHERE hire_date = '01-JAN-95'
... WHERE salary >= 6000
... WHERE last_name = 'Smith'

  • BETWEEN

某欄位中的值符合介於兩值之間包含設定的兩值

範例:

SELECT last_name, salary FROM employees WHERE salary BETWEEN 3400 AND 3500;

3400 為最小值,3500為最大值取介於兩值之間的資料

結果:
LAST_NAME SALARY
Dellinger 3400
Rajs 3500

  • IN

多個值中一一比對,如符合所設定的其中一個值時就顯示

範例:

SELECT employee_id, last_name, salary, manager_id FROM employees WHERE manager_id IN (100, 101, 201);

結果:
EMPLOYEE_ID LAST_NAME SALARY MANAGER_ID
200 Whalen 4400 101
201 Hartstein 13000 100
202 Fay 6000 201

  • LIKE
    • 可搭配萬用字元(%)使用取代前後所有字元,來搜尋字串
    • 利用底線(_)來取代前後單一萬用字元

範例、符合S開頭的名字:

SELECT first_name FROM employees WHERE first_name LIKE 'S%';

結果:
FIRST_NAME
Sarath
Sundar
Sundita

語法、符合任一字元開頭的英文字母且中間字串有av的字元

範例:

SELECT first_name FROM employees WHERE first_name LIKE '_av%';

結果:
FIRST_NAME
David

  • IS NULL

搜尋資料欄位中為NULL的欄位

範例:

SELECT last_name, manager_id FROM employees WHERE manager_id IS NULL;

結果:
LAST_NAME MANAGER_ID
King  

邏輯條件式

  • AND

所有設定的條件必須全部符合才會傳回值

範例、查詢薪資大於或等於10000且工作執掌名稱中有 MAN的字串:

SELECT last_name, salary FROM employees WHERE salary >= 10000 AND job_id LIKE '%MAN%';

結果:

LAST_NAME SALARY
Zlotkey 10500
Hartstein 13000
Raphaely 11000

已選取 7 個資料列.

  • OR

其中一項條件符合就傳回值

範例、查詢薪資大於等於10000或工作執掌名稱中有 MAN的字串:

SELECT last_name, salary FROM employees WHERE salary >= 10000 OR job_id LIKE '%MAN%';

結果:

LAST_NAME SALARY
Zlotkey 10500
Tucker 10000
King 10000

已選取 24 個資料列.

  • NOT

排除符合條件的資料

範例、顯示job_id不是清單內之工作執掌

SELECT last_name, job_id FROM employees WHERE job_id NOT IN ('IT_PROG', 'ST_CLERK', 'SA_REP');

結果:
LAST_NAME JOB_ID
Zlotkey SA_MAN
Taylor SH_CLERK
Fleaur SH_CLERK

四、優先執行順序

順序表

順序越大最先判斷如果要排除這個順序表可經由()來做最優先處理

範例、條件處理順序:

結果:
LAST_NAME JOB_ID SALARY
Tucker SA_REP 10000
Bernstein SA_REP 9500
Hall SA_REP 9000

說明:

   依順序表規格來看,其第一個判斷條件的是 job_id = SA_REPS salary > 15000,再來才是 jobid = SA_REP,如果先後判斷順序不正確所查詢出來的資料當然也會不正確。

範例、使用()改變條件處理順序:

結果:
LAST_NAME JOB_ID SALARY
King AD_PRES 24000

說明:

   經由()來改變條件判斷的順序,優先處理 jod_id = AD_PRESSA_REP,最後判斷 salary > 15000

五、ORDER BY 子句

  • 排序資料列的 ORDER BY 可排序兩種方式
    • ASC:遞增排序(預設值)
    • DESC:遞減排序
  • ORDER BY 子句必須在 SELECT 敘述句的最後面

語法:

SELECT * | [欄位名稱] FROM table_name [WHERE condition(s)] [ORDER BY {column_name | 別名} [ASC|DESC]];

範例、由大到小排序員工ID:

SELECT employee_id AS "員工編號" FROM employees ORDER BY 員工編號 DESC;

結果:
員工編號
206
205
204

範例、由小到大排序員工ID:

SELECT employee_id AS "員工編號" FROM employees ORDER BY 員工編號;

結果:
員工編號
204
205
206

因預設的 ORDER BY 排序是遞增你可以不需加上 ASC ,當然你也可以在 加上 ASC,如:ORDER BY 員工編號 ASC;

  • 排序多個欄位

範例、先遞增排序部門ID後再遞減排序薪資

SELECT last_name, department_id, salary FROM employees ORDER BY department_id, salary DESC;

結果:

LAST_NAME DEPARTMENT_ID SALARY
Whalen 10 4400
Hartstein 20 13000
Fay 20 6000
Raphaely 30 11000
Khoo 30 3100
Baida 30 2900
Tobias 30 2800
Himuro 30 2600
Colmenares 30 2500
Mavris 40 6500
Fripp 50 8200
Weiss 50 8000
Kaufling 50 7900
Vollman 50 6500

  • 在 ORDER BY 子句中欲排序的欄位可以允許不在 SELECT 的欄位清單中

範例、先遞增排序部門ID後再遞減排序薪資

SELECT last_name, salary FROM employees ORDER BY department_id, salary DESC;

結果:
LAST_NAME SALARY
Whalen 4400
Hartstein 13000
Fay 6000
Raphaely 11000
Khoo 3100
Baida 2900
Tobias 2800
Himuro 2600
Colmenares 2500
Mavris 6500
Fripp 8200
Weiss 8000
Kaufling 7900
Vollman 6500

總結:

  資料的篩選與運算是非常重要的,經過我的設計之後是否發覺資料的可讀性增加了,我們把不需要的欄位或資料列排除顯示,讓閱讀者可以一目了然,再經由運算過程資料所呈現出來的更是有用的統計值。

  雖然我提及了不少 FUNCTION,但這只是 SQL 中的一小部分,後面我們將會慢慢的進階到更多更有用的 FUNCTION,看倌們請多支持...呦。  


請評分: -3 -2 -1 +1 +2 +3
 
 

Hi-Fi優質I.T網”站內所有文章、圖片除特別加註外均屬本站所有,如有任何問題請來信告知
請支持言論自由,討論區所發表之言論不代表本站立場
Hi-Fi優質I.T網”版權所有2004©
---最佳顯示效果1024*768---