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

106
第第第 第第第第第第第 SQL( ) 第第第第第第第第第第

Upload: tyrone

Post on 07-Feb-2016

160 views

Category:

Documents


3 download

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

TRANSCRIPT

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

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

資料庫系統理論與實務

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

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

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

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

本章內容

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

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

欄位 (Fields) 紀錄 (Record)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

檔案系統(File System)

關聯式資料模型(Relational Data

Model)

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

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

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

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

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

相關名詞比較

表一:相關名詞比較

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

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

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

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

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

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

Database

Schema

TablesViewsStored proceduresTriggersFunctionsDomainsConstraints

Schema

TablesViewsStored proceduresTriggersFunctionsDomainsConstraints

Database

Schema

TablesViewsStored proceduresTriggersFunctionsDomainsConstraints

Schema

TablesViewsStored proceduresTriggersFunctionsDomainsConstraints

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

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

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

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

Table 與 View

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

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 ,它的直接來源是合併一個 ( 或更多 ) 檢視表和兩個 ( 或更多 ) 資料表後

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

View 的實際範例

女業務 男業務

男業務的訂單資料

Views

員工 訂單 客戶tables

Join

圖 6-3 View 的範例

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

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

觸發器 (Triggers)

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

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

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

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

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

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

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

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

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

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

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)

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

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

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

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

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

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

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

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

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

資料控制語言

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

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

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

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

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

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

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

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

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

本章內容

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

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

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

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

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

資料庫 ERD 之父子關係

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

(由上而下)

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

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

定義『綱要』 (Schema)

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

定義『綱要』之基本語法

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

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

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

【語法】◦ ( 語法一 )

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

CREATE SCHEMA HumanResource

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

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

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

【語法】◦ ( 語法二 )

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

CREATE SCHEMA AUTHORIZATION hrOwner

未指定 schema_name

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

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

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

【語法】◦ ( 語法三 )

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

CREATE SCHEMA HumanResource AUTHORIZATION hrOwner

schema_name username

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

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

◦ ( 語法四 ) ◦ 建立一個綱要名為 『 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

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

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

刪除『綱要』之基本語法

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

實體限制 定義域限制

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

值域範圍 (range) 資料型態

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

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

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

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

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

使用者定義限制

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

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

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

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

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

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

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

解決方式◦拒絕新增

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

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

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

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

Value)

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

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

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

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

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

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

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

94010201

Delete Cascade

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

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

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

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

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

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

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

Value)

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

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

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

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

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

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

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

Update Cascade

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

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

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

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

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

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

本章內容

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

定義資料表之基本語法

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

資料庫 ERD 之父子關係

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

(由上而下)

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

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

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

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

【範例 6-3 】

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

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

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

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

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

1) 建立【員工】資料表

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

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

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

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

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

2) 建立【客戶】資料表

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

6) 建立【訂單】資料表

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

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

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

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

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

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

建立【訂單明細】資料表

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

刪除資料表之基本語法

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

刪除順序與建立順序相反

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

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

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

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

本章內容

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

新增 INSERT 之基本語法

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

【範例 6-5 】

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

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

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

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

本章內容

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

刪除 DELETE 之基本語法

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

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

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

【語法】◦ DELETE FROM 供應商

WHERE 供應商編號 =’S0006’

【範例 6-6 】

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

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

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

【語法】◦ ( 語法一 )

TRUNCATE TABLE 供應商◦ ( 語法二 )

DELETE FROM 供應商

【範例 6-7 】

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

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

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

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

本章內容

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

更新 UPDATE 之基本語法

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

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

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

【語法】◦ UPDATE 產品資料

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

【範例 6-8 】

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

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

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

【語法】◦ UPDATE 產品資料

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

【範例 6-9 】

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

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

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

【語法】◦ UPDATE 產品資料

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

【範例 6-10 】

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

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

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

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

本章內容

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

查詢 SELECT 之基本語法

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

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

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

【語法】◦ ( 語法一 )

SELECT * FROM 產品資料

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

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

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

【結果】

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

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

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

(PROJECT) -π 。 【語法】

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

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

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

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

(b) 查詢後之結果

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

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

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

【語法】◦ SELECT *

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

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

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

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

(b) 查詢後之結果

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

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

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

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

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

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

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

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

(b) 查詢後之結果

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

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

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

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

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

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

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

【結果】

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

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

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

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

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

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

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

【結果】

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

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

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

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

【語法】◦ SELECT DISTINCT 職稱

FROM 員工ORDER BY 職稱

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

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

【結果】

(a) 不加DISTINCT

(b)加 DISTINCT重複

重複重複

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

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

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

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

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

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

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

【結果】

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

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

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

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

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

員工

訂單

(a) ER 圖

(b) Join 之示意圖

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

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

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

【結果】

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

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

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

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

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

(a) ER 圖

(b) Join 之示意圖

員工

訂單

訂單明細

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

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

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

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

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

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

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

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

(a) ER 圖

(b) Join 之示意圖

員工

訂單

訂單明細

產品資料

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

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

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

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

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

【範例 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 】使用資料表的別名