一、組函數(shù)
1.什么是組函數(shù)?
組函數(shù)操作行集,給出每組的結(jié)果。組函數(shù)不象單行函數(shù),組函數(shù)對行的集合進行操作, 對每組給出一個結(jié)果。這些集合可能是整個表或者是表分成的組。
2.組函數(shù)與單行函數(shù)的區(qū)別:
1)單行函數(shù)對查詢到每個結(jié)果集做處理,而組函數(shù)只對分組數(shù)據(jù)做處理。?
3)單行函數(shù)對每個結(jié)果集返回一個結(jié)果,而組函數(shù)對每個分組返回一個結(jié)果。
3.組函數(shù)的類型:
1)AVG(arg)函數(shù):對分組數(shù)據(jù)做平均值運算。
2)SUM(arg)函數(shù):對分組數(shù)據(jù)求和。
3)COUNT 函數(shù):返回一個表中的行數(shù)
4)MIN(arg)函數(shù):求分組中最小數(shù)據(jù)。
5)MAX(arg)函數(shù):求分組中最大數(shù)據(jù)。
(1)組函數(shù)參數(shù)的數(shù)據(jù)類型:
1)用于函數(shù)的參數(shù)的數(shù)據(jù)類型可以是 CHAR、VARCHAR2、NUMBER 或 DATE。
2)所有組函數(shù)忽略空值。為了用一個值代替空值,用 NVL、NVL2 或 COALESCE 函
數(shù)。
注意:AVG 和 SUM 函數(shù)的參數(shù)類型只能是數(shù)字類型; MIN 和 MAX 函數(shù)的參數(shù)類型可以是字符、數(shù)字、日期。
(3)使用 AVG 和 SUM 函數(shù):
select avg(列名) ,sum(列名) from 表名;
(4)使用 MIN 和 MAX 函數(shù):
select min(列名),max(列名) from 表名;
(5)使用 COUNT 函數(shù):返回一個表中的行數(shù)。
COUNT 函數(shù)有三種格式:
1)COUNT(*) :返回表中滿足 SELECT 語句標(biāo)準(zhǔn)的行數(shù),包括重復(fù)行,包括有空值列的行。
2)COUNT(expr) :返回在列中的由 expr 指定的非空值的數(shù)。
3)COUNT(DISTINCTexpr):使用 DISTINCT 關(guān)鍵字禁止計算在一列中的重復(fù)值。

4.創(chuàng)建數(shù)據(jù)組
(1)什么是數(shù)據(jù)組?
可以根據(jù)需要將查詢到的結(jié)果集信息劃分為較小的組,用 GROUPBY 子句實現(xiàn)。
(2)GROUPBY 子句語法:

GROUPBY 子句:GROUPBY 子句可以把表中的行劃分為組。然后可以用組函數(shù)返回 每一組的摘要信息。
(3)GROUPBY 子句的執(zhí)行順序:
先進行數(shù)據(jù)查詢,在對數(shù)據(jù)進行分組,然后執(zhí)行組函數(shù)。

注意:
1)在 SELECT 列表中的任何列必須在 GROUPBY 子句中。
2)在 GROUPBY 子句中的列或表達式不必在 SELECT 列表中。
5.約束分組結(jié)果
(1)什么是HAVING子句?
HAVING 語句通常與 GROUPBY 語句聯(lián)合使用,用來過濾由 GROUPBY 語句返回的記 錄集。 HAVING 語句的存在彌補了 WHERE 關(guān)鍵字不能與聚合函數(shù)聯(lián)合使用的不足。
(2)HAVING 子句語法:


(3)嵌套組函數(shù)
在使用組函數(shù)時我們也可以根據(jù)需要來做組函數(shù)的嵌套使用。
select max(avg(列名)) from 表名 group by 列名;
二、子查詢
1.什么是子查詢?
子查詢是一個 SELECT 語句,它是嵌在另一個 SELECT 語句中的子句。

2.子查詢語法:

1) 子查詢在主查詢之前執(zhí)行一次 ;
2)子查詢的結(jié)果被用于主查詢 ;
3)可以將子查詢放在:WHERE 子句 、HAVING 子句 和FROM 子句中。
3.使用子查詢:
可以用組合兩個查詢的方法解決這個問題,放置一個查詢到另一個查詢中。內(nèi)查詢或子 查詢返回一個值給外查詢或主查詢。使用一個子查詢相當(dāng)于執(zhí)行兩個連續(xù)查詢并且用第一個 查詢的結(jié)果作為第二個查詢的搜索值。
(1)子查詢的原則:
1)子查詢放在圓括號中。
2)將子查詢放在比較條件的右邊。
3)在單行子查詢中用單行運算符,在多行子查詢中用多行運算符。
4.單行子查詢:
子查詢語句只返回一行的查詢,使用單行比較符。
(1)主查詢對子查詢結(jié)果的單行比較運算符:

(2)在子查詢中可以使用組函數(shù),可以在 WHERE 子句中使用子查詢,也可以在 HAVING 子句中使用子查詢。

注意:子查詢錯誤,使用子查詢的一個常見的錯誤是單行子查詢返回了多行。

5.多行子查詢:
子查詢語句返回多行的查詢,使用多行比較符。
(1)主查詢對子查詢的多行比較運算符(在條件中也可使用 NOT 取反):

(2)在多行子查詢中使用 IN 運算符:

(3)在多行子查詢中使用 ANY 運算符(<ANY 意思是小于最大值。 >ANY 意思是大于最小值):


(4)在多行子查詢中使用 ALL 運算符(<ALL 意思是小于最小值。>ALL 意思是大于最大值):

