8 SELECT敘述的基本查詢 8-1 SELECT查詢指令 8-2 SELECT子句 8-3 FROM子句 8-4 WHERE子句 8-5 聚合函數的摘要查詢 8-6 群組查詢GROUP BY子句 8-7 排序ORDER BY子句
8-1 SELECT查詢指令-語法 SELECT指令是DML指令中語法最複雜的一個,其基本語法如下所示: SELECT 欄位清單 FROM 資料表來源 [WHERE 搜尋條件] [GROUP BY 欄位清單] [HAVING 搜尋條件] [ORDER BY 欄位清單]
8-1 SELECT查詢指令-子句說明 SELECT指令各子句的說明,如下表所示: 子句 說明 SELECT 指定查詢結果包含哪些欄位 FROM 指定查詢的資料來源是哪些資料表 WHERE 過濾查詢結果的條件,可以從資料表來源取得符合條件的查詢結果 GROUP BY 可以將相同欄位值的欄位群組在一起,以便執行群組查詢 HAVING 搭配GROUP BY子句進一步過濾群組查詢的條件 ORDER BY 指定查詢結果的排序欄位
8-2 SELECT子句 8-2-1 資料表的欄位 8-2-2 欄位別名 8-2-3 計算值欄位 8-2-4 刪除重複記錄 - ALL與DISTINCT 8-2-5 前幾筆記錄 - TOP子句
8-2 SELECT子句-語法 在SELECT指令的SELECT子句是指定查詢結果包含哪些欄位,其語法如下所示: SELECT [ALL | DISTINCT] [TOP n | PERCENT] [WITH TIES]]] 欄位規格 [[AS] 欄位別名] [, 欄位規格 [[AS] 欄位別名]] 上述ALL是預設值可以顯示所有記錄的欄位值,DISTINCT只顯示不重複欄位值的記錄,TOP關鍵字可以顯示查詢結果的前幾筆記錄或多少百分比。
8-2 SELECT子句-欄位規格 欄位規格(Column Specification)就是指查詢結果的欄位清單,可以使用AS關鍵字指定欄位別名。基本上,欄位規格可以是資料表欄位或計算值的運算式,其說明如下表所示: 欄位規格 說明 資料表的欄位(Base Table Column) 即資料表的欄位名稱清單,或使用「*」符號代表所有欄位 計算值欄位(Calculated Value Column) 算術運算子、字串或函數組成的運算式欄位
8-2-1 資料表的欄位- 查詢資料表的部分欄位 SQL指令碼檔:Ch8_2_1_01.sql SELECT子句可以指明查詢結果所需的欄位清單,換句話說,我們可以只查詢資料表中所需的部分欄位。 SQL指令碼檔:Ch8_2_1_01.sql 查詢【學生】資料表的所有學生記錄,不過,只顯示學號、姓名和生日三個欄位,如下所示: SELECT 學號, 姓名, 生日 FROM 學生
8-2-1 資料表的欄位- 查詢資料表的所有欄位 查詢結果如果需要顯示資料表的所有欄位,SELECT指令可以直接使用「*」符號代表資料表的所有欄位。 SQL指令碼檔:Ch8_2_1_02.sql 查詢【課程】資料表的所有課程記錄並且顯示所有欄位,如下所示: SELECT * FROM 課程
8-2-2 欄位別名 SELECT指令預設使用資料表定義的欄位名稱來顯示查詢結果,我們可以使用AS關鍵字指定欄位別名,AS關鍵字可有可無。 SQL指令碼檔:Ch8_2_2.sql 查詢【學生】資料表的學號、姓名和生日資料,為了方便閱讀,顯示欄位名稱為【學生學號】、【學生姓名】和【學生生日】的中文欄位別名,如下所示: SELECT 學號 AS 學生學號, 姓名 AS 學生姓名, 生日 AS 學生生日 FROM 學生
8-2-3 計算值欄位-說明 在SELECT子句的欄位規格如果是計算值欄位,我們可以使用算術運算子、字串或函數來組成運算式欄位。 因為計算值欄位並沒有欄位名稱,所以可以使用AS關鍵字來指定計算值欄位的別名。
8-2-3 計算值欄位-算術運算式(說明) 在SELECT子句的計算值欄位支援使用算術運算子(Arithmetic Operators)建立的運算式,可用的運算子如下表所示: 算術運算子 說明 + 加法 - 減法 * 乘法 / 除法 % 餘數
8-2-3 計算值欄位-算術運算式(範例) SQL指令碼檔:Ch8_2_3_01.sql 因為【員工】資料表的薪水需要扣除稅金才是實拿的薪水,我們可以使用算術運算式來查詢【員工】資料表的薪水資料,顯示每位員工的薪水淨額,如下所示: SELECT 身份證字號, 姓名, 薪水-扣稅 AS 薪水淨額 FROM 員工
8-2-3 計算值欄位-字串運算式(說明) 計算值欄位如果是字串運算式,它可以包含一至多個字串型別的欄位,和一些字串常數(Char String Constants),這是使用單引號或雙引號括起的一序列字元,如下所示: 'Abcdefg' '5678' 'SQL Server資料庫設計' 上述字串常數可以使用字串連接運算子「+」號來連接欄位值和字串常數。
8-2-3 計算值欄位-字串運算式(範例) SQL指令碼檔:Ch8_2_3_02.sql 在【員工】資料表的地址資料是由兩個欄位所組成,我們可以使用字串運算式來顯示員工的地址資料,如下所示: SELECT 身份證字號, 姓名, 城市+'巿'+街道 AS 地址 FROM 員工
8-2-3 計算值欄位-T-SQL函數 在計算值欄位的運算式可以包含T-SQL支援的數學、字串或日期/時間函數。 SQL指令碼檔:Ch8_2_3_03.sql 在【學生】資料表只有學生的生日資料,請搭配T-SQL函數來計算學生的年齡,如下所示: SELECT 學號, 姓名, GETDATE() AS 今天, DATEDIFF(year, 生日, GETDATE()) AS 年齡 FROM 學生
8-2-4 刪除重複記錄 - ALL與DISTINCT 如果資料表記錄的欄位值擁有重複值,SELECT子句的預設值ALL是顯示所有欄位值,使用DISTINCT關鍵字可以刪除重複欄位值,一旦欄位擁有重複值,就只會顯示其中一筆記錄。 SQL指令碼檔:Ch8_2_4.sql 查詢【課程】資料表的課程資料擁有幾種不同的學分數,如下所示: SELECT DISTINCT 學分 FROM 課程
8-2-5 前幾筆記錄 –TOP子句 (TOP子句和PERCENT關鍵字-說明) 在SELECT指令可以使用TOP子句取得查詢結果的前幾筆記錄,或前多少百分比的記錄資料。 Top n可以取得資料來源的前n筆記錄,加上PERCENT關鍵字就是前百分之n的記錄,此時的n值範圍是0~100。如果使用ORDER BY子句進行排序,就可以顯示排序後的前幾筆記錄。
8-2-5 前幾筆記錄 –TOP子句 (TOP子句和PERCENT關鍵字-範例1) SQL指令碼檔:Ch8_2_5_01.sql 在【學生】資料表顯示前3筆學生記錄資料,如下所示: SELECT TOP 3 * FROM 學生
8-2-5 前幾筆記錄 -TOP子句 (TOP子句和PERCENT關鍵字-範例2) SQL指令碼檔:Ch8_2_5_02.sql 在【學生】資料表取出前25%的學生記錄資料,如下所示: SELECT TOP 25 PERCENT * FROM 學生
8-2-5 前幾筆記錄 –TOP子句 (WITH TIES與ORDER BY子句-說明) SQL指令碼檔:Ch8_2_5_03.sql 在【課程】資料表取出前3筆課程記錄資料,如果有同學分的記錄也一併顯出來,如下所示: SELECT TOP 3 WITH TIES * FROM 課程 ORDER BY 學分
8-3 FROM子句-說明 SELECT指令是使用FROM子句指定查詢的來源資料表是哪些資料表,它可以是一個資料表或多個相關聯的資料表。 在本章的SQL指令碼檔都是從單一資料表取得查詢結果,第9章將說明如何從多個資料表取得查詢結果,即合併查詢和子查詢。
8-3 FROM子句-種類 長存資料表(Permanent Tables):使用CREATE TABLE指令建立的一般資料表。 暫存資料表(Temporary Tables):使用CREATE TABLE指令建立的暫存資料表(以「#」或「##」開頭的資料表),或由子查詢取得中間結果記錄資料的暫存資料表。 檢視表(Views):一種建立在長存資料表上的虛擬資料表。
8-3 FROM子句-範例 請執行SQL指令碼檔案Ch8_3_01.sql建立名為【##課程】的暫存資料表,且插入2筆課程記錄。 查詢【##課程】暫存資料表的課程記錄資料,如下所示: SELECT * FROM ##課程
8-4 WHERE子句 8-4-1 比較運算子 8-4-2 邏輯運算子 8-4-3 算術運算子
8-4 WHERE子句 SELECT指令和FROM字句是指出查詢哪個資料表的哪些欄位,WHERE子句的篩選條件才是真正的查詢條件,可以過濾記錄和找出符合所需條件的記錄資料,其基本語法如下所示: WHERE 搜尋條件 上述搜尋條件就是使用比較和邏輯運算子建立的過濾條件,查詢結果是取回符合條件的記錄資料。
8-4-1 比較運算子-說明 WHERE子句的搜尋條件可以是比較運算子建立的條件運算式,其運算元如果是欄位值,可以是文字、數值或日期/時間。T-SQL支援的比較運算子(Comparison Operators)說明,如右表所示: 比較運算子 說明 = 相等 <>、!= 不相等 > 大於 >= 大於等於 < 小於 <= 小於等於 !< 不小於 !> 不大於
8-4-1 比較運算子-條件值為字串 WHERE子句的條件運算式可以使用比較運算子來執行字串比較,欄位條件的字串需要使用單引號括起。 SQL指令碼檔:Ch8_4_1_01.sql 在【學生】資料表查詢學號為'S002'學生的詳細資料,如下所示: SELECT * FROM 學生 WHERE 學號='S002'
8-4-1 比較運算子-條件值為數值 WHERE子句的條件運算式如果條件值是數值,數值欄位就不需使用單引號括起。 SQL指令碼檔:Ch8_4_1_02.sql 查詢【員工】資料表的薪水欄位小於50000元的員工記錄,如下所示: SELECT * FROM 員工 WHERE 薪水<50000
8-4-1 比較運算子-條件值為日期/時間 WHERE子句的條件運算式如果是日期/時間的比較,如同字串,也需要使用單引號括起。 SQL指令碼檔:Ch8_4_1_03.sql 查詢【學生】資料表的學生生日是1993-02-02的學生記錄,如下所示: SELECT * FROM 學生 WHERE 生日='1998-02-02'
8-4-2 邏輯運算子-說明 邏輯運算子(Logical Operators)可以測試是否符合某些條件,或連接條件運算式來建立複雜條件。在WHERE子句的搜尋條件可以使用邏輯運算子,如同比較運算子,可以傳回True、False或Unknown值的布林資料類型。常用的邏輯運算子:NOT, AND, OR 述語(Predicates)的原意是句子的敘述內容,即動詞、修飾語、受詞和補語等,T-SQL將述語視為是邏輯運算子,共支援三種述語:LIKE, BETWEEN/AND, IN
8-4-2 邏輯運算子- LIKE包含子字串述語(說明) WHERE子句的條件欄位可以使用LIKE述語進行比較,LIKE述語是子字串查詢,只需是子字串就符合條件。我們還可以配合萬用字元來進行範本字串的比對,如下表所示: 萬用字元 說明 % 代表0或更多任易長度字元的任何字串 _ 代表一個字元長度的任何字元 [ ] 符合括號內字元清單的任何一個字元,例如:[EO] [ - ] 符合括號內「-」字元範圍的任何一個字元,例如:[A-J] [ ^ ] 符合不在括號內字元清單的字元,例如:[^K-Y]
8-4-2 邏輯運算子- LIKE包含子字串述語(範例1) SQL指令碼檔:Ch8_4_2_01.sql 查詢【教授】資料表中,屬於資訊相關科系CS和CIS的教授記錄,如下所示: SELECT * FROM 教授 WHERE 科系 LIKE '%S%'
8-4-2 邏輯運算子- LIKE包含子字串運算子(範例2) SQL指令碼檔:Ch8_4_2_02.sql 查詢【班級】資料表中,上課教室是在二樓的課程資料,如下所示: SELECT DISTINCT 課程編號, 上課時間, 教室 FROM 班級 WHERE 教室 LIKE '%2_-%'
8-4-2 邏輯運算子- LIKE包含子字串運算子(範例3) SQL指令碼檔:Ch8_4_2_03.sql 查詢【員工】資料表中,身份證字號是A-D範圍字母開頭的員工資料,如下所示: SELECT * FROM 員工 WHERE 身份證字號 LIKE '[A-D]%'
8-4-2 邏輯運算子- BETWEEN/AND範圍運算子(說明)
8-4-2 邏輯運算子- BETWEEN/AND範圍運算子(範例1) SQL指令碼檔:Ch8_4_2_04.sql 查詢【學生】資料表生日欄位範圍是1995年1月1日到1995年12月31日出生的學生,如下所示: SELECT * FROM 學生 WHERE 生日 BETWEEN '1995-1-1' AND '1995-12-31'
8-4-2 邏輯運算子- BETWEEN/AND範圍運算子(範例2) SQL指令碼檔:Ch8_4_2_05.sql 因為學生修課學分數還差了2~3個學分,我們可以查詢【課程】資料表看看還有哪些課可以選修,如下所示: SELECT * FROM 課程 WHERE 學分 BETWEEN 2 AND 3
8-4-2 邏輯運算子-IN運算子(說明) IN運算子只需是清單其中之一即可,我們需要列出一串文字或數值清單作為條件,欄位值只需是其中之一,就符合條件。
8-4-2 邏輯運算子-IN運算子(範例1) SQL指令碼檔:Ch8_4_2_06.sql 學生已經準備修CS101、CS222、CS100和CS213四門課,我們準備查詢【課程】資料表關於這些課程的詳細資料,如下所示: SELECT * FROM 課程 WHERE 課程編號 IN ('CS101', 'CS222', 'CS100', 'CS213')
8-4-2 邏輯運算子-IN運算子(範例2) SQL指令碼檔:Ch8_4_2_07.sql SELECT * FROM 課程 WHERE 學分 IN (2, 4)
8-4-2 邏輯運算子-NOT運算子(說明) NOT運算子可以搭配邏輯運算子,取得與條件相反的查詢結果,如下表所示: 運算子 說明 NOT LIKE 否定LIKE述語 NOT BETWEEN 否定BETWEEN/AND述語 NOT IN 否定IN述語
8-4-2 邏輯運算子-NOT運算子(範例) SQL指令碼檔:Ch8_4_2_08.sql SELECT * FROM 課程 學生已經修了CS101、CS222、CS100和CS213四門課,準備進一步查詢【課程】資料表,看看還有什麼課程可以修,如下所示: SELECT * FROM 課程 WHERE 課程編號 NOT IN ('CS101', 'CS222', 'CS100', 'CS213')
8-4-2 邏輯運算子- AND與OR運算子(說明) AND運算子連接的前後運算式都必須同時為真,整個WHERE子句的條件才為真。 OR運算子在WHERE子句連接的前後條件,只需任何一個條件為真,即為真。
8-4-2 邏輯運算子- AND與OR運算子(範例1) SQL指令碼檔:Ch8_4_2_09.sql 查詢【課程】資料表的課程編號欄位包含'1'子字串,而且課程名稱欄位有'程式'子字串,如下所示: SELECT * FROM 課程 WHERE 課程編號 LIKE '%1%' AND 名稱 LIKE '%程式%'
8-4-2 邏輯運算子- AND與OR運算子(範例2) SQL指令碼檔:Ch8_4_2_10.sql 查詢【課程】資料表的課程編號欄位包含'1'子字串,或課程名稱欄位有'程式'子字串,如下所示: SELECT * FROM 課程 WHERE 課程編號 LIKE '%1%' OR 名稱 LIKE '%程式%'
8-4-2 邏輯運算子- 連接多個條件與括號(說明) 在WHERE子句的條件可以使用AND和OR來連接多個不同條件。 其優先順序是位在括號中運算式優先,換句話說,我們可以使用括號來產生不同的查詢結果。
8-4-2 邏輯運算子- 連接多個條件與括號(範例1) SQL指令碼檔:Ch8_4_2_11.sql 查詢【課程】資料表的課程編號欄位包含'2'子字串,和課程名稱欄位有'程式'子字串,或學分大於等於4,如下所示: SELECT * FROM 課程 WHERE 課程編號 LIKE '%2%' AND 名稱 LIKE '%程式%' OR 學分>=4
8-4-2 邏輯運算子- 連接多個條件與括號(範例2) SQL指令碼檔:Ch8_4_2_12.sql 查詢【課程】資料表的課程編號欄位包含'2'子字串,和課程名稱欄位有'程式'子字串,或學分大於等於4,後2個條件使用括號括起,如下所示: SELECT * FROM 課程 WHERE 課程編號 LIKE '%2%' AND (名稱 LIKE '%程式%' OR 學分>=4)
8-4-3 算術運算子 在WHERE子句的運算式條件也支援算術運算子(Arithmetic Operators)的加、減、乘、除和餘數,我們可以在WHERE子句的條件加上算術運算子。 SQL指令碼檔:Ch8_4_3.sql 查詢【員工】資料表的薪水在扣稅和保險金額後的淨額小於40000元的員工記錄,如下所示: SELECT 身份證字號, 姓名, 電話 FROM 員工 WHERE (薪水-扣稅-保險) < 40000
8-5 聚合函數的摘要查詢 8-5-1 COUNT()函數 8-5-2 AVG()函數 8-5-3 MAX()函數 8-5-4 MIN()函數 8-5-5 SUM()函數
8-5 聚合函數的摘要查詢-說明 聚合函數(Aggregate Functions)可以進行選取記錄欄位值的筆數、平均、範圍和統計函數,以便提供進一步欄位資料的分析結果。 SELECT指令敘述擁有聚合函數稱為摘要查詢(Summary Query)。常用的聚合函數說明,如右表所示: 函數 說明 COUNT(運算式) 計算記錄筆數 AVG(運算式) 計算欄位平均值 MAX(運算式) 取得記錄欄位的最大值 MIN(運算式) 取得記錄欄位的最小值 SUM(運算式) 取得記錄欄位的總計
8-5-1 COUNT()函數 SQL指令可以配合COUNT()函數計算查詢的記錄數,「*」參數可以統計資料表的所有記錄數,或指定欄位來計算欄位不是空值的記錄數。 SQL指令碼檔:Ch8_5_1_01.sql 查詢【學生】資料表的學生總數,如下所示: SELECT COUNT(*) AS 學生數 FROM 學生
8-5-2 AVG()函數 SQL指令只需配合AVG()函數,就可以計算指定欄位的平均值。 SQL指令碼檔:Ch8_5_2_01.sql 在【員工】資料表查詢員工薪水的平均值,如下所示: SELECT AVG(薪水) AS 平均薪水 FROM 員工
8-5-3 MAX()函數 SQL指令配合MAX()函數,可以計算符合條件記錄的欄位最大值。 SQL指令碼檔:Ch8_5_3_01.sql 在【員工】資料表查詢保險金額第一名員工的金額,如下所示: SELECT MAX(保險) AS 保險金額 FROM 員工
8-5-4 MIN()函數 SQL指令配合MIN()函數,可以計算出符合條件記錄的欄位最小值。 SQL指令碼檔:Ch8_5_4_01.sql 在【員工】資料表查詢保險金額最後一名員工的金額,如下所示: SELECT MIN(保險) AS 保險金額 FROM 員工
8-5-5 SUM()函數 SQL指令配合SUM()函數,可以計算出符合條件記錄的欄位總和。 SQL指令碼檔:Ch8_5_5_01.sql 在【員工】資料表計算員工的薪水總和和平均,如下所示: SELECT SUM(薪水) AS 薪水總額, SUM(薪水)/COUNT(*) AS 薪水平均 FROM 員工
8-6 群組查詢GROUP BY子句 8-6-1 GROUP BY子句 8-6-2 HAVING子句 8-6-3 WITHROLLUP和WITH CUBE片語 8-6-4 GROUPING SETS子句
8-6-1 GROUP BY子句-說明 群組是以資料表的指定欄位來進行分類,分類方式是將欄位值中重複值結合起來歸成一類。例如:在【班級】資料表統計每一門課有多少位學生上課的學生數,【課程編號】欄位是建立群組的欄位,可以將修此課程的學生結合起來,如下圖所示:
8-6-1 GROUP BY子句-語法 在SQL語言是使用GROUP BY子句來指定群組欄位,其語法如下所示: GROUP BY 欄位清單 上述語法的欄位清單就是建立群組的欄位,如果不只一個,請使用「,」逗號分隔。
8-6-1 GROUP BY子句-條件 當使用GOUP BY進行查詢時,資料表需要滿足一些條件,如下所示: 資料表的欄位擁有重複值,可以結合成群組。 資料表擁有其他欄位可以配合聚合函數進行資料統計,如下表所示: 函數 進行的資料統計 AVG()函數 計算各群組的平均 SUM()函數 計算各群組的總和 COUNT()函數 計算各群組的記錄數
8-6-1 GROUP BY子句-範例1 SQL指令碼檔:Ch8_6_1_01.sql 在【班級】資料表查詢課程編號和計算每一門課程有多少位學生上課,如下所示: SELECT 課程編號, COUNT(*) AS 學生數 FROM 班級 GROUP BY 課程編號
8-6-1 GROUP BY子句-範例2 SQL指令碼檔:Ch8_6_1_02.sql 在【學生】資料表查詢統計性別男和女的學生數,如下所示: SELECT 性別, COUNT(*) AS 學生數 FROM 學生 GROUP BY 性別
8-6-2 HAVING子句-語法 GROUP BY子句可以配合HAVING子句來指定搜尋條件,以便進一步縮小查詢範圍,其語法如下所示: HAVING子句和WHRE子句的差異,如下所示: HAVING子句可以使用聚合函數,但WHERE子句不可以。 在HAVING子句條件所參考的欄位一定屬於SELECT子句的欄位清單;WHERE子句則可以參考FORM子句資料表來源的所有欄位。
8-6-2 HAVING子句-範例1 SQL指令碼檔:Ch8_6_2_01.sql SELECT 學號, 課程編號 FROM 班級 GROUP BY 課程編號, 學號 HAVING 學號 = 'S002'
8-6-2 HAVING子句-範例2 SQL指令碼檔:Ch8_6_2_02.sql SELECT 課程編號, COUNT(*) AS 學生數 FROM 班級 WHERE 教授編號 = 'I003' GROUP BY 課程編號 HAVING COUNT(*) >= 2
8-6-3 WITHROLLUP和WITH CUBE片語-說明 在GROUP BY子句可以使用ROLLUP和CUBE來顯示多層次統計資料的摘要資訊(Summary Information),也就是執行各欄位值加總運算的小計或總和。 WITH CUBE是針對GROUP BY子句的各群組欄位執行小計與加總;WITH ROLLUP則是針對第一個欄位執行加總運算。
8-6-3 WITHROLLUP和WITH CUBE片語-範例1 SQL指令碼檔:Ch8_6_3_01.sql 在【班級】資料表找出教授I001和I003教授課程的學生數小計和加總,和各課程的學生總數,如下所示: SELECT 教授編號, 課程編號, COUNT(學號) AS 總數 FROM 班級 WHERE 教授編號 IN ('I001', 'I003') GROUP BY 教授編號, 課程編號 WITH CUBE
8-6-3 WITHROLLUP和WITH CUBE片語-範例2 SQL指令碼檔:Ch8_6_3_02.sql 在【班級】資料表找出教授I001和I003教授課程的學生數小計和加總,如下所示: SELECT 教授編號, 課程編號, COUNT(學號) AS 總數 FROM 班級 WHERE 教授編號 IN ('I001', 'I003') GROUP BY 教授編號, 課程編號 WITH ROLLUP
8-6-4 GROUPING SETS子句-說明 SQL Server 的GROUPING SETS子句可以讓使用者定義傳回的統計資料有哪些欄位。換句話說,GROUPING SETS子句可以取代ROLLUP和CUBE片語的功能,產生相同結果的統計資料。 不同於ROLLUP和CUBE片語傳回的資訊是系統內定的結果,如果我們需要指定格式的統計資訊,以產生所需的報表資料,此時就可以使用GROUPING SETS子句來自行定義傳回哪些欄位的聚合統計資料。
8-6-4 GROUPING SETS子句-範例 SQL指令碼檔:Ch8_6_4.sql 在【班級】資料表找出教授I001和I003教授課程的學生數小計和加總,這個SQL指令是改為使用GROUPING SETS子句產生和WITH ROLLUP片語相同的查詢結果,如下所示: SELECT 教授編號, 課程編號, COUNT(學號) AS 總數 FROM 班級 WHERE 教授編號 IN ('I001', 'I003') GROUP BY GROUPING SETS ( (教授編號, 課程編號), (教授編號), () )
8-7 排序ORDER BY子句-語法 SELECT指令可以使用ORDER BY子句依照欄位由小到大或由大到小進行排序,其語法如下所示: ORDER BY 運算式 [ASC | DESC] [, 運算式 [ASC | DESC] 上述語法的排序方式預設是由小到大排序的ASC,如果希望由大至小,請使用DESC關鍵字。
8-7 排序ORDER BY子句-由大至小 SQL指令碼檔:Ch8_7_01.sql 在【員工】資料表查詢薪水大於35000元的員工記錄,並且使用薪水欄位進行由大至小排序,如下所示: SELECT 姓名, 薪水, 電話 FROM 員工 WHERE 薪水 > 35000 ORDER BY 薪水 DESC
8-7 排序ORDER BY子句-由小至大 SQL指令碼檔:Ch8_7_02.sql 在【員工】資料表查詢薪水大於35000元的員工記錄,並且使用薪水欄位進行由小至大排序,如下所示: SELECT 姓名, 薪水, 電話 FROM 員工 WHERE 薪水 > 35000 ORDER BY 薪水 ASC