何謂資料庫(Database)?

Download Report

Transcript 何謂資料庫(Database)?

Access第十七單元
結構化查詢語言(一)
授課老師:姜子龍
E-mail:[email protected]
Access第十七單元結構化查詢語言(一)
結構化查詢語言(一)-講授大綱
•關於SQL
•訂定SQL標準的優點
•SQL語言的分類
•Access選取查詢的SQL檢視
•SQL語法所使用的符號
•選取查詢:SELECT陳述式語法
•SELECT陳述式語法—INNER JOIN 運算
•SELECT陳述式語法—LEFT JOIN 及 RIGHT JOIN運算
•SELECT陳述式語法—WHERE子句
•SELECT陳述式語法—建立計算欄位
•SELECT陳述式語法—GROUP BY子句
•SELECT陳述式語法—HAVING子句
•SELECT陳述式語法—ORDER BY子句
•SELECT陳述式語法—子查詢的應用
•SELECT陳述式撰寫考量
1
姜子龍 製作
Access第十七單元結構化查詢語言(一)
關於SQL
•SQL的全名為:Structured Query Language,經常
拼音為"sequel"。
•SQL是套用於關連式資料庫(Relational Database)的
查詢與維護語言。
•SQL的前身為SEQUAL,皆由IBM提出。
•1979 Rational Software,Inc. 發展了一個關連式資料
庫產品,名為 Oracle。
•1981 IBM發表了第一個使用SQL的關連式資料庫
產品: SQL/DS。
2
姜子龍 製作
Access第十七單元結構化查詢語言(一)
關於SQL(續)
•使用SQL的關連式資料庫產品漸多,但在語法上
未能統一,造成百家爭鳴。
•美國國家標準協會(ANSI)及國際標準組織(ISO)體
會到SQL的重要,在1986年公佈了第一個SQL標
準:SQL-86。
•後續的強化與修正版本有:SQL-2(SQL-92)及
SQL-3(SQL-96)。
•SQL Access Group 公佈了SQL的商業標準:
CLI(Common Language Interface)。
•微軟的ODBC(Open Database Connectivity)即支援
此CLI。
3
姜子龍 製作
Access第十七單元結構化查詢語言(一)
訂定SQL標準的優點
•當使用另一套SQL產品時:
–可節省人員再訓練的時間
–應用程式可輕易移植
–應用程式的使用壽命較長
•增加系統間資料的交換性。
4
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SQL語言的分類
•查詢語言(Query Language,QL) — 用於查詢資料庫
中的資料,如:Select fields From tables Where
condition ;。
•資料定義語言(Data Definition Language,DDL) — 用
於定義及維護資料庫中的資料表(包括資料表名
稱、欄位名稱、欄位的資料類型…等),如:
Create table、Create index。
•資料處理語言(Data Manipulation Language,DML) —
用於處理資料庫中的資料,如:Insert、Update、
Delete。
•資料控制語言(Data Control Language,DCL) — 用於
控制資料庫的使用權限及安全程度,如:Grant 、
5
Revoke、Audit。
姜子龍 製作
Access第十七單元結構化查詢語言(一)
Access選取查詢的SQL檢視
•在Access中,可在選取查詢的SQL檢視視窗內使
用查詢指令,以進行資料表內容的查詢。
•初次進入選取查詢的SQL檢視視窗的步驟:
在資料庫視窗中,切換至查詢頁次。
按「新增」圖示
,即出現新增查詢視窗。
雙按設計檢視,即出現顯示資料表視窗。
按選「關閉」鈕,便會離開顯示資料表交談窗。
進入選取查詢視窗。
執行Access視窗工具列中最左邊的 圖示(若未看見可
按列示鈕),即可進入選取查詢的SQL檢視視窗。
6
姜子龍 製作
Access第十七單元結構化查詢語言(一)
Access選取查詢的SQL檢視(續)
•在選取查詢的SQL檢視視窗中輸入完SQL陳述式
後,可按下Access工具列上的執行紐 ,執行該
SQL陳述式。
•離開選取查詢的SQL檢視視窗:
按下選取查詢的SQL檢視視窗右上角的「關閉」鈕。
在訊息對話方塊按「是」鈕,將查詢指令儲存起來。
在另存新檔對話方塊的查詢名稱欄,輸入查詢名稱,
再按「確定」鈕,便可將查詢存檔。
在資料庫視窗中,會多出一個剛設計的查詢物件。
7
姜子龍 製作
Access第十七單元結構化查詢語言(一)
Access選取查詢的SQL檢視(續)






