sql 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法...

37
SQL 的查詢語言

Upload: others

Post on 13-Sep-2019

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

SQL 的查詢語言

Page 2: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

查詢的基本語法查詢的基本語法

【【說明說明】】

1. Select1. Select後面要接所要列出的欄位名稱。後面要接所要列出的欄位名稱。

2. [* 2. [* || Distinct|TopnDistinct|Topn]]中括號的部份可以省略。中括號的部份可以省略。

(1) (1) ””**”” 表示列印出所有的欄位表示列印出所有的欄位((欄位欄位1,1,欄位欄位2,2,…………,,欄位欄位n)n)

(2) Distinct(2) Distinct代表從資料表中選擇不重複的資料。代表從資料表中選擇不重複的資料。

它是利用先排序來檢查是否有重複。它是利用先排序來檢查是否有重複。

(3) Top n(3) Top n指在資料表中取出名次排序在前的指在資料表中取出名次排序在前的nn筆記錄。筆記錄。

SELECT [* | DISTINCT | Top n] <欄位串列>

FROM (資料表名稱{<別名>} | JOIN資料表名稱)

[WHERE <條件式>]

[GROUP BY <群組欄位> ]

[HAVING <群組條件>]

[ORDER BY <欄位> [ASC | DESC]]

SELECT [* | DISTINCT | Top n] <SELECT [* | DISTINCT | Top n] <欄位串列欄位串列>>

FROM (FROM (資料表名稱資料表名稱{<{<別名別名>} | JOIN>} | JOIN資料表名稱資料表名稱))

[WHERE <[WHERE <條件式條件式>]>]

[GROUP BY <[GROUP BY <群組欄位群組欄位> ]> ]

[HAVING <[HAVING <群組條件群組條件>]>]

[ORDER BY <[ORDER BY <欄位欄位> [ASC | DESC]]> [ASC | DESC]]

Page 3: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

查詢的基本語法查詢的基本語法 <<續續>>

【【說明說明】】

3.3. FromFrom 後面接資料表名稱,它可以接一個以上的資料表。後面接資料表名稱,它可以接一個以上的資料表。

4.4. WhereWhere後面要接條件式後面要接條件式 ((它包括了各種運算子它包括了各種運算子))5. Group By 5. Group By 欄位欄位1,1,欄位欄位2,2,……,,欄位欄位n [Having n [Having 條件式條件式]]

(1) Group By (1) Group By 可單獨存在,它是將數個欄位組合起來,可單獨存在,它是將數個欄位組合起來,以做為每次動作的依據。以做為每次動作的依據。

(2) [Having (2) [Having 條件式條件式]]是將數個欄位中加以有條件的組合。是將數個欄位中加以有條件的組合。它不可以單獨存在。它不可以單獨存在。

6. Order By 6. Order By 欄位欄位1,1, 欄位欄位2,2, ……,, 欄位欄位n n [[Asc|DescAsc|Desc]]它是依照某一個欄位來進行排序。它是依照某一個欄位來進行排序。

例如:例如:(1) (1) ORDER BY ORDER BY 成績成績 AscAsc 可以省略可以省略((由小至大由小至大))(2) (2) ORDER BYORDER BY成績成績 DescDesc 不可以省略不可以省略((由大至小由大至小))

Page 4: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

使用使用SelectSelect子句子句

【【定義定義】】

SelectSelect是指在資料表中,選擇是指在資料表中,選擇全部全部或或部份欄位部份欄位顯示出來,這就是所謂的顯示出來,這就是所謂的

「投影運算」「投影運算」。。

【【格式格式】】

SelectSelect 欄位串列欄位串列

From From 資料表名稱資料表名稱

•• 查詢全部欄位查詢全部欄位

如果如果沒有指定欄位沒有指定欄位的話,我們可以直接利用的話,我們可以直接利用星號「星號「**」」

代表代表所有的欄位名稱所有的欄位名稱。。

【【優點優點】】不需輸入全部不需輸入全部的欄位名稱。的欄位名稱。

Page 5: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

[[實例實例]]在「學生資料表」中顯示「在「學生資料表」中顯示「所有學生基本資料所有學生基本資料」」【【解答解答】】

【【查詢結果查詢結果】】

