第六章 結構化查詢語言 SQL( 一 ) 資料庫系統理論與 實務

Preview:

DESCRIPTION

第六章 結構化查詢語言 SQL( 一 ) 資料庫系統理論與 實務. 本章內容. 6-1 簡介 6-2 資料定義語言 (DDL) 定義 「 綱要 」 (Schema) 定義 「 資料表 」 (Tables) 6-3 資料操作語言 (DML) 新增操作 (Inert Operation) 刪除操作 (Delete Operation) 更新操作 (Update Operation) 查詢操作 (Select Operation). 各種系統之基本邏輯單位 (1/4). 檔案系統 (File System) 檔案 (File) 欄位 (Fields) - PowerPoint PPT Presentation

Citation preview

第六章 結構化查詢語言SQL( 一 )

資料庫系統理論與實務

6-1 簡介 6-2資料定義語言(DDL)

◦ 定義「綱要」(Schema)◦ 定義「資料表」(Tables)

6-3資料操作語言(DML)◦ 新增操作(Inert Operation)◦ 刪除操作(Delete Operation)◦ 更新操作(Update Operation)◦ 查詢操作(Select Operation)

本章內容

檔案系統 (File System)◦ 檔案 (File)

欄位 (Fields) 紀錄 (Record)

關聯式資料模型 (Relational Data Model) 關聯式資料庫管理系統 (RDBMS) 物件導向之類別圖 (UML - Class Diagram)

各種系統之基本邏輯單位 (1/4)

檔案系統 (File System) 關聯式資料模型 (Relational Data Model)

◦ 關聯 (Relation) 屬性 (Attribute) 值組 (Tuple)

關聯式資料庫管理系統 (RDBMS) 物件導向之類別圖 (UML - Class Diagram)

各種系統之基本邏輯單位 (2/4)

檔案系統 (File System) 關聯式資料模型 (Relational Data Model) 關聯式資料庫管理系統 (RDBMS)

◦ 資料表 (Table) 行 (Column) 列 (Row)

物件導向之類別圖 (UML - Class Diagram)

各種系統之基本邏輯單位 (3/4)

檔案系統 (File System) 關聯式資料模型 (Relational Data Model) 關聯式資料庫管理系統 (RDBMS) 物件導向之類別圖 (UML - Class Diagram)

◦ 類別 (Class) 屬性 (Attribute) 物件 (Object) / 實例 (Instance)

各種系統之基本邏輯單位 (4/4)

檔案系統(File System)

關聯式資料模型(Relational Data

Model)

關聯式資料庫管理系統(RDBMS)

物件導向之類別圖(UML - Class Diagram)

檔案 (File) 關聯 (Relation) 資料表 (Table) 類別 (Class)

欄位 (Fields) 屬性 (Attribute) 行 (Column) 屬性 (Attribute)

紀錄 (Record) 值組 (Tuple) 列 (Row)物件 (Object) / 實例 (Instance)

相關名詞比較

表一:相關名詞比較

資料庫 (Databases)◦ 『綱要』 (Schema)

資料表 (Tables) 檢視表 (Views) 預存程序 (Stored Procedures) 函數 (Functions) 觸發器 (Triggers) 定義域 (Domains) 限制 (Constraints) 其他

資料庫管理系統的相關物件

資料庫管理系統的相關物件RDBMS

Database

Schema

TablesViewsStored proceduresTriggersFunctionsDomainsConstraints

Schema

TablesViewsStored proceduresTriggersFunctionsDomainsConstraints

Database

Schema

TablesViewsStored proceduresTriggersFunctionsDomainsConstraints

Schema

TablesViewsStored proceduresTriggersFunctionsDomainsConstraints

圖 6-1 資料庫管理系統的結構

『資料表』 (Tables)◦ 實際儲存資料內容的地方 ◦ 以二維的方形表格來表達

『檢視表』 (Views)◦ 也稱為『虛擬資料表』 (Virtual Tables)◦ 『檢視表』和『資料表』非常類似◦ 檢視表本身並不儲存任何的資料內容◦ 查詢是自最下層的資料表,或是經由其他檢視表再自下層的資料表所取得的資料

Table 與 View

View 與 Table 的關係圖

W X

Z

Y

B C D EAtables

viewsJoin

Join

Join

Join

圖 6-2 View 與 Table 的關係圖

檢視表 W ,是源自於單一個資料表 A 檢視表 X ,是源自於兩個 ( 或更多 ) 資料表 B與 C 的『合併』 (Join)處理

檢視表 Y ,直接來源是兩個 ( 或更多 ) 檢視表 W 和 X

檢視表 Z ,它的直接來源是合併一個 ( 或更多 ) 檢視表和兩個 ( 或更多 ) 資料表後

View 的實際範例

女業務 男業務

男業務的訂單資料

Views

員工 訂單 客戶tables

Join

圖 6-3 View 的範例