8
姜子龍 製作
Access第十七單元結構化查詢語言(一)
Access選取查詢的SQL檢視(續)






9
姜子龍 製作
Access第十七單元結構化查詢語言(一)
練習用資料表內容
學生
課程
修習
課號
課名
學號
90101 張三
C01
國文
90101 C01
90
90102 王美
C02
英文
90101 C02
88
90103 李四
C03
數學
90102 C01
85
90102 C03
92
90103 C01
91
90104 C03
85
學號
姓名
90105 陳五
課號 成績
10
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SQL語法所使用的符號
•符號說明:
 | (選擇符號):表示選項,當有多種不同選擇項時,
可「 | 」加以區隔。
 中括號(即[與]):通常會與「 | 」一起使用,所括住
的部分表示其中選項為多選一,但也可以省略不選。
 大括號(即{與}):通常會與「 | 」一起使用,所括住
的部分表示其中選項可為零次到任意多次的重複。
 , (逗號):用於分隔意義相同的各個項目。
 … (省略符號) :表示語法中重複的項目,若於本省
略符號前出現逗號,表示各重複項目必須以逗號隔
開。
 大寫字語為陳述式的關鍵字,直接使用,勿需替換。
 中文或小寫字語為需用真實的識別字來替代的部分。
11
姜子龍 製作
Access第十七單元結構化查詢語言(一)
選取查詢:SELECT陳述式語法
•在Microsoft Jet 資料庫引擎所用語法:
SELECT [述語] { * | 資料表名稱.* | [資料表名稱.]
欄位名稱1 [AS 欄位別名1] [, [資料表名稱.]欄位
名稱2 [AS 欄位別名2] [, ...]]}
FROM 資料表運算式1[,資料表運算式2][, ...] [IN 其
他資料庫名稱]
[WHERE 資料錄篩選條件]
[GROUP BY 分類群組]
[HAVING 篩選群組條件]
[ORDER BY 排序條件]
其中SELECT…FROM…是最基本的語法。SELECT子
句的主要作用是決定要挑選出的欄位有哪些。
12
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SELECT陳述式語法(續)
•述語(predicate) —為以下所列述語之一: ALL、
DISTINCT、DISTINCTROW 或 TOP。可用來限制
傳回之資料錄的數量。
•* — 從特定的單個或多個資料表中選取全部的欄
位。
•資料表名稱(table) —欲選取欄位所屬之資料表(或
查詢)的名稱。
•欄位名稱(field) —欲選取之欄位的名稱。如果要
擷取之資料包含一個以上的欄位,則將它們依序
訂出。
•欄位別名(alias) — 作為欄位的另一個名稱,以代
替在資料表中原有的欄名。
13
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SELECT陳述式語法(續)
•資料表運算式(tabexpression)— 要選取之資料來自
於單個或多個資料表或查詢的名稱,或由 INNER
JOIN、LEFT JOIN 或 RIGHT JOIN 合成的結果。
•其他資料庫名稱(externaldatabase) — 資料表運算
式中所述資料表(或查詢)所在之資料庫的名稱(當
這些資料表不存在於目前的資料庫時使用)。
14
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SELECT陳述式語法(續)
•述語(predicate):ALL、DISTINCT、
DISTINCTROW 或 TOP。
ALL 如果您沒有包含任何一個述語,此為預設值。將
選取與 SQL 陳述式中條件相吻合的所有資料錄。下
列兩個範例是相等的,並且皆從課程資料表中傳回所
有的資料錄:
–SA01:
 SELECT ALL *
FROM 課程;
–SA02:
 SELECT *
FROM 課程;
15
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SELECT陳述式語法(續)
DISTINCT 略去選取欄位之中包含重複資料的資料錄。
使用本述語時,會使查詢結果之中,列在 SELECT 陳
述式中的每個欄位值的組合必須是唯一的。 例如,
在修習資料表之中有一些同學會同時選修某們課,下
列 SQL 陳述式會傳回哪些課號已被同學選修:
–SD01:
 SELECT DISTINCT 課號