SQLSQL指令指令11

SELECT SELECT **FROM FROM 學生資料表學生資料表

SQLSQL指令指令22與與SQLSQL指令指令11有相同的結果有相同的結果

SELECT SELECT 學號學號,,姓名姓名,,系碼系碼

FROM FROM 學生資料表學生資料表

Page 6: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

查詢指定欄位查詢指定欄位((垂直篩選垂直篩選))【【定義定義】】

由於上一種方法,只能由於上一種方法,只能直接選擇全部的欄位直接選擇全部的欄位資料,資料,無法顧及隱藏私人無法顧及隱藏私人

資料資料及及自行調整欄位順序自行調整欄位順序的問題,因此,我們利用的問題,因此,我們利用指定欄位來查詢指定欄位來查詢資資

料。料。

Page 7: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

[[實例實例]]在「學生資料表」中查詢所有學生的「在「學生資料表」中查詢所有學生的「姓名及系碼姓名及系碼」」【【解答解答】】

【【查詢結果查詢結果】】

說明:在「學生資料表」中將說明:在「學生資料表」中將「姓名」及「系碼」「姓名」及「系碼」投射出來。投射出來。

SQLSQL指令指令

SELECT SELECT 姓名姓名,, 系碼系碼

FROM FROM 學生資料表學生資料表欄位與欄位名稱之間,必欄位與欄位名稱之間,必

須要以須要以逗號「,」隔開逗號「,」隔開

Page 8: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

使用「比較運算子」使用「比較運算子」如果我們如果我們所想要的資料所想要的資料是要是要符合某些條件符合某些條件,而,而不是全部的資料不是全部的資料時,時,

那就必須要在那就必須要在SelectSelect子句中再使用子句中再使用WhereWhere條件式條件式即可。並且也可以配合即可。並且也可以配合

使用「使用「比較運算子比較運算子」來搜尋資料。若」來搜尋資料。若條件式成立條件式成立的話則會傳回「的話則會傳回「True(True(

真真))」,若」,若不成立不成立的話則會傳回「的話則會傳回「False(False(假假))」。」。

SQLSQL指令指令

Select Select 欄位集合欄位集合

From From 資料表名稱資料表名稱

WhereWhere 條件式條件式

運算子運算子 功能功能 例子例子 條件式說明條件式說明

== ((等於等於)) 判斷判斷AA與與BB是否相等是否相等 A=BA=B 成績成績=60=60

<> <> ((不等於不等於)) 判斷判斷AA是否不等於是否不等於BB A<>BA<>B 成績成績<>60<>60

<< ((小於小於)) 判斷判斷AA是否小於是否小於BB A<BA<B 成績成績<60<60

<= <= ((小於等於小於等於)) 判斷判斷AA是否小於等於是否小於等於BB A<=BA<=B 成績成績<=60<=60

>> ((大於大於)) 判斷判斷AA是否大於是否大於BB A>BA>B 成績成績>60>60

>= >= ((大於等於大於等於)) 判斷判斷AA是否大於等於是否大於等於BB A>=BA>=B 成績成績>=60>=60

Page 9: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

查詢滿足條件的值組查詢滿足條件的值組((水平篩選水平篩選))

【【定義定義】】

當我們當我們所想要的資料所想要的資料是要是要符合某些條件符合某些條件,而,而不是全部的資料不是全部的資料時,那就時,那就

必須要在必須要在SelectSelect子句中再使用子句中再使用WhereWhere條件式條件式即可。即可。

【【優點優點】】1.1.可以依照使用者的需求來查詢。可以依照使用者的需求來查詢。

2.2.資訊較為集中。資訊較為集中。

Page 10: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

[[實例實例]]在「選課資料表」中查詢在「選課資料表」中查詢修課號為「修課號為「C005C005」」的學生的「學號及成績」的學生的「學號及成績」

【【解答解答】】

【【查詢結果查詢結果】】

SQLSQL指令指令

SELECT SELECT 學號學號, , 成績成績 FROM FROM 選課資料表選課資料表

WHERE WHERE 課號課號='C005'='C005'

Page 11: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

[[實例實例]]在「選課資料表」中查詢任何課程成績「不及格在「選課資料表」中查詢任何課程成績「不及格6060」的學生的「學號、」的學生的「學號、

