MySQL資料庫教學

Download Report

Transcript MySQL資料庫教學

SQL-99: 綱要定義、基本限制與查詢 (2)
國立聯合大學 資訊管理學系
陳士杰老師
▊ Outlines






Database Languages
SQL資料型態
Data Definition Language, DDL (資料定義語言)
Data Manipulation Language, DML (資料處理語言)
Data Query Language, DQL (資料查詢語言)
Data Control Language, DCL (資料控制語言)
(see Chapter 8, Chapter 9; 實作講義Ch. 5~Ch. 7)
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)
▊ Data Query Language, DQL (資料查詢語言)

建立好資料表及其所有的資料後,可以使用DQL來查詢資料。

DQL只有一個指令– Select,用以查詢資料庫的相關資料,語法如下:
SELECT <attribute list>
//指定查詢時,所欲輸出的欄位(屬性)
FROM <table list>
//指定查詢時,所會用到的表格有哪些
WHERE <condition>
//指定查詢的條件
GROUP BY <grouping attributes>
//將SELECT的結果依照某屬性欄位加以分群
HAVING <grouping condition>
//GROUP BY的限制條件,必須配合GROUP BY使用
ORDER BY <column name> ASC/DESC //依照某欄位值作遞增(ASE)或遞減(DESC)排列 (預設為ASC)

SQL查詢語言由上述六個子句所組成,只有Select和From是必要的。

執行順序:

FROM→WHERE →GROUP BY →HAVING →SELECT →ORDER BY
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

使用說明:



SELECT * 表示選擇FROM中關聯表格的所有屬性
查詢中若沒有WHERE,表示沒有限制條件,即: 將FROM所指定之表格的
所有資料,根據SELECT所要求的欄位全部列出。
若有多個表格中的欄位名稱重覆,可改寫成 “table_name . attribute_name”
加以區分


如:假設A表格與B表格中,皆有一個名為ID的欄位,且在資料查詢時
此兩表格皆同時用上,為了怕混肴,則以 A.ID 與 B.ID 來區分。
在做資料查詢時,可將使用到的表格名稱或是欄位名稱另取別名:

“表格名稱 AS 別名” 或是 “表格名稱 別名”

Ex: Project_supp_Component as PSC 或 Project_supp_Component PSC

亦可對欄位取別名
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)
範例題組1 (一般查詢: 無條件、有條件)

一般查詢可分成無條件查詢與有條件查詢

依照slide 9的四個表格,用SQL回答下列問題:

列出個別專案的資料。(無條件)
Sol:

列出所有重量在20以上,且不為黑色的零件名稱、顏色、重量。(有條件)
Sol:
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)
SQL語法的運算子

SQL語法中可能會用到的運算子:
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)
範例題組2 (排序查詢、分組查詢、聚合函數)

在從事資料查詢時,除了可以在where子句加上所需要之限
制條件外,尚可將查詢的結果做一些加工,如:

根據某欄位,將查詢結果做排序

根據某欄位,將查詢結果做分組

根據某欄位,將查詢結果利用一些聚合函數做運算
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

依照slide 9的四個表格,用SQL回答下列問題:

依照數量由小到大列出供應商S1所參與之專案名稱、零件名稱,以
及數量。 (排序)
Sol:
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

由專案供應零件中,列出零件代號並統計各零件之總數量。(分組 + 聚合)
Sol:

由專案供應零件中,總數超過1000之零件的總數量並列出其代號。(聚合)
Sol:
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)
SQL語法的函數

聚合函數:

COUNT(attribute_name): 計算屬性值個數

SUM(attribute_name): 計算屬性中數值的總合

AVG(attribute_name): 計算屬性中數值的平均

MAX(attribute_name): 找出屬性中數值的最大值

MIN(attribute_name): 找出屬性中數值的最小值
(其它類型的SQL函數請參考網路講義)
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)


聚合函數中COUNT的用法:

COUNT(*): 計算有幾筆記錄

COUNT(attribute_name): 此屬性有幾筆非空值

COUNT(DISTINCT attribute_name): 此屬性有幾筆不同的非空值
例: 表格Employee共有1000筆記錄,其中有900人分別屬於10個
不同的部門,100人無部門。

SELECT COUNT(*) FROM Employee;  共 1000 筆

SELECT COUNT(Dept) FROM Employee;  共 900 筆

SELECT COUNT(Eno) FROM Employee;  共 1000 筆

SELECT COUNT(DISTINCT Dept) FROM Employee;  共 10 筆
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

依照slide 9的四個表格,用SQL回答下列問題:

列出所有供應商 “大勝” 有供應的零件中,重量最重之重量為何。 (聚合)
Sol:

列出位於高雄的供應商數目。 (聚合)
Sol:
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)
範例題組3 (巢狀查詢,或稱子查詢)

何謂子查詢(Subquery)?

在一個 SQL 語法的條件子句中,放入另一個 SQL 語法