FROM 修習;
如果您省略 DISTINCT,此查詢將傳回許多重複的值。
如果 SELECT 子句包含一個以上的欄位,對一個要包
含在結果中的資料錄,所有欄位值的組合必須是唯一
的。
加上 DISTINCT 述語的查詢,其輸出是不能更新的,
也不會反應其他使用者隨後所做的變更。
16
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SELECT陳述式語法(續)
DISTINCTROW 略去選取欄位之中包含重複資料的資
料錄,但該重複資料若來自不同資料錄,則予保留。
例如,您可以在客戶編號欄位建立一個連結客戶資料
表及訂單資料表的查詢。 客戶資料表沒有重複的客
戶編號,但有重複的客戶名稱。 下列 SQL 陳述式顯
示如何使用 DISTINCTROW 產生客戶清單,該清單將
列出至少曾下過一筆訂單的客戶:
 SELECT DISTINCTROW CustomerName
FROM Customers INNER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID;
17
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SELECT陳述式語法(續)
TOP n [PERCENT] 傳回一些特定數目的資料錄,且這
些資料錄將落在由 ORDER BY 子句指定的前面或後
面的範圍之中。 假設要找出修習課號C01,成績排名
在前面 2 名的學號:
–ST01:
 SELECT TOP 2 學號 ,成績
FROM 修習
WHERE 課號 = "C01"
ORDER BY 成績 DESC;
TOP 述語不在相同值間作選擇。 在前一個範例中,
如果第 2 及第 3 的分數是相同的,查詢將傳回 3 筆資
料錄。
18
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SELECT陳述式語法(續)
亦可使用 PERCENT 保留字來傳回特定資料錄的百分
比,且這些資料錄將落在由 ORDER BY 子句指定的
前面或後面範圍之中。
假設要找出修習課號C01,成績排名在後面百分之10
的學號:
–ST02:
 SELECT TOP 10 PERCENT 學號 ,成績
FROM 修習
WHERE 課號 = "C01"
ORDER BY 成績 ASC;
ASC 述語指定傳回後面的值。
接在 TOP 後方的值必須是一個沒有正負值的整數。
19
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SELECT陳述式語法—INNER JOIN 運算
•INNER JOIN 運算:
–組合兩個資料表中的資料錄,使在共同的欄位之中有
符合比較條件的值。
–可以在任何的 FROM 子句中使用 INNER JOIN 運算,
這是最基本的連接類型。
•語法:
–FROM 資料表名稱1 INNER JOIN 資料表名稱2 ON資
料表名稱1.欄位名稱1 比較運算子 資料表名稱2.欄位
名稱2
資料表名稱1,資料表名稱2 - 被組合之資料表的名稱。
欄位名稱1,欄位名稱2 - 被連接之欄位的名稱, 如果不
是數值,這些欄位必須屬於相同的資料類型,並且要
包含相同類型的資料,但是名稱不需要相同。
比較運算子(compopr) - "=", "<", ">", "<=", ">=" 或 "<>"。
20
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SELECT陳述式語法—INNER JOIN 運算(續)
•注意事項:
–如果想連接包含備忘或 OLE物件資料類型的欄位,將
會發生錯誤。
–可以連接任何兩個相同類型的數值欄。例如,您可以
連接自動編號及 Long 的欄位,因為它們是相同的類
型。但無法結合 Single 和 Double 類型的欄位。
–可以使用下列語法,在一個 JOIN 陳述式中連結多個
ON 子句:
 SELECT 欄位名稱
FROM 資料表名稱1 INNER JOIN 資料表名稱2
ON 資料表名稱1.欄位名稱1 比較運算子 資料表
名稱2.欄位名稱1 [AND
ON 資料表名稱1.欄位名稱2 比較運算子 資料表
名稱2.欄位名稱2 | OR
ON 資料表名稱1.欄位名稱3 比較運算子 資料表
名稱2.欄位名稱3 ]
21
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SELECT陳述式語法—INNER JOIN 運算(續)
•注意事項(續):
–亦可以使用下列語法,寫為巢狀式 JOIN 陳述式:
 SELECT 欄位名稱
FROM 資料表名稱1 INNER JOIN
(資料表名稱2 INNER JOIN [( ]資料表名稱3
[INNER JOIN [( ]資料表名稱x [INNER JOIN ...)]
ON 資料表名稱3.欄位名稱3 比較運算子 資料表
名稱x.欄位名稱x)]
ON 資料表名稱2.欄位名稱2 比較運算子 資料表
名稱3.欄位名稱3)
ON 資料表名稱1.欄位名稱1 比較運算子 資料表
名稱2.欄位名稱2
–在一個 INNER JOIN 之中,可以寫巢狀式的 LEFT
JOIN 或 RIGHT JOIN,但是在一個 LEFT JOIN 或一個
RIGHT JOIN 之中不能寫巢狀式的 INNER JOIN。
22
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SELECT陳述式語法—INNER JOIN 運算(續)
•INNER JOIN 運算範例:
–IJ01:
 SELECT 學生.學號, 學生.姓名, 修習.課號