預存程序 (Stored Procedures)◦ 程序式語言 (Procedural Language) ◦ 預先設計好的處理程序 ◦ 經常使用的處理流程且重複使用 ◦ 降低錯誤率的發生 ◦ 執行效率上會較好◦ 由使用者或是透過應用程式的呼叫而被動執行

觸發器 (Triggers)

預存程序 (Stored Procedures) 與觸發器 (Triggers)(1/2)

預存程序 (Stored Procedures) 觸發器 (Triggers)

◦ 程序式語言 (Procedural Language) ◦ 預先設計好的處理程序◦ 相依於資料表 ◦ 資料表被異動 ( 新增、刪除或修改 ) 時,主動地觸發不同的觸發器來執行其工作 ◦ 有不同的觸發時機

預存程序 (Stored Procedures) 與觸發器 (Triggers)(2/2)

Structured Query Language 簡稱『 SQL 』 源自於 1970 年 IBM 公司的一項研究所延伸 由美國國家標準局 (the American National

Standards Institute ,簡稱 ANSI) 和國際標準組織 (International Standards Organization ,簡稱 ISO) 訂定為國際依據之標準

結構化程式語言簡介 (1/2)

1970 年◦ 稱為 SQL1 或 SQL-86

1992 年◦ 稱為 SQL2 或稱為 SQL-92 ( ISO/IEC 9075:1992 - Database

Language – SQL ) 的標準 1999 年

◦ 稱為 SQL3 或稱為 SQL-99 ( ISO/IEC 9075-2:1999 - Database Languages - SQL - Part 2: Foundation (SQL/Foundation))

2003 年◦ 稱為 SQL4 或稱為 SQL-2003 (ISO/IEC 9075-2:2003 -

Database Languages - SQL - Part 2: Foundation (SQL/Foundation)).

結構化程式語言簡介 (2/2)

資料定義語言◦ Data Definition Language ,簡稱 DDL◦ 建立與維護資料庫內的相關物件◦ 包括綱要 (Schema) 、資料表 (Tables) 、檢視表

(Views) 、預存程序 (Stored Procedures) 、觸發器(Triggers) 、函數 (Functions) 、定義域(Domains) 和限制 (Constraints)… 等等

資料操作語言 資料控制語言

結構化程式語言 (1/3)

資料定義語言 資料操作語言

◦ Data Manipulation Language ,簡稱 DML◦ 對資料的存取操作 (Operations) ,包括對資料的

新增 ( Insert ) 刪除 ( Delete ) 修改 ( Update ) 查詢 ( Select )

資料控制語言

結構化程式語言 (2/3)

資料定義語言 資料操作語言 資料控制語言

◦ Data Control Language ,簡稱 DCL◦ 進行授權和撤銷之安全存取控制的管理和操作

結構化程式語言 (3/3)

6-1 簡介 6-2 資料定義語言 (DDL)

◦ 定義「綱要」 (Schema)◦ 定義「資料表」 (Tables)

6-3 資料操作語言 (DML)◦ 新增操作 (Inert Operation)◦ 刪除操作 (Delete Operation)◦ 更新操作 (Update Operation)◦ 查詢操作 (Select Operation)

本章內容

『定義』以下物件◦ 資料庫 (Database)◦ 綱要 (Schema)◦ 資料表 (Table)◦ 檢視表 (View)◦ 其他不同物件

定義的順序◦ 父資料表先於子資料表◦ 如下頁圖

6-2 資料定義語言 (DDL)

資料庫 ERD 之父子關係

圖 6-4 資料庫 ERD 之主從關係建立順序

(由上而下)

目的在於將不同系統或不同用途的相關物件做一區隔或分類,達到管理上的方便 在存取控制上的適當授權,達到資料保密上的安全性,避免未授權的使用者讀取或異動其中的資料

定義『綱要』 (Schema)

定義『綱要』之基本語法

為人力資源部門建立一獨立的綱要 【說明】

◦ ( 語法一 ) ◦ 僅以最簡單方式建立一名為『 HumanResource 』的綱要。

【語法】◦ ( 語法一 )

【範例 6-1 】 (1/4)

CREATE SCHEMA HumanResource

為人力資源部門建立一獨立的綱要 【說明】

◦ ( 語法二 ) ◦ 建立一個綱要名稱與使用者 『 hrOwner 』相同名稱,並授權給予此相同帳號為 『 hrOwner 』之使用者 。

【語法】◦ ( 語法二 )

【範例 6-1 】 (2/4)

CREATE SCHEMA AUTHORIZATION hrOwner

未指定 schema_name

為人力資源部門建立一獨立的綱要 【說明】

◦ ( 語法三 ) ◦ 建 立 一 個 綱 要 名 稱 為 『 HumanResource 』 , 並 授 權 于 帳 號 為『 hrOwner 』的使用者。

【語法】◦ ( 語法三 )