當我們在WHERE子句或HAVING等條件子句中,插入另一個 SQL 語句時,我們
就有一個子查詢 (Subquery) 的架構。

語法:
SELECT …
FROM <表格>
WHERE <欄位名或欄位運算式> <比較運算子>
( SELECT …
FROM <表格名>
WHERE <條件> );
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

根據子查詢語句所回傳之記錄值狀況,區分成:


單一記錄值子查詢

此類子查詢只傳回單一記錄值 (如:李四的學生基本資料)

所有的邏輯比較運算子 (如:>,=,<,…等) 皆可使用
多記錄值子查詢

此類子查詢傳回的是一組記錄值 (如:張三、李四、王五的學生基本資料)

須使用多值比較運算子
SELECT …
FROM <表格>
WHERE <欄位名或欄位運算式> <比較運算子>
( SELECT …
FROM <表格名>
WHERE <條件> );
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)
單一記錄值子查詢

此類子查詢只傳回單一記錄值,因此所有邏輯運算子 (如
>,=,< 等等) 都可以用。
邏輯運算子
意義與說明
=
相等。
!= OR <>
不等於。
<
小於。
>
大於。
>=
大於或等於。
<=
小於或等於。
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

依照slide 9的四個表格,用SQL回答下列問題:

列出供應商 “大勝” 所供應之零件總數量
Sol:
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)
多記錄值子查詢


此類子查詢傳回不是單一值,而是某特定欄位的所有資料。這種查詢
必須用多值比較運算子與主查詢相連繫。
[Not] IN:



[Not] ALL, [Not] ANY:用來做數值的比較



比較IN之前的數值,是否和IN後面集合中任一數值相同,及判別是否在此
集合中。
NOT IN則為IN的反義
(需搭配邏輯運算子)
ALL是將某值與集合中的所有內容值做比較
ANY是指與集合中任何值做比較
[Not] EXISTS:




若子查詢有結果存在時,則列出父查詢的查詢結果 (無關子查詢)
找出存在於子查詢結果表格中的資料 (相關子查詢)
所有變數中只要有一個為true,EXISTS即成立
NOT EXISTS為EXISTS的反義詞,所有變數皆必須為FALSE,NOT EXISTS才成立
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)
注意
單一記錄子查詢所使用的邏輯運算子,和多記錄子查詢所使
用的多值比較運算子IN, ANY, ALL (EXISTS除外),需在運算子前、
後分別指定父查詢的某特定欄位與子查詢傳回結果的某特
定欄位,且子查詢傳回欄位的個數及資料型態必須要與父查
詢匹配,才能使該運算子正常工作。
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

依照slide 9的四個表格,用SQL回答下列問題:

列出所有有參與J2專案的供應商名稱。
Sol:
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

列出所有沒有參與J2專案的供應商名稱。
Sol:
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

列出所有有參與J2專案、且位於台南的供應商名稱。
Sol:
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

列出所有有供應黑色零件的供應商代號與名稱。
Sol:
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

列出所有有供應黑色零件的供應商代號與名稱,且重覆資料只列
出一筆。
Sol:

DISTINCT:表示相同的資料只列出一筆。
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

列出所有沒有供
應黑色零件的供
應商代號與名稱
Sol: (第二個查詢結果重
覆資料只出現一次)
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

當Where子句後的子查詢有結果存在 (為True) 時,列出父查詢工作之
結果 (即:所有供應商的名稱與編號)
Sol:
此查詢工作同義於下列查詢:
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)
無關子查詢 vs. 相關子查詢

相關子查詢是指WHERE 條件中的子查詢,有引用主查詢的查詢資料。反
之我們稱之無關子查詢。


前面所有的子查詢範例皆為無關子查詢
依照slide 9的四個表格,用SQL回答下列問題:

列出有支援專案 J3所需零件 的所有供應商代號與名稱。
Sol:

無關子查詢中,其父查詢與子查詢可視為兩個獨立的查詢工作,這兩
個查詢工作之結果透過比較運算子加以結合。
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

列出所有沒有銷售黑色零件的供應商代號與名稱。
Sol 1:
Sol 2:
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

列出所有供應零件P1的供應商名稱。
Sol 1:
Sol 2:
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

上一查詢工作的Sol 2,若沒有加上 “DISTINCT” 會產生什麼結果?
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)
範例題組4 (其它比較運算子)
運算或函式
意義與說明
IS NULL
檢查欄位的值是否為 NULL。 當一個欄位處於沒有儲存著任何值
的狀態時,就稱為儲存著 NULL 值。
IS NOT NULL
檢查欄位的值是否不為 NULL。
BETWEEN A AND B
指定一個介於 A 與 B 之間的範圍。
IN (Value1,Value2....)
檢查是否符合列舉項目的範圍。
NOT IN
(Value1,Value2......)
檢查是否不在列舉項目的範圍。