FROM 學生 INNER JOIN 修習 ON 學生.學號 = 修習.學號;
23
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SELECT陳述式語法—INNER JOIN 運算(續)
•INNER JOIN 運算範例:
–IJ02:(錯誤用例)
 SELECT 學生.學號, 學生.姓名, 修習.課號
FROM 學生 INNER JOIN 修習 ON 學生.學號 > 修習.學號;
24
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SELECT陳述式語法—INNER JOIN 運算(續)
•INNER JOIN 運算範例:
–IJ03:
 SELECT 學生.學號, 學生.姓名, 課程.課號, 課程.課名
FROM 學生 INNER JOIN (課程 INNER JOIN 修習 ON 課
程.課號 = 修習.課號) ON 學生.學號 = 修習.學號;
25
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SELECT陳述式語法
—LEFT JOIN 及 RIGHT JOIN運算
•LEFT JOIN 及 RIGHT JOIN運算:
–使用在任何 FROM 子句中之後,組合來源資料表中的
資料錄。
–使用 LEFT JOIN 建立左邊外部連接。將包含了第一個
(左邊)資料表中的全部資料錄,以及只包括那些連接欄
位符合比較條件的第二個 (右邊) 資料表中的資料錄。
–使用 RIGHT JOIN 建立右邊外部連接。將包含了第二個
(右邊)資料表中的全部資料錄,以及只包括那些連接欄
位符合比較條件的第一個 (左邊) 資料表中的資料錄。
26
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SELECT陳述式語法
—LEFT JOIN 及 RIGHT JOIN運算
•語法:
–FROM 資料表名稱1 [ LEFT | RIGHT ] JOIN 資料表名稱2
ON 資料表名稱1.欄位名稱1 比較運算子 資料表名稱2.
欄位名稱2
資料表名稱1,資料表名稱2 - 被組合之資料表的名稱。
欄位名稱1,欄位名稱2 - 被連接之欄位的名稱,且這些欄
位必須有相同的資料類型,並包含相同類型的資料,但
名稱不需要相同。
比較運算子(compopr): "=", "<", ">", "<=", ">=" 或 "<>"。
27
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SELECT陳述式語法
—LEFT JOIN 及 RIGHT JOIN運算(續)
•應用說明:
–有部門(左邊)及員工(右邊)兩個資料表。
–可以使用 LEFT JOIN 選取所有的部門,包含了沒有分配
到員工的部門。
–可以使用 RIGHT JOIN 選取所有的員工,包含了沒有分
配到部門的員工。
•LEFT JOIN 及 RIGHT JOIN運算範例:
LJ01:
 SELECT 學生.學號, 學生.姓名, 修習.課號
FROM 學生 LEFT JOIN 修習 ON 學生.學號 = 修習.學號;
28
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SELECT陳述式語法
—LEFT JOIN 及 RIGHT JOIN運算(續)
•LEFT JOIN 及 RIGHT JOIN運算範例:
RJ01:
 SELECT 學生.學號, 學生.姓名, 修習.課號
FROM 學生 RIGHT JOIN 修習 ON 學生.學號 = 修習.學號;
RJ02:
 SELECT修習.學號, 學生.姓名, 修習.課號
FROM 學生 RIGHT JOIN 修習 ON 學生.學號 = 修習.學號;
29
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SELECT陳述式語法—WHERE子句
•WHERE子句:
–用於建立篩選資料錄的條件。
•語法:
–WHERE 資料錄篩選條件
•邏輯運算子:
– 用於聯集、交集或否定篩選資料錄的條件。
–例如:WHERE (課號 = "C01") OR (課號 = "C02")。
– 常用的邏輯運算子:
運算子
AND
OR
NOT
意義
且
或
非
30
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SELECT陳述式語法—WHERE子句(續)
•字串篩選條件:
–字串值用「"」括住。
–當知道篩選條件的整個字串時,用 = 運算子,如:課
號 = "C01"。
–當知道篩選條件的部分字串時,用 LIKE 運算子。
LIKE運算子可用一些特殊符號來描述字串的匹配條件:
特殊符號
* 或 %
? 或 _
#
[字元表]
[!字元表]
意義
表示任何長度的字串,包括空字串在內
表示一個中文字或任意一個字元
表示一個數字字元
連字符號,表示數字及大小寫字元的起止範圍
任何在字元表中的單一字元,如,[a-zA-Z0-9]
任何不在字元表中的單一字元
31
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SELECT陳述式語法—WHERE子句(續)
•字串篩選條件(續):
–使用 In() 函數,用來判斷輸入值是否等於表列中的任
一個值,例如:In(“郵寄”,“掛號”,“自取”)。
–使用 Left、Right 或 Mid 的函數,這些函數的語法是:
Left(字串運算式,n) 、Right(字串運算式,n) 、 Mid(字
串運算式,起算位置,n)。
–可直接以Null來判斷欄位值是否為Null。
–SF01:
 SELECT 學生.學號, 姓名, 課號