【範例 6-1 】 (3/4)

CREATE SCHEMA HumanResource AUTHORIZATION hrOwner

schema_name username

為人力資源部門建立一獨立的綱要 【說明】

◦ ( 語法四 ) ◦ 建立一個綱要名為 『 HumanResouce 』,並於建立此綱要時,建立一個資料表名為『員工』,與一檢視表名為『男員工』。

【語法】◦ ( 語法四 )

【範例 6-1 】 (4/4)

CREATE SCHEMA HumanResource AUTHORIZATION CREATE TABLE 員工( 員工編號 int PRIMARY KEY,性名 varchar(12),性別 char(1))CREATE View 男員工ASSELECT * FROM 員工 WHERE 性別 = ‘ 男’

schema_element

定義名為『員工』之資料表定義名為『男員工』之檢視表

刪除『綱要』之基本語法

請刪除為人力資源部門所建立的綱要 【說明】

◦ ( 語法一 ) ◦ 在綱要內若尚有其他屬性、定義域或元素時,且希望一併刪除時,可以使用 CASCADE 的選項。

【語法】◦ ( 語法一 )◦ DROP SCHEMA HumanResource CASCADE

【範例 6-2 】 (1/2)

請刪除為人力資源部門所建立的綱要 【說明】

◦ ( 語法二 ) ◦ 在綱要內若沒有任何元素存在,則可以使用 RESTRICT 的選項。倘若尚有其他屬性、定義域或元素時,使用 RESTRICT 的選項會阻止 DROP 命令執行,可避免不小心刪除掉綱要內所有的元素。

【語法】◦ ( 語法二 )◦ DROP SCHEMA HumanResource RESTRICT

【範例 6-2 】 (2/2)

實體限制◦ Entity Constraint◦ 限制一個資料表內的每一筆紀錄都必須具有唯一性

(Uniqueness) ◦ 主要鍵具有兩個特性

『鍵值不可重複』 『鍵值不可為空值』

定義域限制 參考完整性限制 使用者定義限制

定義『資料表』的限制 (1/4)

實體限制 定義域限制

◦ Domain Constraint◦ 資料表中的屬性設定一個限制條件

值域範圍 (range) 資料型態

參考完整性限制 使用者定義限制

定義『資料表』的限制 (2/4)

實體限制 定義域限制 參考完整性限制

◦ Referential Integrity Constraint◦ 兩個資料表之間關聯性 (Relationship) 的限制 ◦ 『子資料表』與『父資料表』之間的相依關係

使用者定義限制

定義『資料表』的限制 (3/4)

實體限制 定義域限制 參考完整性限制 使用者定義限制

◦ User-Defined Constraint◦ 由使用者依據企業之需求而自訂的其他限制

定義『資料表』的限制 (4/4)

可能違反的限制◦ 實體限制◦ 定義域限制◦ 參考完整性限制◦ 使用者定義

解決方式◦拒絕新增

『新增操作』可能違反的限制

可能違反的限制◦ 參考完整性限制

解決方式◦拒絕刪除 (Restrict)◦連鎖性刪除 (Delete Cascade) ◦ 將參考到被刪除紀錄之外來鍵值設成空值 (Set to Null

Value)

『刪除操作』可能違反的限制

連鎖性刪除 (Delete Cascade)(1/2)

父資料表 - 『訂單』資料表

子資料表 - 『訂單明細』資料表

連鎖性刪除 (Delete Cascade)(2/2)

94010201

Delete Cascade

父資料表 - 『訂單』資料表

子資料表 - 『訂單明細』資料表

可能違反的限制◦ 若非更新主要鍵或外來鍵

定義域限制 使用者定義限制

◦ 若更新主要鍵或外來鍵 實體限制 定義域限制 參考完整性限制 使用者定義

解決方式◦ 拒絕更新 (Restrict) ◦ 連鎖性更新 (Update Cascade) ◦ 將參考不到父資料表的外來鍵值設為空值 (Set to Null

Value)

『更新操作』可能違反的限制

連鎖性更新 (Update Cascade)(1/2)

父資料表 - 『訂單』資料表

子資料表 - 『訂單明細』資料表

連鎖性更新 (Update Cascade)(2/2)

Update Cascade

父資料表 - 『訂單』資料表

子資料表 - 『訂單明細』資料表

6-1 簡介 6-2 資料定義語言 (DDL)

◦ 定義「綱要」 (Schema)◦ 定義「資料表」 (Tables)

6-3 資料操作語言 (DML)◦ 新增操作 (Inert Operation)◦ 刪除操作 (Delete Operation)◦ 更新操作 (Update Operation)◦ 查詢操作 (Select Operation)

本章內容

定義資料表之基本語法

資料庫 ERD 之父子關係

圖 6-4 資料庫 ERD 之主從關係建立順序

(由上而下)

【題目】◦ 依圖 6-4 定義出所有之資料表