課程代號及成績」課程代號及成績」【【解答解答】】

【【查詢結果查詢結果】】

SQLSQL指令指令

SELECT SELECT 學號學號, , 課號課號, , 成績成績

FROM FROM 選課資料表選課資料表

WHERE WHERE 成績成績<60<60

「「6060分」是數值資料分」是數值資料

不須要加不須要加「左右單引「左右單引

號」號」

Page 12: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

使用「邏輯運算子」使用「邏輯運算子」在在WhereWhere條件式中除了可以設定「比較運算子」之外,還可以設定條件式中除了可以設定「比較運算子」之外,還可以設定「邏「邏

輯運算子」輯運算子」來將數個來將數個「比較運算子」條件組合起來「比較運算子」條件組合起來,成為,成為較複雜的條件較複雜的條件

式式。。

運算子運算子 功能功能 條件式說明條件式說明

And(And(且且)) 判斷判斷AA且且BB兩個條件式是否皆成立兩個條件式是否皆成立 成績成績>=60 And >=60 And 課程代號課程代號='C005'='C005'

Or(Or(或或)) 判斷判斷AA或或BB兩個條件式是否有一個兩個條件式是否有一個成立成立 課程代號課程代號='C004' Or ='C004' Or 課程代號課程代號='C005'='C005'

Not(Not(反反)) 非非 AA的條件式的條件式 Not Not 成績成績>=60>=60

Page 13: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

IS NULL(IS NULL(空值空值))【【定義定義】】NULLNULL值是表示沒有任何的值值是表示沒有任何的值((空值空值)),在一般的資料表中有些欄位中並,在一般的資料表中有些欄位中並

沒有輸入任何的值。例如:學生月考缺考,使得該科目成績是空值。沒有輸入任何的值。例如:學生月考缺考,使得該科目成績是空值。

【【實例實例11】】

在「選課資料表」中查詢那些學生「缺考」的「學號、課號及成績」。在「選課資料表」中查詢那些學生「缺考」的「學號、課號及成績」。

【【解答解答】】

【【查詢結果查詢結果】】

注意:這裡的「注意:這裡的「ISIS」不能用等號」不能用等號(=)(=)代替它。代替它。

SQLSQL指令指令

SELECT SELECT 學號學號, , 課號課號, , 成績成績

FROM FROM 選課資料表選課資料表

WHERE WHERE 成績成績 IS NULLIS NULL

設定設定IS NULLIS NULL條件,其條件,其回傳的值回傳的值TrueTrue或或FalseFalse

Page 14: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

[[實例實例2]2]在「選課資料表」中查詢那些學生「沒有缺考」的「學號、課號及成在「選課資料表」中查詢那些學生「沒有缺考」的「學號、課號及成

績」績」

【【解答解答】】

【【查詢結果查詢結果】】

SQLSQL指令指令

SELECT SELECT 學號學號, , 課號課號, , 成績成績

FROM FROM 選課資料表選課資料表

WHERE WHERE 成績成績 IS NOT NULLIS NOT NULL

設定設定 IS NOT NULLIS NOT NULL條件條件

Page 15: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

使用「模糊條件與範圍」使用「模糊條件與範圍」

【【定義定義】】

在在WhereWhere條件式中除了可以設定條件式中除了可以設定「比較運算子」「比較運算子」與與「邏輯運算「邏輯運算

子」子」之外,還可以設定「之外,還可以設定「模糊或範圍條件」來查詢模糊或範圍條件」來查詢。。

【【例如例如】】奇摩的搜尋網站,使用者只要輸入奇摩的搜尋網站,使用者只要輸入某些關鍵字某些關鍵字,就可以即時查,就可以即時查

詢出相關的資料。其常用的詢出相關的資料。其常用的模糊或範圍運算子模糊或範圍運算子如表所示:如表所示:

運算子運算子 功能功能 條件式條件式

1. Like1. Like 模糊相似條件模糊相似條件 Where Where 系所系所 LIKE 'LIKE '資管資管%'%'

2. IN2. IN 集合條件集合條件 WhereWhere課程代號課程代號IN('C001','C002')IN('C001','C002')