FROM 學生,修習
WHERE (學生.學號 = 修習.學號) AND (課號 IN
("C01","C03"));
–SF02:
 SELECT 學生.學號, 姓名, 課號
FROM 學生, 修習
WHERE (學生.學號 = 修習.學號) AND (課號 LIKE "C0[13]");
32
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SELECT陳述式語法—WHERE子句(續)
•數字篩選條件:
–使用比較運算子。
比較運算子
意義
範例
<
<=
小於
小於或等於
< 200
<= 200
>
>=
=
<>
大於
大於或等於
等於
不等於
> 200
>= 200
= 200
<> 200
Between and
介於兩個值之間
Between 1 and 9
33
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SELECT陳述式語法—WHERE子句(續)
•數字篩選條件(續):
–NF01:
 SELECT 學生.學號,學生.姓名,課程.課名,成績
FROM 學生,課程,修習
WHERE (學生.學號 = 修習.學號) AND (課程.課號 = 修
習.課號) AND (成績 >= 90);
34
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SELECT陳述式語法—WHERE子句(續)
•日期篩選條件:
–日期值用「#」括住。
–使用比較運算子。
–使用 Month、Year、Day等的函數。
比較運算子
意義
<
小於
範例
< #91/01/23#
<=
>
>=
=
小於或等於
大於
大於或等於
等於
<= #91/01/23#
> #91/01/23#
>= #91/01/23#
= #91/01/23#
<>
Between
and
不等於
<> #91/01/23#
介於兩個值之間 Between #91/01/01# and
#91/01/31#
35
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SELECT陳述式語法—建立計算欄位
•建立計算欄位:
–使用運算式建立一個計算資料的公式,組成的成員有
下列四類:
Int
函數
( [價格]
識別字
算術運算子
+
*
/
\
MOD
*
0.4)
運算子
值
意義
加
減
乘
除
整數除法
取餘數
36
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SELECT陳述式語法—建立計算欄位(續)
•數字篩選條件(續):
–CF01:
 SELECT 學生.姓名,課程.課名,成績*2 AS實得分數