1) 員工2) 客戶3) 供應商4) 產品類別5) 產品資料6) 訂單7) 訂單明細

【說明】◦ 定義資料表的基本語法在第一欄為資料表之屬性,再定義每個屬性的資料型態,資料型態之後即是該屬性的限制。

【範例 6-3 】

【員工】資料表之限制說明◦ 在員工資料表中,『員工編號』為此資料表之主要鍵

(Primary Key) ,『姓名』之屬性值不得為空值 (Null Value) 。

【語法】◦ ( 語法一 ) 將『員工編號』為主要鍵之限制寫在下方的

table level 區,並將『姓名』不得為空值之限制,直接寫在姓名屬性後方。◦ ( 語法二 ) 將『員工編號』為主要鍵之限制直接寫在員工編號屬性後方。

1) 建立【員工】資料表

【客戶】資料表之限制說明◦ 在客戶資料表中,『客戶編號』為此資料表之主要鍵

(Primary Key) ,『公司名稱』之屬性值不得為空值(Null Value) 。

【語法】◦ ( 語法一 ) 將『客戶編號』為主要鍵之限制寫在下方的

table level 區,並將『公司名稱』不得為空值之限制,直接寫在公司名稱屬性後方。◦ ( 語法二 ) 將『客戶編號』為主要鍵之限制直接寫在客戶編號屬性後方。

2) 建立【客戶】資料表

【供應商】資料表之限制說明◦ 在供應商資料表中,除了『供應商編號』為此資料表之主要鍵

(Primary Key) 之外,此資料表中的『地址』和『電話』屬性,不得同時為空值 (Null Value) ,也就是至少要有一個屬性有值。 【語法】

◦ ( 語法一 ) 將『供應商編號』為主要鍵之限制寫在下方的 table level 區,並將『地址』和『電話』屬性,不得同時為空值 (Null Value) 之限制,寫於 table level 區。

◦ ( 語法二 ) 將『供應商編號』為主要鍵之限制直接寫在供應商編號屬性後面,但將『地址』和『電話』屬性,不得同時為空值 (Null Value) 之限制,仍要寫於 table level 區,不得寫於個別的屬性後方。倘若將此限制寫於個別屬性後方,其語意將成為『地址』和『電話』兩個屬性皆不可為空值 (Null Value) 。

3) 建立【供應商】資料表

【產品類別】資料表之限制說明◦ 在產品類別資料表中,『類別編號』為此資料表之主要鍵

(Primary Key) ,『類別名稱』之屬性值不得為空值(Null Value) 。

【語法】◦ ( 語法一 ) 將『類別編號』為主要鍵之限制寫在下方的

table level 區,並將『類別名稱』不得為空值之限制,直接寫在類別名稱屬性後方。◦ ( 語法二 ) 將『類別編號』為主要鍵之限制直接寫在類別編號屬性後方。

4) 建立【產品類別】資料表

【產品資料】資料表之限制說明◦ 在產品資料的資料表中,『產品編號』為此資料表之主要鍵

(Primary Key) ,『類別編號』為此資料表中一個外來鍵,參考『產品類別』資料表中的主要鍵『類別編號』;『供應商編號』為此資料表中另一個外來鍵,參考『供應商』資料表中的主要鍵『供應商編號』;並且庫存量和安全存量必須設預設值 0 。 【語法】

◦ ( 語法一 ) 將『產品編號』為主要鍵及『類別編號』和『供應商編號』為兩個外來鍵之限制寫在下方的 table level 區,並將『庫存量』和『安全存量』設預設值為 0 之限制,直接寫在兩個屬性後方。◦ ( 語法二 ) 將『產品編號』為主要鍵及『類別編號』和『供應商編號』為兩個外來鍵之限制直接寫在個別屬性後方。

5) 建立【產品資料】資料表

【訂單】資料表之限制說明◦ 在訂單資料表中,『訂單編號』為此資料表之主要鍵 (Primary

Key) ,『員工編號』為此資料表中一個外來鍵,參考『員工』資料表中的主要鍵『員工編號』;『客戶編號』為此資料表中另一個外來鍵,是參考『客戶』資料表中的主要鍵『客戶編號』。 【語法】

◦ ( 語法一 ) 將『訂單編號』為主要鍵及『員工編號』和『客戶編號』為兩個外來鍵之限制寫在下方的 table level 區。◦ ( 語法二 ) 將『訂單編號』為主要鍵及『員工編號』和『客戶編號』為兩個外來鍵之限制直接寫在個別屬性後方。

6) 建立【訂單】資料表

