Oracle學習筆記(三)

本學習筆記包括組函數,分組查詢,嵌套查詢的內容
一、組函數(統計函數)
分組函數作用於一組數據,並對一組數據返回一個值。常見的分組函數如下:
Count():查詢表中的數據記錄
Avg():求出平均值
Sum():求和
Max():求最大值
Min():求最小值
注意:Count()返回的永遠都是一個具體的數字,當爲空是會返回0。組函數中無法使用NVL(……)
二、分組查詢
一般情況下,當數據重複的時候分組纔有意義,即使一個人也可以一組(沒什麼意義)
基本格式:Select[Distinct] *|Column_1 …… | 組函數
From tabel1 tab1, ……
Where 條件(s)
Group by Column_1 ……
Having 分組後的過濾條件(s1)
Order By Column_x Asc | Desc, Column_x Asc | Desc
注意:在SELECT 列表中所有未包含在組函數中的列都應該包含在 GROUP BY 子句中。
Where:是在執行GROUP BY操作之前進行的過濾,表示從全部數據之中篩選,在WHERE之中不能使用統計函數;
Having:是在GROUP BY分組之後的再次過濾,可以在HAVING子句中使用統計函數;
eg:Select worker_id, Max(worker_salary) Max_Salary
From employees
Where worker_id > 100
Group by worker_id
Having Max(worker_salary) > 10000
Order By Max(worker_salary) Desc
三、嵌套查詢(子查詢)
嵌套查詢 = 簡單查詢 + 限定查詢 + 多表查詢 + 統計查詢的綜合體。
子查詢 (內查詢) 在主查詢之前一次執行完成。子查詢的結果被主查詢(外查詢)使用 。
子查詢要包含在括號內。將子查詢放在比較條件的右側。
單行操作符對應單行子查詢,多行操作符對應多行子查詢。
1)單行子查詢
子查詢結果只返回一行。使用單行比較操作符(>, <, >=, <=, <>)。
eg:Select last_name, job_id, salary
From employees
Where job_id =
(Select job_id
From employees
Where employ_id = 114)
And salary >
(Select salary
From employees
Where employee_id = 115)
2)多行子查詢
子查詢結果返回多行。使用多行比較操作符(In, Any, All)。
其中:In 等於列表中的任意一個;Any 和子查詢返回的某一個值比較;All 和子查詢返回的所有值比較
eg1: 返回其它部門中比job_id爲‘IT_PROG’部門任一工資低的員工的員工號、姓名、job_id 以及salary
Select employee_id, employee_name, job_id, salary
From empoyees
Where salary < Any
(Select salary
From employees
Where job_id = ‘IT_PROG’)
And job_id <> ‘IT_PROG’
eg2:返回其它部門中比job_id爲‘IT_PROG’部門所有工資都低的員工的員工號、姓名、job_id 以及salary
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary < ALL
(SELECT salary
FROM employees
WHERE job_id = ‘IT_PROG’)
AND job_id <> ‘IT_PROG’;
注意事項:=ANY:功能與IN操作符是完全一樣的;

ANY:比子查詢中返回記錄最小的還要大的數據;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章