FROM 學生,課程,修習
WHERE (學生.學號 = 修習.學號) AND (課程.課號 = 修
習.課號) ;
37
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SELECT陳述式語法—GROUP BY子句
•GROUP BY 子句:
–用於建立分類的群組。
–與SQL「聚合函數」或「總和函式」搭配使用。
–將挑選出的資料做分組計算的查詢,稱為「群組式查
詢」。
– 在「群組式查詢」中,所有的計算欄位都必須以群組
函式來運算。
•語法:
–GROUP BY 群組欄位1 [,群組欄位2 [,…] ]
–群組欄位的數目最多10個。
38
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SELECT陳述式語法—GROUP BY子句(續)
•GROUP BY 子句(續):
– 在「群組式查詢」中,所有的計算欄位都必須以群組
函式來運算。
函數名稱
意義
語法
Avg
計算平均值
Avg(欄位名稱)
Count
所得資料錄筆數
Count(欄位名稱)
First
Last
Max
Min
Sum
StDev
Var
第一筆資料錄的欄位值
First(欄位名稱)
最後一筆資料錄的欄位值 Last(欄位名稱)
一欄位的最大值值
Max(欄位名稱)
一欄位的最小值值
一欄位值的總計
統計資料樣本之標準差
統計資料樣本之變異數
Min(欄位名稱)
Sum(欄位名稱)
StDev(欄位名稱)
Var(欄位名稱)
39
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SELECT陳述式語法—GROUP BY子句(續)
•GROUP BY 子句((續):
–GF01:
 SELECT 學生.姓名,Max(成績) AS 最高分數
FROM 學生,修習
WHERE (學生.學號 = 修習.學號)
GROUP BY 學生.姓名;
–GF02:
 SELECT 修習.學號, 學生.姓名,Max(修習.成績) AS 最高分數
FROM 學生 RIGHT JOIN 修習 ON 學生.學號=修習.學號
GROUP BY 修習.學號,學生.姓名;
40
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SELECT陳述式語法—HAVING子句
•HAVING子句:
–用於篩選經過分類群組(GROUP BY)的資料錄。
•語法:
–HAVING 篩選群組條件
–篩選群組條件的建立方式與WHERE子句相同。
41
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SELECT陳述式語法—HAVING子句(續)
•HAVING子句((續):
–GF03:
 SELECT 修習.學號, 學生.姓名,Max(修習.成績) AS 最高分數
FROM 學生 RIGHT JOIN 修習 ON 學生.學號=修習.學號
GROUP BY 修習.學號,學生.姓名
HAVING Max(修習.成績) >= 90;
42
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SELECT陳述式語法—ORDER BY子句
•ORDER BY子句:
–將查得的資料錄根據指定的欄位進行排序。
•語法:
–ORDER BY 排序欄位1 [ASC | DESC]
[,排序欄位2 [ASC | DESC] [,…] ]
–ASC 表示遞增排序;DESC 表示遞減排序。預設為
ASC。
43
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SELECT陳述式語法—ORDER BY子句(續)
•ORDER BY子句((續):
–OD01:
 SELECT 修習.學號, 學生.姓名,Max(成績) AS 最高分數
FROM 學生 RIGHT JOIN 修習 ON 學生.學號=修習.學號
GROUP BY 修習.學號,學生.姓名
HAVING Max(成績) >= 90
ORDER BY Max(成績) DESC;
44
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SELECT陳述式語法—子查詢的應用
•子查詢的應用:
–在WHERE 子句中,除了可以利用篩選條件進行查詢
外,還可利用另外的SELECT陳述式,作為查詢的條
件。
–子查詢的查詢結果僅能傳回一筆資料錄。
•語法:
–WHERE 運算元 運算子 (SELECT陳述式 )
[邏輯運算子 運算元 運算子 (SELECT陳述式)
[邏輯運算子 …] ]
45
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SELECT陳述式語法—子查詢的應用(續)
•子查詢的應用(續):
–OD01:
 SELECT 學生.姓名
FROM 學生
WHERE 學號 =
(SELECT 學號
FROM 修習
WHERE 成績 = 92) ;
46
姜子龍 製作
Access第十七單元結構化查詢語言(一)
SELECT陳述式撰寫考量
•哪些資料表欄位需要顯示?哪些計算欄位需要
顯示?哪些群聚函式需要顯示?–放在SELECT子
句後面。若有多個,用“,”隔開;若欄位名稱
無法唯一識別來自哪一資料表,加上資料表名稱,
其後加上“.”;若顯示之欄位名稱會混淆,加
上 AS 及<別名>。
•相關欄位資料來自哪些資料表?–放在FROM子
句後面。若有多個,用“,”隔開。
•是否有查詢條件?–放在WHERE子句後面。若有
多個,用“AND “或”OR”隔開。
•哪些欄位作為資料分組的根據?–放在GROUP
BY 子句後面。若有多個,用“.“隔開。
•哪些相關欄位需要排序?–放在ORDER BY子句
47
後面。若有多個,用“,”隔開。
姜子龍 製作
Access第十七單元結構化查詢語言(一)
練習結構化查詢語言
•使用練習用資料表的內容,試以SQL撰寫下列選取
查詢:
選取一資料表中所有資料錄的所有欄位內容
選取一資料表中所有資料錄的某些欄位內容
選取一資料表中所有資料錄的某些欄位內容,並依第一
個欄位的內容由大到小排序
選取一資料表中所有資料錄的某一欄位內容,但需去除
重複內容
選取一資料表中部份資料錄(條件自訂)的某些欄位內容
計算一資料表中合乎某條件(條件自訂)之部份資料錄的
筆數
計算一資料表中某數字類型欄位在所有資料錄的平均值,
並幫其取一別名
選取兩資料表中的某些欄位內容,並以關聯欄位進行連
結
48
姜子龍 製作
Access第十七單元結構化查詢語言(一)
問題討論‧ ‧ ‧
﹋謝謝聆聽﹌
49
姜子龍 製作