LIKE:利用萬用字元(%及_)做相似字串的比對

百分符號 % 表示0~多個任意字元

底線符號 _ 表示單一個任意字元

例:%大_ _  在 “大” 字前可有任意個字元; 在 “大” 字後為恰有兩個字元
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

找出所在城市為未知的供應商名稱 (假設有一個供應商 “大聯合工
坊”,其代號為 “S5”,其所在城市未知)
Sol:
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

找出名稱的第一個
字為 ‘大’ 的供應
商之名稱與代號
Sol:
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)
▊ Data Definition Language, DDL (資料定義語言) - - (2)

DDL主要有CREATE, DROP, ALTER三個指令,並可針對以下三個物件進行操作:

資料庫 (database)

表格 (Table)

觀點 (View)
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)
何謂 View (觀點、視觀)?
父母
男/女朋友
老闆
男女
朋友
個性
姓名
工作
經驗
個性
虛擬表格
學生資料庫
成績
興趣
…
…
…
…
…
…
實際表格
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)
…
…
修習
課程
…
電話
…
住址
…
姓名
成績
男女
朋友
…
男女
朋友
修習
課程
…
…
興趣
…
電話
…
…
住址
…
…
姓名
…
…
工作
經驗
…
成績
…
修習
課程
…
姓名
建立、刪除觀點 (View)

觀點 (View):

不以實體表格的形式存在,可視為一個虛擬表格

其內容是以SELECT指令的執行結果構成,所以其定義方式正是以
SELECT為基礎

在MySQL中,

可使用SQL標準語法 (即:CREATE VIEW) 來建構 view。

利用show tables,可以看到所建立出來的view和其它的表格是放在一起
的,就像是一個真正的表格一樣,只是它是屬於虛擬表格。

正是因為它是虛擬表格,所以不能使用DROP TABLE來刪除它!! 可使用
SQL標準語法的DROP VIEW來刪除一個view。
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

CREATE VIEW: 建立一個新的觀點

指令:

CREATE VIEW <view name> AS
SELECT…
FROM…
WHERE…
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

例:

為名稱的第一個字為
‘大’ 的所有供應商之
名稱與代號建立View,
其View的名稱為
“Supplier_Da”。

同時,請對此View做資
料查詢。
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)

DROP VIEW: 刪除一個觀點
DROP VIEW <view name>



例: DROP VIEW Supplier_Da;
View的優點:

可提供邏輯資料獨立性 (Logical Data Independence)

隱藏不需要或具私密性的資料

同一關聯可建立多種不同的觀點,讓使用者以不同的角度看同一份
資料。
View的缺點:

觀點的更新(Update)有諸多限制,無法與關聯提供相同的功能。
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)
▊ Data Control Language, DCL (資料控制語言)

此語言主要從事資料庫的權限控管,包含Grant, Revoke, Alter
Password…等指令。

Grant:增加資料庫的權限內容。
GRANT <authority> ON <object> TO <users>


例:

GRANT Select ON EMPLOYEE(FName,LName) TO PUBLIC;

GRANT Delete ON EMPLOYEE TO Jacy;
Revoke: 取消某使用者之權限。
REVOKE <authority> ON <object> FROM <users>

例:

REVOKE Delete ON EMPLOYEE FROM Jacy;
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)
在MySQL增加資料庫使用者

在mysql中我們使用grant敘述,來設定新使用者並給予其相應之權限。
grant privileges
on what
to user identified by “密碼”

說明:


Privleges: 設定權限等級給新使用者。可分成 “使用者層級權限” 與 “管理者
層級權限”
What: 設定新使用者所能使用到的資料庫名稱,及相關之資料表格


User:設定新的使用者,包括使用者名稱與主機名稱。如:jacy@localhost


*.*: 第一個 * 可指定某一個資料庫名稱,第二個 * 可指定該資料庫之下的某一個
資料表名稱。若都是用 *,則表示可使用所有資料庫的所有資料表。
@符號之前是新使用者名稱,@之後是所在的主機
密碼: 指定使用者所用的密碼。如果新增的使用者沒有指定(identified)密碼,這
代表該使用者沒有密碼。
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)
使用者層級權限
管理者層級權限
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)
在MySQL取消使用者權限與移除使用者

要取消某個使用者的權限,可用revoke敘述。
revoke priviledges
on what
from user

例:使用revoke來取消lulu在資料庫主機localhost的所有MySQL存取權限。
revoke all on *.* from lulu@localhost

revoke敘述只移除權限而非移除使用者,該使用者的項目仍存於user資料
表中,所以使用者依舊可以連到伺服器上。

要完整的移除使用者,必須使用delete指令明確的由user資料表上,將使用
者紀錄刪除。

在MySQL資料庫系統中,在上述delete指令移除使用者後,需使用flush
privileges來更新MySQL資料庫的權限內容。
國立聯合大學 資訊管理學系
資料庫系統課程 (陳士杰)