【訂單明細】資料表之限制說明◦ 『訂單編號』 + 『產品編號』兩個屬性結合成為此資料表之主要鍵 (Primary Key) 。單一個『產品編號』屬性又剛好為此資料表中一個外來鍵,參考『訂單』資料表中的主要鍵『訂單編號』,除了要達到參考完整性限制外,若有違反此限制時,採用『連鎖刪除』 (DELETE CASCADE)和『連鎖更新』 (UPDATE CASCADE);『產品編號』為此資料表中另一個外來鍵,參考『產品資料』資料表中的主要鍵『產品編號』。除此之外,對於數量屬性也將限制必須大於 0 。

7) 建立【訂單明細】資料表

【語法】◦ ( 語法一 ) 將所有的限制全部寫在下方的 table level區。但是在外來鍵的限制方面,本資料表共有兩個外來鍵,一為訂單編號參考訂單資料表的訂單編號,且要求在違反限制時,將使用連鎖刪除和連鎖更新,所以在其參考語法後方要再加上選項 ON DELETE CASCADE ON

UPDATE CASCADE 。另一個外來鍵為產品編號參考產品資料資料表的產品編號,由於沒有特別限制在違反時的處理方式,預設沒有任何選項時,則為拒絕刪除和拒絕更新。最後為一個數量的限制必須大於 0 。◦ ( 語法二 ) 由於此資料表的主要鍵是由兩個屬性『訂單編號』和『產品編號』組合而成,所以並不可分別寫在屬性後方,否則在語意上將解釋為訂單編號為主要鍵,產品編號也是主要鍵,也就是此資料表有兩個主要鍵,這是不被允許的,所以只要多於一個屬性所組成的鍵,就必須要置於 table level 區,不可分別寫於屬性後方。其他限制都屬於單一個屬性的限制,所以皆可置於該屬性後面做限制。

建立【訂單明細】資料表

刪除資料表之基本語法

刪除順序與建立順序相反

6-1 簡介 6-2 資料定義語言 (DDL)

◦ 定義「綱要」 (Schema)◦ 定義「資料表」 (Tables)

6-3 資料操作語言 (DML)◦ 新增操作 (Inert Operation)◦ 刪除操作 (Delete Operation)◦ 更新操作 (Update Operation)◦ 查詢操作 (Select Operation)

本章內容

新增 INSERT 之基本語法

【範例 6-4 】◦ 新增一筆新的產品資料。

【說明】◦ ( 語法一 ) 將屬性列全部省略不寫,但必須將新增的資料依資料表內的屬性順序填寫,否則將會造成錯誤。

【語法】◦ ( 語法一 )◦ INSERT INTO 產品資料

VALUES ( 13, 8, ‘S0005’, ‘拿鐵’ , 35, 0, 30)

【範例 6-4 】 (1/2)

【範例 6-4 】◦ 新增一筆新的產品資料。

【說明】◦ ( 語法二 ) 將屬性列名稱全部列出,其順序只要和所要新增的屬性值位置相對應即可。

【語法】◦ ( 語法二 )◦ INSERT INTO 產品資料

(產品編號 , 類別編號 , 供應商編號 , 產品名稱 , 建議單價 , 庫存量 , 安全存量 ) VALUES ( 13, 8, ‘S0005’, ‘拿鐵’ , 35, 0, 30)

【範例 6-4 】 (2/2)

【範例 6-5 】◦ 新增一筆新的產品資料,其中的庫存量與安全存量使用資料表內的預設值。

【說明】◦ 此範例只要是說明新增一筆資料時,可以使用保留字 DEFAULT ,來達到該屬性是使用資料表內的預設值。

【語法】◦ INSERT INTO 產品資料 (產品編號 , 類別編號 , 產品名稱 , 建議單價 , 庫存量 , 安全存量 )

VALUES ( 15, 2, ‘S0002’, ‘紅茶拿鐵’ , 20, DEFAULT, DEFAULT)

【範例 6-5 】

6-1 簡介 6-2 資料定義語言 (DDL)

◦ 定義「綱要」 (Schema)◦ 定義「資料表」 (Tables)

6-3 資料操作語言 (DML)◦新增操作 (Inert Operation)◦ 刪除操作 (Delete Operation)◦ 更新操作 (Update Operation)◦ 查詢操作 (Select Operation)

本章內容

刪除 DELETE 之基本語法

【範例 6-6 】◦ 從『供應商』資料表中,刪除掉供應商編號為 S0006 的供應商資料。

【說明】◦ 此範例是利用 DML 中的 DELETE 語法,藉由 WHERE 的條件限制,將供應商編號為 S0006 的資料刪除。

【語法】◦ DELETE FROM 供應商

WHERE 供應商編號 =’S0006’

【範例 6-6 】

【範例 6-7 】◦ 從『供應商』資料表中,刪除所有資料。

【說明】◦ 此範例可以使用 TRUNCATE TABLE 的語法將供應商資料表內的資料全部刪除。但也等同於利用 DML 中的 DELETE 語法,而不使用 WHERE 的任何限制,亦可將全部資料刪除。◦ 但此兩者的差異在於, TRUNCATE 並不會將所刪除的執行過程記錄於交易日誌檔 (log file) 中,而 DELETE 的語法,則會將所有被刪除的資料全部記錄於交易日誌檔中,所以在刪除大量資料時, TRUNCATE 將會顯得較有效率。