3. Between3. Between…………AndAnd 範圍條件範圍條件 WhereWhere成績成績 Between 60 And 80Between 60 And 80

Page 16: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

LikeLike模糊相似條件模糊相似條件

【【定義定義】】

LIKELIKE運算子利用萬用字元運算子利用萬用字元(%(%及及 _ )_ )來比較相同的內容值。來比較相同的內容值。

(1)(1)萬用字元萬用字元(%)(%)百分比符號代表零個或一個以上的任意字元;百分比符號代表零個或一個以上的任意字元;

(2)(2)萬用字元萬用字元( _ )( _ )底線符號代表單一個數的任意字元。底線符號代表單一個數的任意字元。

【【注意事項注意事項】】LikeLike模糊相似條件的萬用字元之比較模糊相似條件的萬用字元之比較

撰寫撰寫SQL SQL 語法環境語法環境 AccessAccess SQL Server SQL Server

比對一個字元比對一個字元 「「??」」 「「__」」

比對多個字元比對多個字元 「「**」」 「「%%」」

比對一個數字比對一個數字 「「##」」 「「##」」

包含指定範圍包含指定範圍 [A[A--C]C]代表包含代表包含AA到到CC的任何單一字元的任何單一字元

排除包含指定範圍排除包含指定範圍 [^A[^A--C]C]代表排除代表排除AA到到CC的任何單一字元的任何單一字元

Page 17: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

【【實例實例11】】在「學生資料表」中查詢姓名開頭姓在「學生資料表」中查詢姓名開頭姓””李李””的學生基本資料。的學生基本資料。

【【解答解答】】

【【查詢結果查詢結果】】

SQLSQL指令指令

SELECT *SELECT *

FROM FROM 學生資料表學生資料表

WHERE WHERE 姓名姓名 Like 'Like '李李*'*'

Page 18: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

【【實例實例22】】

在「學生資料表」中查詢姓名開頭姓「李」或「王」的學生基本資料。在「學生資料表」中查詢姓名開頭姓「李」或「王」的學生基本資料。

【【解答解答】】

【【查詢結果查詢結果】】

SQLSQL指令指令

SELECT *SELECT *

FROM FROM 學生資料表學生資料表

WHERE WHERE 姓名姓名 Like '[Like '[李王李王]*';]*';

Page 19: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

ININ集合條件集合條件【【定義定義】】ININ為集合運算子,只要符合集合之其中一個元素,將會被選為集合運算子,只要符合集合之其中一個元素,將會被選

取。取。

【【使用時機使用時機】】篩選的對象是兩個或兩個以上。篩選的對象是兩個或兩個以上。

【【實例實例 11】】

在「選課資料表」中查詢學生任選一個「課程代號為在「選課資料表」中查詢學生任選一個「課程代號為C004 C004 或或 課程代號課程代號

為為C005C005」的學生的「學號、課號及成績」」的學生的「學號、課號及成績」

【【解答解答 】】

【【查詢結果查詢結果】】

SQLSQL指令指令

SELECT SELECT 學號學號, , 課號課號, , 成績成績

FROM FROM 選課資料表選課資料表

WHERE WHERE 課號課號 In ('C004','C005')In ('C004','C005')

Page 20: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

SQLSQL指令指令

SELECT SELECT 學號學號,,姓名姓名,,系碼系碼

FROM FROM 學生資料表學生資料表

WHEREWHERE 學號學號 In ('S0001', 'S0002', 'S0003')In ('S0001', 'S0002', 'S0003')

【【實例實例22】】

請在「學生資料表」中,列出請在「學生資料表」中,列出 學號為學號為S0001~S0003S0001~S0003的同學之「學號,的同學之「學號,

姓名及系碼」姓名及系碼」

【【解答解答 】】

【【查詢結果查詢結果】】

Page 21: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

BetweenBetween//AndAnd範圍條件範圍條件【【定義定義】】

Between/AndBetween/And是用來指定一個範圍,表示資料值必須在 小值是用來指定一個範圍,表示資料值必須在 小值((含含))與與

大值大值((含含))之間的範圍資料。之間的範圍資料。註:等同於「大於 小值註:等同於「大於 小值 And And 小於 大小於 大

值」值」

