做爲一個ORACLE數據庫初學者,基本上都會經歷的一個階段,讓人看到就想要吐的練習題,第一波,第二波,第三波......第n波數據庫
如今在網上也能夠找到諸多波的答案,但是,我想說的是,複製答案,解決不了問題,不如你們來學會方法。在作題過程當中,常常會遇到的一些問題:express
不是group by 表達式;函數
非正常結束語句;排序
單行子查詢返回多行;it
等等.....諸多。io
因此在這裏給你們分享一些能夠儘可能避免這些問題的‘基礎知識’。table
分組函數概述
分組函數是對數據行的集合進行操做並按組給出一個結果,這個結果可直接輸出,或者用來作判斷條件
分組函數的使用SELECT [column,] group_function(column)
FROM table
[WHERE condition]
[GROUP BY column]
[HAVING group_function(column)expression
[ORDER BY column|group_function(column)expression]
分組函數
MIN函數和MAX函數
MIN([DISTINCT|ALL] column|expression):返回每組中的最小值
MAX([DISTINCT|ALL] column|expression):返回每組中的最大值
MIN和MAX函數能夠用於任何數據類型-- 查詢入職日期最先和最晚的日期
SELECT MIN(hiredate),MAX(hiredate)
FROM emp
SUM函數和AVG函數
SUM([DISTINCT|ALL] column|expression):返回每組的總和
AVG([DISTINCT|ALL] column|expression):返回每組的平均值
SUM和AVG函數只可以對數值類型的列或表達式操做-- 查詢職位以SALES開頭的全部員工的平均工資、工資和
SELECT AVG(sal),SUM(sal)
FROM emp
WHERE job LIKE 'SALES%'
COUNT函數
COUNT(*):返回表中知足條件的行記錄數-- 查詢部門30有多少個員工
SELECT COUNT(*)
FROM emp
WHERE deptno=30
COUNT([DISTINCT|ALL] column|expression):返回表中知足條件的非空行記錄數-- 查詢部門30有多少個員工領取獎金
SELECT COUNT(comm)
FROM emp
WHERE deptno=30
分組函數中的DISTINCT
DISTINCT會消除重複記錄後再使用組函數-- 查詢有員工的部門數量
SELECT COUNT(DISTINCT deptno)
FROM emp
分組函數中的空值處理
除了COUNT(*)以外,其餘全部分組函數都會忽略列表中的空值,而後再進行計算-- 查詢獎金的平均值
SELECT AVG(comm)
FROM emp
在分組函數中使用NVL函數可使分組函數強制包含含有空值的記錄-- 查詢全部員工領取到的獎金的平均值
SELECT AVG(NVL(comm,0))
FROM emp
GROUP BY子句
建立數據組
使用GROUP BY子句可將表中知足WHERE條件的記錄按照指定的列劃分紅若干個小組,其中GROUP BY子句指定要分組的列-- 用GROUP BY子句建立數據組
SELECT column,group_function(column)
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[ORDER BY column]
使用GROUP BY子句
在SELECT列表中除了分組函數那些項,全部列都必須包含在GROUP BY子句中SELECT deptno,AVG(sal)
FROM emp
GROUP BY deptno
GROUP BY所指定的列並非必須出如今SELECT列表中SELECT AVG(sal)
FROM emp
GROUP BY deptno
按多列分組的GROUP BY子句SELECT deptno,job,SUM(sal)
FROM emp
GROUP BY deptno,job
HAVING子句
?不能在WHERE子句中限制組,要在HAVING子句中對數據組進行限制-- 用HAVNG子句限制數據組
SELECT column,group_function(column)
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column]
使用HAVING子句限制數據組SELECT deptno,MAX(sal)
FROM emp
GROUP BY deptno
HAVING MAX(sal)>2900
SELECT語句執行過程
1.經過FROM子句中找到須要查詢的表
2.經過WHERE子句進行非分組函數篩選判斷
3.經過GROUP BY子句完成分組操做
4.經過HAVING子句完成組函數篩選操做
5.經過SELECT子句選擇顯示的列或表達式及組函數
6.經過ORDER BY子句進行排序操做
組函數的嵌套
與單行函數不一樣,組函數只能嵌套兩層SELECT MAX(AVG(sal))
FROM emp
GROUP BY deptnofunction
還有什麼問題的話能夠到這裏來留言,咱們一塊兒來探究問題奧!基礎