【語法】◦ ( 語法一 )

TRUNCATE TABLE 供應商◦ ( 語法二 )

DELETE FROM 供應商

【範例 6-7 】

6-1 簡介 6-2 資料定義語言 (DDL)

◦ 定義「綱要」 (Schema)◦ 定義「資料表」 (Tables)

6-3 資料操作語言 (DML)◦新增操作 (Inert Operation)◦ 刪除操作 (Delete Operation)◦ 更新操作 (Update Operation)◦ 查詢操作 (Select Operation)

本章內容

更新 UPDATE 之基本語法

【範例 6-8 】◦ 將『產品資料』資料表中的產品編號為 13 的庫存量更新為 300 ,安全存量更新為 50 。

【說明】◦ 此範例可以利用 DML 中的 UPDATE 語法,並使用 WHERE 來限制要更新的資料。

【語法】◦ UPDATE 產品資料

SET 庫存量 = 300, 安全存量 = 50WHERE 產品編號 = 13

【範例 6-8 】

【範例 6-9 】◦ 將『產品資料』資料表中類別編號為 1 的所有產品之『建議單價』更新為原價之 80% 。

【說明】◦ 此範例可以利用 DML 中的 UPDATE 語法,使用建議單價 = 建議單價 *0.8計算式,並使用 WHERE 來限制被更新的資料條件限制。

【語法】◦ UPDATE 產品資料

SET 建議單價 = 建議單價 * 0.8WHERE 類別編號 = 1

【範例 6-9 】

【範例 6-10 】◦ 將『產品資料』資料表中類別編號為 1 的所有產品之安全存量全部改成資料表內的預設值。

【說明】◦ 此範例只要是說明更新一筆資料時,可以使用保留字 DEFAULT ,來達到該屬性是使用資料表內的預設值。

【語法】◦ UPDATE 產品資料

SET 安全存量 = DEFAULTWHERE 類別編號 = 1

【範例 6-10 】

6-1 簡介 6-2 資料定義語言 (DDL)

◦ 定義「綱要」 (Schema)◦ 定義「資料表」 (Tables)

6-3 資料操作語言 (DML)◦新增操作 (Inert Operation)◦ 刪除操作 (Delete Operation)◦ 更新操作 (Update Operation)◦ 查詢操作 (Select Operation)

本章內容

查詢 SELECT 之基本語法

【範例 6-11 】基本使用與萬用字元查詢◦ 使用 SELECT 查詢出所有的產品資料。

【說明】◦ 在此範例中可使用萬用字元 (wild card) * 來代表所有的屬性,或將所有屬性一一寫出也等同意義。

【語法】◦ ( 語法一 )

SELECT * FROM 產品資料

◦ ( 語法二 )SELECT產品編號 , 類別編號 , 供應商編號 , 產品名稱 , 建議單價 , 庫存量 , 安全存量 FROM 產品資料

【範例 6-11 】基本使用與萬用字元查詢

【結果】

【範例 6-12 】基本屬性輸出之查詢◦ 利用 SELECT 查詢出『產品資料』資料表中的產品編號 , 類別編號 , 產品名稱 , 建議單價 , 庫存量等屬性之屬性值。

【說明】◦ 此範例中已一一表示出屬性,故必須要將每一屬性清楚寫出,不可使用萬用字元。並且此範例亦等同於關聯代數中的『投影操作』

(PROJECT) -π 。 【語法】

◦ SELECT 產品編號 , 類別編號 , 產品名稱 , 建議單價 , 庫存量FROM 產品資料

【範例 6-12 】基本屬性輸出之查詢

(a)原產品資料之資料表

(b) 查詢後之結果

【範例 6-13 】條件限制之查詢◦ 利用 SELECT 查詢出『產品資料』之資料表中,類別編號為 1 的所有產品資訊。

【說明】◦ 此範例可使用 WHERE 來限制輸出的資料中,僅包含類別為 1 的紀錄,而輸出之屬性可直接使用萬用字元 * 。並且此範例亦等同於關聯代數中的『選取操作』 (SELECT) -σ 。

【語法】◦ SELECT *

FROM 產品資料WHERE 類別編號 = 1

【範例 6-13 】條件限制之查詢

(a)原產品資料之資料表

(b) 查詢後之結果

【範例 6-14 】基本屬性輸出與條件限制之綜合查詢◦ 利用 SELECT 查詢出 『產品資料』資料表中類別編號小於 5 的所有相關產品資料,輸出包括產品編號 , 類別編號 , 產品名稱 , 建議單價 , 庫存量等屬性。