【【實例實例】】在「選課資料表」中查詢成績在「選課資料表」中查詢成績6060到到9090 之間的學生的「學號、之間的學生的「學號、

課號及成績」課號及成績」【【解答解答 】】 《《參見參見77--1.2 1.2 》》

【【查詢結果查詢結果】】

SQLSQL指令指令

SELECT SELECT 學號學號, , 課號課號, , 成績成績

FROM FROM 選課資料表選課資料表

WHERE WHERE 成績成績 Between 60 And 90Between 60 And 90

成績成績>=60 And>=60 And成績成績<=90 <=90

等同於等同於

Page 22: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

使用「聚合函數」使用「聚合函數」【【定義定義】】

在在SQLSQL中提供中提供聚合函數聚合函數來讓使用者來讓使用者統計統計資料表中數值資料的資料表中數值資料的 大值、大值、

小值、平均值及合計值小值、平均值及合計值等等。其常用的聚合函數的種類如表所示:等等。其常用的聚合函數的種類如表所示:

聚合函數聚合函數 說明說明

Count(*)Count(*) 計算個數函數計算個數函數

Count(Count(欄位名稱欄位名稱)) 計算該欄位名稱之不具計算該欄位名稱之不具NULLNULL值列的總數值列的總數

AvgAvg 計算平均函數計算平均函數

Sum Sum 計算總合函數計算總合函數

Max Max 計算 大值函數計算 大值函數

Min Min 計算 小值函數計算 小值函數

Page 23: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

記錄筆數記錄筆數(Count)(Count)【【定義定義】】COUNTCOUNT函數是用來計算橫列記錄的筆數。函數是用來計算橫列記錄的筆數。

【【實例實例11 】】 在「學生資料表」中查詢目前選修課程的全班人數在「學生資料表」中查詢目前選修課程的全班人數【【解答解答 】】

【【查詢結果查詢結果】】

SQLSQL指令指令

SELECT Count(*) AS SELECT Count(*) AS 全班人數全班人數

FROM FROM 學生資料表學生資料表

Page 24: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

平均數平均數(AVG)(AVG)【【定義定義】】AVGAVG函數函數用來傳回一組記錄在用來傳回一組記錄在某欄位內容值某欄位內容值中的中的平均值平均值。。

【【實例實例】】在「選課資料表」中查詢有選修「課程代號為在「選課資料表」中查詢有選修「課程代號為C005C005」的全班」的全班

平均成績平均成績【【解答解答 】】

【【查詢結果查詢結果】】

SQLSQL指令指令

SELECT AVG(SELECT AVG(成績成績) AS ) AS 資料庫平均成績資料庫平均成績

FROM FROM 選課資料表選課資料表

WHERE WHERE 課號課號='C005'='C005'

Page 25: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

總和總和(Sum)(Sum)【【定義定義】】SUMSUM函數是用來傳回一組記錄在某欄位內容值的總和。函數是用來傳回一組記錄在某欄位內容值的總和。

【【實例實例】】在「選課資料表」中查詢有選修「課程代號為在「選課資料表」中查詢有選修「課程代號為C005C005」的全班」的全班

總成績總成績【【解答解答 】】

【【查詢結果查詢結果】】

SQLSQL指令指令

SELECT SUM(SELECT SUM(成績成績) AS ) AS 資料庫總成績資料庫總成績

FROM FROM 選課資料表選課資料表

WHERE WHERE 課號課號='C005'='C005'

Page 26: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

大值大值(Max)(Max)【【定義定義】】MAXMAX函數用來傳回一組記錄在某欄位內容值中的 大值。函數用來傳回一組記錄在某欄位內容值中的 大值。

【【實例實例】】在「選課資料表」中查詢有選修「課程代號為在「選課資料表」中查詢有選修「課程代號為C005C005」的全班」的全班

成績 高分成績 高分【【解答解答 】】

【【查詢結果查詢結果】】

SQLSQL指令指令

SELECT MAX(SELECT MAX(成績成績) AS ) AS 資料庫 高分資料庫 高分

FROM FROM 選課資料表選課資料表

WHERE WHERE 課號課號='C005'='C005'

Page 27: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

