1、Chapter 4資料庫規劃與設計12/102大大 綱綱4-1 資料庫設計基礎4-2 資料模型4-3 資料庫設計-實體關係模型4-4 資料庫設計-正規化4-5 實作案例4-6 SQL3/1024-1 4-1 資料庫設計基礎資料庫設計基礎資料庫(Database)是一組相關資料所形成的集合,它是資訊系統中用來儲存資料的地方。資料庫是以電子化的檔案型式存在於系統中,其透過特定的資料模型概念,將資料集合進行組織性的儲存,以提供應用系統的使用。4/102資料庫管理系統資料庫管理系統資料庫管理系統(Database Management System)簡稱為DBMS,它是一套應用軟體系統,是介於使用者與
2、作業系統之間,用來有效管理資料庫。常見的DBMS有SQL Server、Oracle、SyBase等。資料庫管理系統的主要功能資料定義資料處理安全性管理資料庫的維護5/102資料庫系統資料庫系統資料庫系統(Database System)是一套包含資料庫、資料庫管理系統、應用程式,以及使用者在內的系統。一般也將資料庫系統視為是一個包含資料庫功能的資訊系統。使用者SQL查詢/應用程式資料庫管理系統綱要(中繼資料)資料庫6/102資料庫系統相關的人員資料庫系統相關的人員角色角色資料庫系統相關的人員角色資料庫管理員資料庫設計師終端使用者系統分析師與應用程式設計師使用資料庫系統的優點減少大量重覆儲存的
3、資料、減少不一致的資料、資料得以共享、達成資料標準化的目的、加快資料擷取速度、資料具有整合性、達成資料獨立、可利用資料模型來描述複雜的關係、快速備份與回復資料庫、提供不同的視界等。7/1024-2 4-2 資料模型資料模型資料模型是資料庫系統的核心一個資料模型的主要組成資料的表示方式表示方式的合法條件(整合限制條件)資料的操作與運算資料模型1.階層式資料模型2.網路式資料模型3.關聯式資料模型8/1021.1.階層式資料模型階層式資料模型階層式資料模型(Hierarchical Database Model)其結構是採用一個有序集合的樹狀結構。階層式資料模式的整合限制條件為:任何的子節點(Ch
4、ild Node)都必須要有父節點(Parent Node)的存在。階層式資料模型上的資料運算主要是依循樹狀結構(Tree Structure)上的運算原則。階層式資料模型只適合用來描述一對多的關係,但不適合多對多關係的描述。9/1022.2.網路式資料模型網路式資料模型網路式資料庫模型(Network Database Model)在資料的結構上採用網路圖形來連結資料。網路式資料模式的整合限制條件為:除非其父親節點已經存在了,否則任何的孩子節點都不能加入資料庫中。網路式資料模型上的資料運算主要依循圖形(Graph)結構上的運算。由於網路式資料模型在結構上是採用網路(圖形)的型式,因此適合用來
5、描述多對多問題。10/1023.3.關聯式資料模型關聯式資料模型關聯式資料模型的發展,最早是在1970 年代由IBM 公司的研究人員Codd博士首先發展出關聯式資料模型,並於1985 年,對外提出關聯式資料庫管理系統的規則建議。使用關聯式模型為基礎觀念所建立的資料庫管理系統,稱之為關聯式資料庫管理系統關聯式資料模型的組成元素,包含了資料結構、完整性限制條件,以及資料操作或運算等三大元素。11/102關聯(關聯(RelationRelation)關聯也稱為關聯表,形式上就如同是一個表格,是關聯式資料模型所採行的表示結構。關聯是由許多資料值所組成的表格關聯可視為是一組橫列(Row)的集合也可以視為
6、是一組直欄(Column)的集合關聯中的每個直欄亦是一個屬性關聯的屬性數目(即欄位數)稱為此關聯的維度。關聯可視為是經由許多屬性所組成的表格。12/102關聯綱要關聯綱要一個關聯的實體架構稱為關聯綱要建立關聯必須要有:關聯名稱屬性集合(及各屬性的資料型態)主鍵(與外來鍵)13/102範例:範例:Product Product 關聯表關聯表14/102關聯表具備四個性質關聯表具備四個性質關聯表的值組是沒有順序的關聯表的屬性是沒有順序的關聯表中的屬性值是單元值關聯表中不含重複的值組15/102關聯綱要的表示法關聯綱要的表示法16/102限制條件限制條件在關聯式資料模型中的整合限制條件是用來規範資料
7、在關聯表中的儲存、刪除或更改動作,以防止不一致或錯誤的情況發生。關聯式資料模型的整合規則個體整合限制:用來規範關聯內部的限制條件參考整合限制:用來規範關聯與關聯之間的限制條件在關聯式資料模型之中,單一關聯表格所涉及到的限制包含鍵值完整性限制、定義域完整性限制,以及實體完整性限制。17/102鍵值完整性限制:關聯之中,鍵值具有不可為空值(Null Value)的限制。定義域完整性限制:對於不符合期待的值,必須被限制輸入。實體完整性限制:關聯中不會存在兩筆完全相同的值組。參考整合性限制是指定在兩個關聯之間,用以維持兩個關聯值組的一致性。參考整合性限制:外來鍵的屬性值必須在所參考之關聯的主鍵屬性中被
8、找到,或者為Null。18/102關聯式資料庫範例關聯式資料庫範例19/1024-3 4-3 資料庫設計資料庫設計-實體關係模型實體關係模型資料庫設計(Database Design)是指依照一定的程序、方法和技術,使用結構化方式將概念資料模型轉換成資料庫的過程。資料庫設計的階段概念資料庫設計:將資料庫需求轉換成概念資料模型的過程。邏輯資料庫設計:針對特定的資料庫模型來建立邏輯資料模型。實體資料庫設計:將邏輯資料模型轉換成關聯式資料庫管理系統的一系列SQL 指令敘述。20/102實體關係模型實體關係模型實體關係圖經常被使用在概念資料庫設計活動中,用來建立概念資料模型,這種圖形化工具可以描述使用
9、者和設計者眼中的真實世界,作為之間的溝通橋樑。實體關係模型中的實體可以對應關聯式資料庫模型的關聯表,並透過關係來表示外來鍵參考的參考概念,所以關聯式資料庫的邏輯資料庫設計也可以使用實體關係圖建立邏輯資料模型。實體關係模型是一套觀念與圖形符號,主要的組成元件包含:實體、屬性、關係等。21/102範例範例:客戶客戶-訂購訂購-商品的實體關係圖商品的實體關係圖22/1021.1.實體型態與實體實例實體型態與實體實例實體型態(Entity Type)是同一類實體所形成的集合,其圖形符號以矩形表示。例如客戶實體型態可表示為:商品實體型態可表示為:實體型態的實例(Instances),或簡稱為實體或個體2
10、3/1022.2.關係關係型型態與關係實例態與關係實例關係型態(Relationship Types)屬於一種關聯實體型態(Associate Entity Type),其目的是用來連結一、二個或多個相關的實體型態,圖形符號是使用菱形方式表示。關聯型態也可以建立實例,用來表示一個訂購的行為或事件。24/1023.3.屬性屬性屬性(Attributes)在實體關係圖中是以橢圓型圖形符號的表示節點。實體關係圖中的實體型態與關係型態可以擁有許多個屬性。例如:在下圖中,商品實體型態擁有商品編號、商品名稱、顏色,與價格等四個屬性25/102屬性的類型屬性的類型(1)(1)簡單屬性與複合屬性簡單屬性與複合
11、屬性若一屬性的形成由許多屬性所共同構成,亦即此一屬性可以被往下進行分割,切割成數個細微的屬性,則稱之為複合屬性。如下圖中的姓名屬性。簡單屬性是不可再分割的屬性。如下圖中的員工編號、生日與薪資等屬性。26/102屬性的類型屬性的類型(2)(2)單值屬性與多值屬性單值屬性與多值屬性多值屬性是一個可以有多個值的屬性(如下圖中的地點屬性),而一般的屬性都僅能有一個內容值,這種屬性我們就稱之為單值屬性(如下圖中的部門編號以及名稱屬性)。27/102屬性的類型屬性的類型(3)(3)儲存屬性與導出屬性儲存屬性與導出屬性某些屬性的資料值,在需要時可以動態的經由計算方式產生,因此無須被實際儲存起來,這種屬性稱之
12、為導出屬性。例如範例中的年紀屬性可以經由儲存屬性生日換算得到,因此在實際的資料庫中,不需要儲存年紀屬性的資料值。28/102例如下圖中的客戶的交易次數可以經由訂購紀錄中計算出來,因此交易次數屬性是屬於導出屬性。如果屬性是實體型態中,具有唯一性,可以用來識別實例的屬性,我們稱之為鍵值屬性。例如客戶與商品的編號屬性。29/1024.4.關係型態上的特性關係型態上的特性關係型態的Degree 是參與此關係的實體型態數目。關係型態若連接了兩個實體型態,表示此關係型態的Degree 為2,也稱為二元關係。若關係型態的Degree 為3,則又稱三元關係。二元關係三元關係30/1025.5.關聯限制條件關聯
13、限制條件關係型態連接的實體型態可以指定限制條件,稱為關聯限制條件,包含:基數比與參與。基數比限制條件是指一個實體所能參與的關係案例數。一對一關係31/102一對多關係多對多關係32/102參與限制條件是指實體集合的實例是全部或部份參與關係型態。若實體的存在必須依靠關係型態與另一實體產生關聯來決定,則我們稱之為全部參與;否則則為部份參與。33/102弱實體型態(Weak Entity Types)本身可以沒有任何的鍵值屬性。弱實體型態透過另一實體型態的一些屬性所組成的相關特定實體來辨認,而連結Weak Entity 與Identifying Owner 的關係稱為辨認關係。34/1024-4 4
14、-4 資料庫設計資料庫設計-正規化正規化一個未經過正規化的資料庫是一個不良的資料庫設計與實作方式。資料庫正規化是指可以對關聯進行適當的分割處理過程。35/1021.1.為什麼要做正規化為什麼要做正規化使關聯有良好的語意避免因為資料重複性造成資料不一致36/102避免新增異常要新增一個新的部門(如:9號,工程部),但因為這個新部門尚未有所屬員工,導致主鍵欄位必須為Null而無法完成部門的新增。37/102避免修改異常將2號部門(研發)的部門主管修改成E4,必須保證範例中的第三筆與第四筆值組的DMGR屬性皆有被正確修正,否則將會造成資料不一致的狀況。38/102避免刪除異常若員工(莊勝為,E5)離
15、職必須將其資料予以刪除,但此刪除動作將導致編號3號的生產部門被意外刪除了。39/1022.2.資料庫的正規化做法資料庫的正規化做法40/102第一階正規化(第一階正規化(1NF)第一階正規化(1NF)的要求是:關聯表沒有重複出現的欄位且每一屬性中只能存放單一的資料值。滿足1NF 的關聯不能有多值屬性或複合屬性的存在,因為這一類的屬性並無法讓屬性值滿足不可分的特性。41/102第二階正規化(第二階正規化(2NF)第二階正規化(2NF)的要求是:滿足1NF 且關聯表中的每一個非主要屬性必須完全功能相依於主鍵。因此在2NF 的處理過程中,主要在於消除非主要屬性與主鍵之間的部份功能相依性。2NF 42
16、/102第三階正規化(第三階正規化(3NF)第三階正規化(3NF)的要求條件是:滿足2NF 且每一個非主要屬性都不能遞移相依於主鍵。3NF 43/1024-5 4-5 實作案例實作案例 (財產盤點系統財產盤點系統)1.個案公司在組織上包含了許多不同的單位,這些單位都有其正式的單位名稱,同時公司也賦予各單位一個獨立的單位編號,這個編號在公司中是唯一的,可以用來代表公司的特定單位。2.各單位可以擁用許多人員,每個人員的屬性資料中,除了一個公司所配發的特定編號之外,亦包含人員的姓名、職稱、電話,與地址等基本資料屬性之外,為了讓這些人員能夠順利登入系統,執行才採盤點等系統功能,因此必須同時紀錄每位人員
17、的帳號、密碼,以及E-mail等相關資訊。3.為建立一套完善的財產盤點系統,於資料庫中必須清楚描述每項財產的編號,這項編號是公司於現行作業流程中對於財產項目所作的唯一性編碼,以及財產名稱、該財產項目的功能、數量、相片資訊,以及財產建立的日期等。基於RFID新系統的應用,我們於系統中將會紀錄貼附於每項財產上的RFID Tag標籤的卡號,以便讓RFID盤點系統能夠順利運作。除此之外,在每項財產項目紀錄被建立時,系統必須自行賦予每一財產記錄值組一個具有唯一性的流水編號。44/1024.為了能夠清楚表示財產設備設置的地點位置,我們將這些可能設置或存放財產的地點位置進行編碼,對於公司中每一個存放有財產的
18、特定位置給一個位置名稱,以及一個用來代表這個位置的編號,以便日後在進行盤點作業或執行其它系統功能時,對於財產的設置位置能有一個共同的標號與稱呼名稱。5.對於盤點作業時可能出現的狀況,我們經過分析後將其歸納成正常、送修,以及出借等數種可能的盤點狀態,並賦予各種狀況一個編號以及狀況名稱,並保留一個備註的屬性,用來對某一狀況的細節進行必要的描述或說明。6.對於公司的人員而言,可能隸屬於某一個單位,另就部門單位而言,一個單位可能會擁有一個以上的人員。在財產部份,許多財產項目可能會同樣被某一個單位所保管,亦即一個單位可能同時保管多項的財產項目,而許多財產項目也可能會位於同一個地點位置。7.每當進行一項財
19、產盤點作業時,系統必須清楚紀錄盤點的財產項目、盤點人員、盤點狀況、盤點日期,並描述財產的詳細位置,同時系統必須對每一個財產盤點作業,給予一個獨立的盤點紀錄編號,以方便日後管理者對於盤點記錄資料的查詢等資料處理。45/1021.1.資料庫設計資料庫設計46/102由實體關係模型轉換成一組關聯表集合這些關聯表必須經過正規化處理後並確認綱要47/102依據綱要產生可以建立關聯的SQL單位資料關聯表單位資料關聯表Unit屬性意義屬性意義屬性名稱屬性名稱資料型態資料型態鍵別鍵別參考關聯參考關聯單位編號Unit_IDintPK單位名稱Unit_Namechar 20Create table unit(Un
20、it_ID int Not Null,Unit_Name char(20),Primary key(Unit_ID)財產資料關聯表財產資料關聯表Goods屬性意義屬性意義屬性名稱屬性名稱資料型態資料型態鍵別鍵別 參考關聯參考關聯自動編號Goods_IDintPK單位編號Unit_IDintFKunit財產名稱Goods_Namechar 100財產編號Goods_Codechar 20財產建立日期Goods_Coming_Day datetime財產功能Goods_Functionvarchar 255 數量Goods_Numberint照片Photovarchar 100 RFID卡號Goo
21、ds_Tagvarchar 20位置編號Area_IDintFKareaCreate table goods(Goods_ID int Not Null,Unit_ID int,Goods_Name char(100),Goods_Code char(20),Goods_Coming_Day datetime,Goods_Function varchar(255),Goods_Number int,Photo varchar(100),Goods_Tag varchar(20),Area_ID int,Primary key(Goods_ID),Foreign key(Unit_ID)refe
22、rences unit,Foreign key(Area_ID)references area)48/1022.2.資料庫實作資料庫實作使用SQL Server 建立(1)資料庫(2)關聯表格(3)關聯表之間的參考(4)關聯表關係圖49/102(1)(1)建立資料庫建立資料庫新增一個wealth資料庫50/102(2)(2)建立關聯表格建立關聯表格新增並定義關聯表(Unit關聯表)51/102(2)(2)建立關聯表格建立關聯表格定義盤點狀況關聯表(Situ)定義盤點位置關聯表(Area)定義人員資料關聯表(Member)定義財產資料關聯表(Goods)定義盤點紀錄關聯表(Checkgoods)
23、52/102(3)(3)建立關聯表之間的參考建立關聯表之間的參考參考的設定是:對於關聯表中所存在的外來鍵,將其指定到所參考關聯表的主鍵屬性中。例如:範例資料庫中的Member 人員資料關聯表存在外來鍵Unit_ID的member關聯表外來鍵所參考的unit關聯表53/102Goods關聯表的Area_ID外來鍵設定54/102Goods關聯表的Unit_ID外來鍵設定55/102Checkgoods關聯表的Goods_ID外來鍵設定56/102 Checkgoods關聯表的Member_ID外來鍵設定57/102Checkgoods關聯表的Situ_ID外來鍵設定58/102(4)(4)建立關
24、聯表關係圖建立關聯表關係圖wealth 資料庫的關聯表關係59/1024-6 SQL4-6 SQLSQL(Structured Query Language)結構化查詢語言,是使用者用來操作DBMS 的重要橋樑。SQL 語言依指令功能,可以分成三類資料定義語言DDL(Data Definition Language):建立資料表、視界和索引等的SQL 指令。資料處理語言DML(Data Manipulation Language):資料表記錄插入、刪除、更新和查詢指令。資料控制語言DCL(Data Control Language):資料庫安全管理的權限設定指令。60/102內容大綱內容大綱1
25、.資料庫與關聯表的建立2.資料新增3.資料擷取4.資料修改5.資料刪除61/1021.1.資料庫與關聯表的建立資料庫與關聯表的建立建立資料庫的語法如下Create database 資料庫名稱例如建立一個名為 MyWealth 資料庫,則SQL 的語法為:Create database MyWealth 62/102刪除資料庫的語法如下:Drop database 資料庫名稱例如要刪除一個名為 MyWealth 資料庫,則SQL 的語法為:Drop database MyWealth63/102關聯表的建立 一個關聯表的建立必須指定關聯表的名稱、屬性集合、各屬性的資料型態、主鍵,有時候也會包含
26、外來鍵等必要成員。以單位資料關聯表(Unit)為例,建立該關聯表的SQL指令為:Create table unit(Unit_ID int Not Null,Unit_Name char(20),Primary key (Unit_ID)64/102建立盤點狀況關聯表(Situ)的SQL指令為:建立盤點位置關聯表(Area)的SQL指令為:Create table situ(Situ_ID int Not Null,Situ_Name char(20),Situ_Desc varchar(255),Primary key(Situ_ID)Create table area(Area_ID in
27、t Not Null,Area_Txt varchar(255),Primary key(Area_ID)65/102建立Member關聯表的SQL指令為:Create table member(Member_ID int Not Null,Unit_ID int,Member_Name char(20),Member_title char(20),Member_phone char(20),Member_Address char(100),Member_mail char(30),Login_ID char(10),Login_PWD char(10),Primary key(Member_
28、ID),Foreign key(Unit_ID)references unit)66/102建立Goods關聯表的SQL指令為:Create table goods(Goods_ID int Not Null,Unit_ID int,Goods_Name char(100),Goods_Code char(20),Goods_Coming_Day datetime,Goods_Function varchar(255),Goods_Number int,Photovarchar(100),Goods_Tag varchar(20),Area_ID int,Primary key(Goods_I
29、D),Foreign key(Unit_ID)references unit,Foreign key(Area_ID)references area)67/102建立Checkgoods關聯表的SQL指令為:刪除關聯表的語法如下:Drop table 關聯表名稱例如要刪除一個名為 Checkgoods關聯表的SQL為:Drop table checkgoodsCreate table checkgoods(Id uniqueidentifier default newid()Not Null,Goods_ID int,Member_ID int,Situ_ID int,Check_Day da
30、tetime,memo varchar(255),Primary key(id),Foreign key(Goods_ID)references goods,Foreign key(Member_ID)references member,Foreign key(Situ_ID)references situ,)68/1022.2.資料新增資料新增資料新增的SQL命令結構如下:範例1:新增一筆單位編號為1號、單位名稱為資管系辦的單位資料記錄。INSERT INTO 關聯表 (屬性1,屬性2,屬性N)VALUES (資料值1,資料值2,資料值N)INSERT INTO unit (Unit_ID,
31、Unit_Name)VALUES (1,資管系辦資管系辦)69/102資料新增的SQL命令中,若是所給定新增記錄資料是依照關聯表建立時的屬性順序,則在新增敘述中可以省略屬性名稱的部份敘述。範例2:Unit關聯表中的屬性依序是Unit_ID,Unit_Name,因此原本用來新增2號單位,名稱為RFID實驗室的新增命令可以改寫成:範例3:新增一筆單位編號為3號、單位名稱為電腦教室的單位資料記錄,其SQL命令可以被敘述成下列的型式:INSERT INTO unit VALUES(2,RFID實驗室實驗室)INSERT INTO unit (Unit_Name,Unit_ID)VALUES(電腦教室電
32、腦教室,3)或 INSERT INTO unit (Unit_ID,Unit_Name)VALUES(3,電腦教室電腦教室)70/102範例4:新增一筆單位編號為9號,但單位名稱目前並不清楚的單位資料記錄。範例5:新增一筆盤點狀況記錄,將狀況編號Situ_ID設定為1號、狀況名稱Situ_Name指定為正常,且於備註Situ_Desc屬性中註明使用情況正常。INSERT INTO situ (Situ_ID,Situ_Name,Situ_Desc)VALUES (1,正常正常,使用情況正常使用情況正常)INSERT INTO unit (Unit_ID)VALUES(9)71/102範例6:新
33、增一筆盤點位置資料記錄,指定位置編號Area_ID為11號,且位置名稱為展示架第一層,則此新增於盤點位置關聯表Area的新增指令如下:INSERT INTO area (Area_ID,Area_Txt)VALUES(11,展示架第一層展示架第一層)72/102範例7:在人員關聯表Member之中新增一筆資料記錄,假設員工編號為1、單位編號為1、姓名為吳啟源、職稱為助理、電話為3601、地址為500 台中縣中山路1號、E-mail為user1ctu.edu.tw、帳號為user1、密碼為passwd1,則此新增命令可表示如下:INSERT INTO member (Member_ID,Unit
34、_ID,Member_Name,Member_title,Member_phone,Member_Address,Member_mail,Login_ID,Login_PWD)VALUES(1,1,吳啟源吳啟源,助理助理,3601,500 台中縣中山路台中縣中山路1號號,user1ctu.edu.tw,user1,passwd1)73/102範例8:若有一新的財產項目,其系統給定的自動編號為1、單位編號為1、財產名稱為ATA-133介面硬碟機、財產編號為09509061-1、財產建立日期為2006-08-02 00:00:00.000、財產功能為HP2410PDA、數量為1、目前沒有相關的照片
35、檔案資訊、RFID卡號為A6CCCDD1、位置編號為11。由於此新增資料目前沒有照片檔案資訊,因此財產資料記錄的新增僅須針對已知的九項屬性進行設定,其SQL:INSERT INTO goods (Goods_ID,Unit_ID,Goods_Name,Goods_Code,Goods_Coming_Day,Goods_Function,Goods_Number,Goods_Tag,Area_ID)VALUES (1,1,ATA-133介面硬碟機介面硬碟機,09509061-1,2006-08-02 00:00:00.000,HP2410PDA,1,A6CCCDD1,11)74/102範例9:財
36、產編號1號的商品進行盤點,盤點人員的編號為1號員工,盤點結果的狀態編號為1號狀態,盤點日期為2009-10-11 00:00:00.000,並在盤點記錄中標示財產位置為右方。INSERT INTO checkgoods (Goods_ID,Member_ID,Situ_ID,Check_Day,memo)VALUES (1,1,1,2009-10-11 00:00:00.000,右方右方)75/1023.3.資料擷取資料擷取資料擷取亦即一般所謂的資料查詢,其指令敘述結構表示如下:select all distinct top|as from where|group by having orde
37、r by|76/102在一般的資料擷取應用案例中,資料擷取的動作多半是結合SELECT、FROM、WHERE 敘述所組合而成的擷取命令,如下所示。SELECT 是指所要投影的屬性欄位FROM 是資料擷取所作用的關聯表格名稱WHERE 則是表示在關聯表格中選取值組的條件SELECT FROM WHERE 77/102範例資料內容範例資料內容78/102範例資料內容範例資料內容79/102範例10:擷取財產資料關聯表中,財產數量超過30個以上的財產編號、財產名稱,以及數量。SELECT Goods_Code,Goods_Name,Goods_NumberFROM goods WHERE Goods
38、_Number3080/102範例11:擷取人員資料關聯表中,職稱為助理的人員姓名、電話,以及地址。範例12:擷取財產資料關聯表中,數量大於36以上且屬於1號單位所保管的財產編號、財產名稱,與數量。SELECT Member_Name,Member_phone,Member_AddressFROM member WHERE Member_title=助理助理SELECT Goods_Code,Goods_Name,Goods_NumberFROM goods WHERE Goods_Number36 and Unit_ID=181/102範例13:在下面的SQL命令中,因為沒有用來篩選值組的W
39、HERE敘述,因此將會擷取出所有存在於Unit 關聯表中資料值組的單位編號Unit_ID與單位名稱Unit_Name擷取出來。範例14:列出所有屬於2號單位的所有人員資訊。SELECT Unit_ID,Unit_NameFROM unitSELECT *FROM memberWHERE Unit_ID=282/102範例15:找出所有屬於RFID實驗室的人員,列出這些人員的姓名與職稱。上述的SQL資料擷取處理命令亦可改寫成下面的型式:SELECT Member_Name,Member_titleFROM member,unitWHERE Unit_Name=RFID實驗室實驗室 and mem
40、ber.Unit_ID=unit.Unit_IDSELECT Member_Name,Member_title,Unit_NameFROM member join unit on member.Unit_ID=unit.Unit_IDWHERE Unit_Name=RFID實驗室實驗室 83/102範例:我們想要列出所有電話號碼,若使用左邊的敘述方式,我們會發現這些電話號碼中許多是重複出現的(這是因為有些人員是共用同一分機號碼的),因此我們可以使用右下的第二種敘述方式,利用distinct的方式來過濾掉重複出現的電話號碼。SELECT Member_phoneFROM member SELEC
41、T DISTINCT Member_phoneFROM member Distinct 84/102範例16:找出所有屬於RFID實驗室的人員,列出這些人員的姓名與職稱。範例16的例子在先前我們曾經以JOIN的形式處理,然而我們也可以利用下面的巢狀形式來達成。SELECT Member_Name,Member_titleFROM memberWHERE Unit_ID =(SELECT Unit_ID FROM unit WHERE Unit_Name=RFID實驗室實驗室 )85/102範例17:找出所有數量超過20以上的財產項目,列出保管這些財產的有關單位的名稱。SELECT Unit_N
42、ameFROM unitWHERE Unit_ID IN (SELECT DISTINCT Unit_ID FROM goods WHERE Goods_Number20 )86/102聚合函數聚合函數(Aggregates)(Aggregates)Count()Sum()Avg()Max()Min()87/102範例18:求取屬於1號單位的人員共有多少人。範例19:求取由RFID實驗室所保管的財產數量總數是多少。SELECT COUNT(*)FROM memberWHERE Unit_ID=1SELECT SUM(Goods_Number)FROM unit,goodsWHERE Unit_
43、Name=RFID實驗室實驗室 and unit.Unit_ID=goods.Unit_ID88/102範例20:求取由RFID實驗室所保管的財產項目中,財產平均數量是多少。範例21:求取所有的財產項目中,數量最多與最少的各是多少。SELECT AVG(Goods_Number)FROM unit,goodsWHERE Unit_Name=RFID實驗室實驗室 and unit.Unit_ID=goods.Unit_IDSELECT MAX(Goods_Number),MIN(Goods_Number)FROM goods89/102範例22:求取由RFID實驗室所保管的財產項目中,數量最多的
44、值是多少?並以最大數量來標示最大數量的屬性欄位名稱。SELECT MAX(Goods_Number)AS 最大數量最大數量FROM unit,goodsWHERE Unit_Name=RFID實驗室實驗室 and unit.Unit_ID=goods.Unit_ID90/102範例23:將所有人員依照所屬的單位分群,並計算各單位所屬人員的數量各有多少人,列出這些單位的編號與所屬的人員人數。SELECT Unit_ID,COUNT(*)AS 人數人數FROM memberGROUP BY Unit_IDGroup By 與與 HAVING91/102範例24:將所有人員依照所屬的單位分群,並計算
45、各單位所屬人員的數量各有多少人,列出其中人數大於1人以上的單位的編號與所屬的人員人數。SELECT Unit_ID,COUNT(*)AS 人數人數FROM memberGROUP BY Unit_IDHAVING COUNT(*)192/102Like的敘述是資料庫資料擷取中,對於文字型態之屬性所採用的萬用字元表示方式。%:是以百分比符號表示零個或多個字元 _ :是以底線符號表示任一個字元範例25:找出財產資料關聯表之中,財產名稱包含字母A的財產項目,列出這些財產的編號與名稱。SELECT Goods_Number,Goods_NameFROM goodsWHERE Goods_Name LI
46、KE%A%萬用字元萬用字元93/102範例26:找出人員資料關聯表之中,地址是位於彰化市的人員,列出這些人員的姓名與地址。範例27:找出財產資料關聯表之中,財產名稱長度為3個字,且其中第二個字必須是邏的財產項目,列出這些財產項目的編號與名稱。SELECT Member_Name,Member_AddressFROM memberWHERE Member_Address LIKE%彰化市彰化市%SELECT Goods_Number,Goods_NameFROM goodsWHERE Goods_Name LIKE _邏邏_94/102Order By 是對於擷取結果進行排序的命令敘述,主要的排
47、序方式有兩種:ASC:是由小至大的遞增排序DESC:是由大至小的遞減排序範例28:擷取所有的人員編號、姓名,與地址,並依照人員編號由大至小依序排列輸出。SELECT Member_ID,Member_Name,Member_AddressFROM memberORDER BY Member_ID DESC排序排序95/102範例29:找出所有數量大於20的財產項目,列出這些財產項目所屬單位編號、財產名稱、數量,並依照數量大小,由少至多依序排列輸出。SELECT Unit_ID,Goods_Name,Goods_NumberFROM goodsWHERE Goods_Number20ORDER
48、BY Goods_Number ASC96/1024.資料修改資料修改資料修改的SQL語法結構如下UPDATE 關聯表關聯表 SET 屬性屬性1=新值新值1,屬性屬性2=新值新值2,屬性屬性N=新值新值NWHERE 條件條件97/102範例30:修改財產資料關聯表中的值組資料,將其中財產編號09609025-1 的財產項目名稱修改為筆記型電腦。UPDATE goodsSET Goods_Name=筆記型電腦筆記型電腦WHERE Goods_Code=09609025-1Goods_NameGoods_CodeATA-133介面硬碟機 09509061-1 安控開發模組 600SK-003 巡邏
49、機 09511336-1 zigbee設備組 RFID-004 手提電腦 09609025-1 無線AP RFID-021 Goods_NameGoods_CodeATA-133介面硬碟機 09509061-1 安控開發模組 600SK-003 巡邏機 09511336-1 zigbee設備組 RFID-004 筆記型電腦 09609025-1 無線AP RFID-021 執行前的狀態執行後的結果98/102範例31:修改財產資料關聯表中的值組資料,將其中財產編號09609025-1的財產項目名稱修改為迷你筆電,並將財產數量修改為5。範例32:修改財產資料關聯表中的值組資料,將其中財產編號09
50、609025-1的財產數量增加12個。UPDATE goodsSET Goods_Name=迷你迷你筆筆電電,Goods_Number=5WHERE Goods_Code=09609025-1UPDATE goodsSET Goods_Number=Goods_Number+12WHERE Goods_Code=09609025-199/102範例33:修改財產資料關聯表中的值組資料,將其中原本置於展示架第一層的財產名稱全部修改為高速磁碟機。UPDATE goodsSET Goods_Name=高速磁碟機高速磁碟機WHERE Area_ID =(SELECT Area_ID FROM area