【說明】◦ 此範例相當於綜合了【範例 6-12 】和【範例 6-13 】兩個範例,也就是利用關聯代數中的縱向選取 (投影操作 ) 和橫向選取 ( 選取操作 ) 兩個操作原理。

【語法】◦ SELECT產品編號 , 類別編號 , 產品名稱 , 建議單價 , 庫存量

FROM 產品資料WHERE 類別編號 < 5

【範例 6-14 】基本屬性輸出與條件限制之綜合查詢

(a)原產品資料之資料表

(b) 查詢後之結果

【範例 6-15 】屬性別名之查詢◦ 請查詢出男性業務之員工相關資料,包括員工編號、姓名、職稱和性別,但輸出時之屬性名稱要改為員工編號、員工姓名、職務名稱和性別。

【說明】◦ 此範例主要是說明輸出查詢時,將屬性以別名方式來表示,只要在每個欲給別名的屬性後方給予 AS 別名

【語法】◦ SELECT 員工編號 , 姓名 AS 員工姓名 ,

職稱 AS 職務名稱 , 性別FROM 員工WHERE 性別 = ‘ 男’ AND 職稱 = ‘ 業務’

【範例 6-15 】屬性別名之查詢

【結果】

【範例 6-16 】排序問題之查詢◦ 請查詢產品資料,並依類別編號遞增排序,倘若相同類別編號之產品,再依據產品編號遞減排序,輸出屬性依序包括類別編號、產品編號、產品名稱和建議單價。

【說明】◦ 此範例主要是說明輸出查詢時的排序問題,可使用 ORDER BY 方式,並於每個欲排序的屬性後方指名遞增 (ASC) 或遞減 (DESC)排序,倘若未明確指出是遞增或遞減,預設值將以遞增 (ASC) 做為排序。

【語法】◦ SELECT 類別編號 , 產品編號 , 產品名稱 , 建議單價

FROM 產品資料ORDER BY 類別編號 ASC, 產品編號 DESC

【範例 6-16 】排序問題之查詢

【結果】

【範例 6-17 】重複值只輸出一筆之查詢◦ 請從員工資料表中查詢出有那幾種職稱,重複職稱僅一筆顯示,並依職稱屬性遞增排序。

【說明】◦ 此範例主要在屬性前加上 DISTINCT即可,如圖 6-13(a) 當不加

DISTINCT 時會有很多重複的職稱出現,加上 DISTINCT 之後如(b)重複之資料只會出現一次。

【語法】◦ SELECT DISTINCT 職稱

FROM 員工ORDER BY 職稱

【範例 6-17 】重複值只輸出一筆之查詢

【結果】

(a) 不加DISTINCT

(b)加 DISTINCT重複

重複重複

【範例 6-18 】經過計算的輸出之查詢◦ 請依訂單明細資料表,查詢出訂單編號小於 94010300 之資料,並於每一筆後面計算出該筆資料之小計 ( 小計= 實際單價× 數量 ) ,並依訂單編號、產品編號遞增排序。輸出之屬性包括訂單編號、產品編號、實際單價、數量和小計。

【說明】◦ 此範例主要是說明輸出查詢時,可利用 SELECT 的運算方式,將訂單明細資料表內的實際單價與數量計算出該筆的小計金額,並給于一個別名為『小計』,計算方式如下 實際單價 * 數量 AS 小計

【語法】◦ SELECT 訂單編號 , 產品編號 , 實際單價 , 數量 ,

實際單價 * 數量 AS 小計FROM 訂單明細WHERE 訂單編號 < ‘94010300’ORDER BY 訂單編號 , 產品編號

【範例 6-18 】經過計算的輸出之查詢

【結果】

【範例 6-19 】兩個資料表的基本內部合併 (INNER JOIN) 查詢◦ 請查詢出每一位員工所承接的訂單資料,輸出屬性包括員工編號、姓名、訂單編號、訂貨日期,並依員工編號和訂單編號遞增排序。

【說明】◦ 由於此範例所要查詢的屬性,可從圖 6-15(a) 的 ER 圖中看出,分佈在『員工』資料表和『訂單』資料表,所以本查詢必須使用兩個資料表的合併查詢,可參考圖 (b) 的 Join示意圖,是取得兩個資料表關聯之後的共同紀錄,也就是藉由『員工』資料表中的員工編號和『訂單』資料表中的員工編號的『相等關係』。而在此範例中使用 WHERE對兩資料表限制其中的關聯性,其效果等同於『內部合併』 (INNER JOIN) 。◦ 也由於在此兩個資料表中,皆有員工編號之屬性,為避免產生資料庫管理系統的混淆,所以必須在屬性前加上資料表名稱,並加上一個『點』,稱之為『點表示法』 (Dot Notation) ,如語法中的員工 . 員工編號和訂單 .員工編號。

【範例 6-19 】兩個資料表的基本內部合併(INNER JOIN) 查詢

員工

訂單