小值小值(Min)(Min)【【定義定義】】MINMIN函數用來傳回一組記錄在某欄位內容值中的 小值。函數用來傳回一組記錄在某欄位內容值中的 小值。

【【實例實例】】在「選課資料表」中查詢有選修「課程代號為在「選課資料表」中查詢有選修「課程代號為C005C005」的全班」的全班

成績 低分成績 低分【【解答解答 】】

【【查詢結果查詢結果】】

SQLSQL指令指令

SELECT MIN(SELECT MIN(成績成績) AS ) AS 資料庫 低分資料庫 低分

FROM FROM 選課資料表選課資料表

WHERE WHERE 課程代號課程代號='C005'='C005'

Page 28: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

使用使用「排序及排名次」「排序及排名次」

【【定義定義】】

雖然撰寫雖然撰寫SQLSQL指令來查詢所須的資料非常容易,但如果指令來查詢所須的資料非常容易,但如果顯示的結果筆數顯示的結果筆數

非常龐大非常龐大而而沒有按照某一順序及規則來顯示沒有按照某一順序及規則來顯示,可能會顯得,可能會顯得非常混亂非常混亂。還。還

好好SQLSQL指令還有提供排序的功能。指令還有提供排序的功能。

其常用的排序及排名次的子句種類如表所示:其常用的排序及排名次的子句種類如表所示:

排序及排名次指令 說明說明

ORDER BYORDER BY成績成績 AscAsc AscAsc 可以省略可以省略((由小至大由小至大) <) <預設模式預設模式>>

ORDER BYORDER BY成績成績 DescDesc DescDesc 不可以省略不可以省略((由大至小由大至小))

Top N Top N 取排名前取排名前NN名名

Top N Percent Top N Percent 取排名前取排名前N%N%名名

Page 29: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

AscAsc遞增排序遞增排序

【【定義定義】】資料記錄的排序方式是資料記錄的排序方式是由小至大排列由小至大排列。。

【【實例實例】】在「選課資料表」中查詢在「選課資料表」中查詢全班成績由低到高分排序全班成績由低到高分排序【【解答解答 】】

【【查詢結果查詢結果】】

SQLSQL指令指令

SELECT SELECT 學號學號, , 課號課號, , 成績成績

FROM FROM 選課資料表選課資料表

ORDER BY ORDER BY 成績成績 AscAsc

Page 30: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

DescDesc遞減排序遞減排序

【【定義定義】】資料記錄的排序方式是資料記錄的排序方式是由大至小排列由大至小排列。。

【【實例實例】】在「選課資料表」中查詢的全班成績在「選課資料表」中查詢的全班成績由高到低分排序由高到低分排序【【解答解答 】】

【【查詢結果查詢結果】】

SQLSQL指令指令

SELECT SELECT 學號學號, , 課號課號, , 成績成績

FROM FROM 選課資料表選課資料表

ORDER BY ORDER BY 成績成績 DESCDESC

Page 31: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

比較複雜的排序比較複雜的排序【【定義定義】】指定指定一個欄位以上一個欄位以上來來做排序做排序時,則時,則先先以以第一個欄位優先排序第一個欄位優先排序,,

當資料相同時,則當資料相同時,則再再進行進行第二個欄位進行排序第二個欄位進行排序,依此類堆。,依此類堆。

【【實例實例】】在「選課資料表」中查詢結果按照在「選課資料表」中查詢結果按照學號學號昇冪排列昇冪排列之後,再依之後,再依

成績成績昇冪排列昇冪排列。。【【解答解答 】】

【【查詢結果查詢結果】】

SQLSQL指令指令

SELECT SELECT 學號學號, , 課號課號, , 成績成績

FROM FROM 選課資料表選課資料表

ORDER BY ORDER BY 學號學號,,成績成績

欄位名稱之間必須要以「欄位名稱之間必須要以「,(,(逗點逗點))來做區來做區隔」隔」

依學號未依成績

依學號低高

依成績低高

Page 32: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

使用「群組化」使用「群組化」

【【定義定義】】

利用利用SQLSQL語言,我們可以將某些語言,我們可以將某些特定欄位的值特定欄位的值相同的記錄相同的記錄全部組合全部組合