(a) ER 圖

(b) Join 之示意圖

【語法】◦ SELECT 員工 . 員工編號 , 姓名 , 訂單編號 , 訂貨日期

FROM 員工 , 訂單WHERE 員工 . 員工編號 = 訂單 . 員工編號ORDER BY 員工 . 員工編號 , 訂單編號

【結果】

【範例 6-20 】三個資料表的基本內部合併 (INNER JOIN) 查詢◦ 請查詢出每一位員工所承接的訂單資料,輸出屬性包括員工編號、姓名、訂單編號、訂貨日期和產品編號,並依員工編號、訂單編號和產品編號三個屬性遞增排序。

【說明】◦ 由於此範例所要查詢的屬性,可從圖 6-17(a) 的 ER 圖中看出,分佈在『員工』資料表、『訂單』資料表和『訂單明細』資料表三個資料表,所以本查詢必須使用此三個資料表的合併查詢,可參考圖 (b) 的 Join示意圖,是取得三個資料表關聯之後的共同紀錄,也就是藉由『員工』資料表中的員工編號和『訂單』資料表中的員工編號的『相等關係』以及『訂單』資料表中的訂單編號和『訂單明細』資料表中的訂單編號的『相等關係』。而在此範例中使用 WHERE對兩資料表限制其中的關聯性,其效果等同於『內部合併』 (INNER JOIN) 。

【範例 6-20 】三個資料表的基本內部合併(INNER JOIN) 查詢

(a) ER 圖

(b) Join 之示意圖

員工

訂單

訂單明細

【語法】◦ SELECT 員工 . 員工編號 , 姓名 , 訂單 . 訂單編號 , 訂貨日期 ,

產品編號FROM 員工 , 訂單 , 訂單明細WHERE 員工 . 員工編號 = 訂單 . 員工編號 AND 訂單 . 訂單編號 = 訂單明細 . 訂單編號ORDER BY 員工 . 員工編號 , 訂單 . 訂單編號 , 產品編號

【範例 6-21 】間接關聯性的基本內部合併 (INNER JOIN) 查詢◦ 請查詢出每一位員工所承接的訂單資料,輸出屬性包括員工編號、姓名、訂單編號、訂貨日期和產品名稱,並依員工編號、訂單編號二個屬性遞增排序。

【說明】◦ 由於此範例所要查詢的屬性,可從圖 6-19(a) 的 ER 圖中看出,分佈在『員工』資料表、『訂單』資料表和『產品資料』資料表三個資料表,但是從圖中可看出,『訂單』資料表與『產品資料』資料表之間並無直接的關聯性存在,而是透過『訂單明細』資料表所產生的間接關聯性,所以本查詢必須使用四個資料表的合併查詢,可參考圖 (b) 的 Join示意圖,取得四個資料表關聯之後的共同紀錄,也就是藉由『員工』資料表中的員工編號和『訂單』資料表中的員工編號的『相等關係』、『訂單』資料表中的訂單編號和『訂單明細』資料表中的訂單編號的『相等關係』以及『訂單明細』資料表中的產品編號和『產品資料』資料表中的產品編號的『相等關係』。而在此範例中使用 WHERE對兩資料表限制其中的關聯性,其效果等同於『內部合併』 (INNER JOIN) 。

【範例 6-21 】間接關聯性的基本內部合併(INNER JOIN) 查詢

(a) ER 圖

(b) Join 之示意圖

員工

訂單

訂單明細

產品資料

透過『訂單明細』產生間接關聯性

【語法】◦ SELECT 員工 . 員工編號 , 姓名 , 訂單 . 訂單編號 , 訂貨日期 ,

產品名稱FROM 員工 , 訂單 , 訂單明細 , 產品資料WHERE 員工 . 員工編號 = 訂單 . 員工編號 AND 訂單 . 訂單編號 = 訂單明細 . 訂單編號 AND 訂單明細 . 產品編號 = 產品資料 . 產品編號ORDER BY 員工 . 員工編號 , 訂單 . 訂單編號

【範例 6-22 】使用資料表的別名◦ 如同【範例 6-21 】的查詢條件,並使用資料表的別名。

【說明】◦ 此範例主要是說明當很多資料表的屬性名稱相同時,皆必須要於屬性前加上資料表名稱,無形中會產生很多冗長的文字,此問題可透過給於資料表別名方式來達成精簡的效果。

【語法】◦ SELECT E. 員工編號 , 姓名 , O. 訂單編號 , 訂貨日期 , 產品名稱 FROM 員工 AS E, 訂單 AS O, 訂單明細 AS OD, 產品資料 AS P

WHERE E. 員工編號 = O. 員工編號 AND O. 訂單編號 = OD. 訂單編號 AND OD.產品編號 = P.產品編號ORDER BY E. 員工編號 , O. 訂單編號

【範例 6-22 】使用資料表的別名

Recommended