起來,以進行起來,以進行群組化群組化,接著就可以在這個群組內求出,接著就可以在這個群組內求出各種統計分析各種統計分析。。

【【語法語法】】 Group ByGroup By欄位欄位1,1,欄位欄位2,2,……,,欄位欄位n [Having n [Having 條件式條件式]]

(1)Group By (1)Group By 可單獨存在,它是將可單獨存在,它是將數個欄位組合數個欄位組合起來,以做起來,以做

為為每次動作的依據每次動作的依據。。

(2) [Having (2) [Having 條件式條件式]]是將數個欄位中以是將數個欄位中以有條件的組合有條件的組合。。

它它不可以單獨存在不可以單獨存在。。

(3) WHERE(3) WHERE子句與子句與HAVINGHAVING子句之差別子句之差別

WHEREWHERE子句子句 HAVINGHAVING子句子句

執行順序執行順序 GROUP BYGROUP BY之前之前 GROUP BYGROUP BY之後之後

聚合函數聚合函數 不能使用聚合函數不能使用聚合函數 可以使用可以使用

Page 33: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

Group By Group By 欄位欄位

【【定義定義】】 Group By Group By 可單獨存在,它是將數個欄位組合起來,以做為可單獨存在,它是將數個欄位組合起來,以做為

每次動作的依據。每次動作的依據。

【【語法語法】】

Select Select 欄位欄位11,欄位,欄位22,聚合函數運算,聚合函數運算

From From 資料表資料表

Where Where 過濾條件過濾條件

Group By Group By 欄位欄位11,欄位,欄位22

Page 34: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

[[實例實例1]1]在「選課資料表」中,查詢每一位同學各選幾門科目。在「選課資料表」中,查詢每一位同學各選幾門科目。【【解答解答】】

【【註註】】在在SelectSelect所篩選的所篩選的非聚合函數非聚合函數。。

例如:學號,一定會在例如:學號,一定會在 Group ByGroup By後出現。後出現。

【【查詢結果查詢結果】】

SQLSQL指令指令

SELECT SELECT 學號學號, Count(*) AS , Count(*) AS 選科目數選科目數

FROM FROM 選課資料表選課資料表

GROUP BY GROUP BY 學號學號

Page 35: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

[[實例實例2]2]在「選課資料表」中計算每一位同學所修之科目的平均成績在「選課資料表」中計算每一位同學所修之科目的平均成績【【解答解答】】

【【查詢結果查詢結果】】

SQLSQL指令指令

SELECT SELECT 學號學號, AVG(, AVG(成績成績) AS ) AS 平均成績平均成績

FROM FROM 選課資料表選課資料表

GROUP BY GROUP BY 學號學號

Page 36: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

Having Having 條件式條件式

【【定義定義】】Having Having 條件式是將數個欄位中以有條件的組合。條件式是將數個欄位中以有條件的組合。

它不可以單獨存在。它不可以單獨存在。

【【實例實例11 】】在「選課資料表」中,計算所修之科目的平均成績,大於等在「選課資料表」中,計算所修之科目的平均成績,大於等

於於7070者顯示出來。者顯示出來。【【解答解答】】

【【查詢結果查詢結果】】

SQLSQL指令指令

SELECT SELECT 學號學號, AVG(, AVG(成績成績) AS ) AS 平均成績平均成績

FROM FROM 選課資料表選課資料表

GROUP BY GROUP BY 學號學號

HAVING AVG(HAVING AVG(成績成績)>=70)>=70

Page 37: SQL 的查詢語言 - cc.cust.edu.twcc.cust.edu.tw/~ccchen/doc/db_06.pdf · 查詢的基本語法 【說明】 3.From後面接資料表名稱,它可以接一個以上的資料表。

[[實例實例2]2]在「選課資料表」中,將選修課程在二科及二科以上的學生學號資料列在「選課資料表」中,將選修課程在二科及二科以上的學生學號資料列

出來。出來。【【解答解答】】

【【查詢結果查詢結果】】

SQLSQL指令指令

SELECT SELECT 學號學號, Count(*) AS , Count(*) AS 選修數目選修數目

FROM FROM 選課資料表選課資料表

GROUP BY GROUP BY 學號學號

HAVING COUNT(*)>=2HAVING COUNT(*)>=2