You are on page 1of 26

資資資資資資資

SQL server 資資

資資資資資 資資資資資資資資資
資資資資資資資資資資資資資
資資資資資SQL Server資資資資資資資資資資資資
資資資




資資資資資資 資 資 資 資 資 P1
資資資資資資 資 資 資 資 資 P3
資資資資資資 資 資 資 資 資 P5
正規化的練習 資 資 資 資 資 P6
ER 資資資 資 資 資 資 資 資 P11





資資資資資資 資 資 資 資 資 P14
資資資資資資 資 資 資 資 資 P15
資資資資資資 資 資 資 資 資 P16
資資資資資資 資 資 資 資 資 P16
資資資資資資 資 資 資 資 資 P16

鍵的判別 資 資 資 資 資 資 P12


資資(join)資資 資 資 資 資 資 P18
資資資資資資 資 資 資 資 資 P19

資資資資資資資資資資
 資資資資資資資資資資
資資資http://192.168.184.250/lwcheng/
資資資http://120.105.184.250/lwcheng/

 SQL 資資資資資
http://www.1keydata.com/tw/sql/sql.html

 SQL 資資資
http://idd.ccnet.com.tw/ebook/SOL.htm

 PostgreSQL 7.4devel 資資資
http://jsp.dfes.tpc.edu.tw:8080/pgsqldoc/index.html

 Transact-SQL 資資 (資資資資資)資
http://technet.microsoft.com/zh-tw/library/bb510741.aspx

資資資資資資資資資資資資資資資資資資資資資資資資資資資資資資資資資資資資資

資資資資資

資資資資資資

資資資資資資資資資

資資資資資資資資資資資資資資資資資資資資資資

1.

檔案和檔案之間沒有關聯

   拍賣網站   前 資資資資資 資

2.

人為疏失 ┌─Misplace 資資資資

    └──→  產 資資資資資 資 資

├─資資

    └──→  訂 資資資資資 資 資 資

└─資資

-1-

資資資資資資資

SQL server 資資

    └──→  會 資資資資資 資

3.

資資資資資資資Ad-hoc query資資資資資

  人 資
   ↓
Sequential Access File System資資資資資資資資資資資資資資
   ↓
Direct Access File System資資資資資資資資資資;速度快
 ★因為檔案系統只不過是將人工檔案電子話紙少了一個缺點?仍有1.3缺點
 人 資  ┌循序存取檔案系統┐
  ↓  │        │ 最大的缺點:Data Dependence資資資資資資資
電子檔案─┤        ├  檔案中的資料格式(長度、型態……)
     │        │      改變,會影響程式碼
  ↓  └直接存取檔案系統┘
階層式(樹狀) → 網路式 → 關聯式 → 物件導向 → 物件導向關聯系統 → XML
資資資

1~3學號
資資資資資

樹 樹 :一個父節點,有多個子節點;
    一個子節點,有一個父節點。

網路式:一個父節點,有多個子節點;
    一個子節點,有多個父節點。

資資

資資

關聯式資料模型:以資料表存放資料

優點:Data Independence(資料獨立)

Data Independence(資料獨立):
      資料格式改變不會影響程式碼。

EX:找王大同修產些課
   語法:Select 資資資資資
資資資資資資Form 資資資
資資資資資資Where 學號=(Select 資 資 資 資 Form  修課, Where 姓名=‘王大同’)
Primary key資資資資資資資資資資資資資資不能重複且不能空白樹
Homogeneous Distributed Database System
Heterogeneous Distributed Database
-2-

資資資資資資資 SQL server 資資 (同質分散):企業產部將資料分布在不同的 System 節點 (異質分散):將不同企業之資料整合在一起   [OLAP] Online Transaction Process資資資資資資資資資資:對資料倉儲(Data Warehouse樹樹樹 資料做已設定條件的產詢 如:茶葉蛋在台北地區 2007第一季之銷售量 Data Mining資資資資資資資資資資資資資Data Warehouse資中的資料做未設定條件的產詢   如:消費者中的購物車有產些組合 資Data資資資資:表示某項事實的語言或符號。 →Information資資資資:將資料經過整理及處理後即成為資訊。 →Knowledge資資資資:將資訊歸納出一眼無法看穿的事實。 →Intelligence資資資資 資料庫管理系統 →  資料倉儲系統 →  知識管理 管理資料庫之軟體 → [ DBMS ] Database Management System資資資資資資資資資 [ DBA ] Database Administrator資資資資資資資資資資Database資資資資資資資Database System資資資資資資資 End Users(直接使用者):    直接和資料庫連接使用。 Application Programs(應用程式) -3- .

資資資資資資資 SQL server 資資 資資資資資 Application Programs資資資資資資 Anomaly(異常現象) Candidate key(候選鍵) Data Redundancy(資料多餘) Database System(資料庫系統) Data Independence(資料獨立) Data Warehouse(資料倉儲) Database Consistency(資料庫之一致性) Denormalization(反正規化) Delete Anomaly(刪除異常) Direct Access File System(直接存取檔案系統) [ DBA ] Database Administrator(資料庫管理師) Entity Integrity(樹樹 整合現制條件) Functional Dependency(功能相依性) Insert Anomaly(新增異常) Partial Functional Dependency(部份功能相依性) Repository Definition(儲存區) Referential Integrity資(資資 整合現制條件) Transitive Functional Dependeney(遞移相依性) Update Anomaly(更改異常) Attribute(屬性) Data(資料) Database(資料庫) Data Mining(資料採礦) End Users(直接使用者) Field(欄位) Foreign key(外來鍵) Information(資訊) Intelligence(智識) Key(鍵) Knowledge資資資資 NULL(空產) Normalization(正規化) Primary key(主鍵) Query(產詢) Record(紀錄) Relation(關聯) Row(列) ROLLUP→ 一維 CUBE → 二維 Super Key(超級鍵) View(視界) Sequential Access File System(循序存取文件系統) Homogeneous Distributed Database System(同質分 [OLAP] Online Transaction Process (線上交易性程 資資 資資 資 DBMS資Database Management System(資料庫管理系統) 資ER Diagram資Entity-Relationship Diagram(資資資資資) Heterogeneous Distributed Database System(異質分散)  Anomaly(異常現象):因為資料表設計不良易產生。  Attribute(屬性):資料庫綱要記載著實體的一個或多個屬性。  Candidate key(候選鍵):用來辨別資料庫中唯一的一筆資料的欄位組合,則為候選鍵;一個資料表可有一個 或一個以上的候選鍵,最少欄位組合之候選建中可作為主鍵。  Data Independence(資料獨立):資料格式改變不會影響程式碼。  Data Mining(資料採礦):對資料倉儲中的資料做未設定條件的產詢。  Data(資料):表示某項事實的語言或符號。  Database Consistency(資料庫之一致性):一致性表示填入資料庫的資料必須是有效的。  Entity Integrity(樹樹 整合現制條件):一個關聯表之限制條件 ex:樹樹樹樹樹樹  End Users(直接使用者):直接和資料庫連接使用。 -4- .

資資資資資資資 SQL server 資資  資ER Diagram資Entity-Relationship Diagram (實體關聯圖):描述實體和其關聯之圖。  Field(欄位):一筆資料的儲存單位,一筆資料由多個欄位組成,相當於資料表的直行,又稱為屬性。  Functional Dependency(功能相依性):一個資料表中,欄位與欄位之產的對應關係。  Foreign key(外來鍵):在一個資料表的某個欄位,其產參照產外一資料表之主索引。  Homogeneous Distributed Database System(同質分散):企業產部將資料分布在不同的節點。  Heterogeneous Distributed Database System(異質分散):將不同企業之資料整合在一起。  Information(資訊):將資料經過整理及處理後即成為資訊。  Key(鍵):為屬性之一,用來排序或辨識。每資料表有一主鍵,它可以辨識唯一的一筆資料。  Knowledge(知識):將資訊歸納出一眼無法看穿的事實。  Normalization(正規化):將一個關聯(資料表)的欄位重新整理(分割)以避免錯誤。  NULL(空產):為關聯式資料表中某一欄位沒有產。  [OLAP] Online Transaction Process(線上交易性程序):對資料倉儲中的資料做已設定條件的產詢。  Primary key(主鍵):永不改變的產,不能為虛產(設定某些欄位的產不能重複且不能空白。)  Query(產詢):資料表中讀取資料的一個機制,大部分的 DBMS 資 SQL 格式來取資料。  Referential Integrity(資資 整合現制條件):參考完整性 ex:利用外來鍵來限制 2 個資料表間產的關係。  Record(紀錄):資料表中的資料,由一組產組所組成,相當於資料表的橫列。  Relation(關聯):關聯式資料庫中的關聯是由行和列所組成,相當於資料表。  Repository Definition(儲存區):為資源的集合區。資料可以被取用,可包括多個資料庫及一個共同引擎。  Row(列):一列表示一組屬性(樹樹樹樹樹)樹  Super Key(超級鍵):除了候選鍵以外的唯一識別碼。  Unique Identifier(唯一識別碼):可找到唯一一筆資料的屬性子集。  View(視界):由一連串 SQL 指令構成,存於資料庫伺服器中,是虛擬資料表。  樹樹樹樹樹樹 (one-to-one relationship):在關聯式資料庫中兩份資料表之間的一種關聯性,第一份資料表的單一資料列 只 能 關 聯 於 第 二 份 資 料 表 的 單 一 資 料 列 , 第 二 份 資 料 表 的 資 料 列 也 只 能 關 聯 於 第 一 份 資 料 表 的 單 一 資 料 列 。  樹樹樹樹樹樹 (one-to-many relationship):在關聯式資料庫中兩份資料表之間的一種關聯性,第一份資料表的單一資料列 可 以 關 聯 於 第 二 份 資 料 表 的 一 或 多 個 資 料 列 , 但 第 二 份 資 料 表 的 資 料 列 只 能 關 聯 於 第 一 份 資 料 表 的 單 一 資 料 列 。  樹樹樹樹 (denormalize):指在資料表中導入冗餘,以納入相關資料表的資料。  樹樹樹樹樹樹 (many-to-one relationship):兩份資料表之間的一種關聯性,一份資料表中的單一資料列可以關聯於產一份 樹樹樹樹樹樹樹樹樹樹樹  樹樹樹樹樹樹 (many-to-many relationship):兩份資料表之間的一種關聯性,每份資料表中的資料列,在相關資料表中都 樹樹樹樹樹樹樹樹樹樹  資資 (deadlock):各鎖定一段資料的兩位使用者試圖取得產一方資料片段的鎖定狀況。  樹樹樹 (dependencies):相依於相同資料庫中其他物件的物件。  樹樹 (index):在關聯式資料庫中,一個可根據索引鍵產,用來快速存取資料表資料列之資料的資料庫物件。  樹樹 (record):當做一個單元來處理的資訊之相關欄位 (樹樹樹) 群組。在關聯式資料庫中,記錄通常稱為資料列。  樹樹樹樹 (unique index):不允許任兩個資料列有相同索引產的索引,因而會禁止重複的索引或索引鍵產。  實體名稱 (physical name):檔案或鏡像檔案所在的路徑。  樹樹樹樹樹 (entity integrity):指每個資料表中每個資料列都可有唯一識別方式的狀態。  複合式索引 (composite index):利用資料表的多個資料行來建立資料索引的索引。 -5- .

資資 樹 │資資複合主鍵(AB)樹樹樹樹樹樹樹(B)樹 資非鍵產樹非鍵產之間存在樹樹樹樹樹 樹資資資      可以決定其他非鍵產(C) 資B or C資 B or C資資 樹 └→R1資A . 樹 . B . C資 資R(A .資資資資資資資 SQL server 資資  複合索引鍵 (composite key):兩個或更多資料行所組成的索引鍵。  聯合資料表 (junction table):建立其他資料表間之關聯性的資料表。  資資 (join):指結合兩份或更多資料表的產容,以及產生一個納入了各份資料表之資料列和資料行的結果集。  識別碼 (identifier):資料庫中的物件名稱。  關聯式資料庫 (relational database):一種資料庫或資料庫管理系統,它會將資料表中的資訊儲存成資料列和資 料行,而且會使用某份資料表之指定資料行的資料來尋找產一份資料表之其他資料,藉以進行搜尋。 資資資  1NF(First Normal Form資  2NF(Second Normal Form資  3NF(Third Normal Form資  BCNF(Boyce_codd Normal Form資  4NF(Fourth Normal Form資  5NF(Fifth Normal Form資 ◎符合第一正規化(1NF)的資料表之五個條件    1.每個儲存格為單產     2.欄位的次序可以互換   3.列的次序可以互換    4.同一欄的產為同一型態   5.沒有完全一樣的兩筆資料 ◎符合第二正規化(2NF)的資料表之兩個條件 ◎符合第三正規化(3NF)的資料表之兩個條件   1.屬於1NF   1.屬於2NF   2.且不具部份功能相依性   2.且不具遞移功能相依性     假如有部份功能相依性就不是2NF     假如有遞移功能相依性就不是3NF       ┌─↓ 樹樹樹樹樹樹樹      ┌──↓ 樹樹樹樹樹 資 ┌R資A . B資  因為A主索引 A→B 且 B→C 資 └→R2資B . C資      => A→C(稱為遞移相依性) ◎BCNF: 樹樹 BCNF 的關聯並須滿足"所有決定因子皆為候選鍵" ◎符合第四正規化(4NF)的資料表之兩個條件   1.有BCNF  2.且沒有多產相依情形 資資資資資資資資資R(A,B,C)…………主索引為ABC          當A→→B…………………當A對應B時,B有多個產相對應          當A→→C…………………當A對應C時,C有多個產相對應          (B和C完全沒有邏輯上的關係) 功能相依性A→ B:A的每一個產可以對應到〝一個產B產(最多一個,最少0個)      * A→B(A決定B 或 B功能相依於A)  -6- .

資資 .資資資資資資資 SQL server 資資 R 資 資 樹 樹 樹 樹 資 資 資 資 資 資 樹 資 資 找出功能相依性...  AB→C  AC→B 資 BC→A 樹樹 樹樹 樹樹 10 15 10 15 10 5 150 150 50 15 5 75 找出功能相依性...  售價+數量→小計 資 售價+小計→數量 資 數量+小計→售價 公式A: 1:1 或 1:N 會將1的主索引拿到N中當外來鍵。 公式B: M:N時會產生一個關聯實體,其主鍵是由相關實體的主鍵組合而成。 樹 樹 樹樹 資資 資資 導師 S01 S02 S03 S04 樹 S50 S51 S52 樹 S99 樹樹樹 李小明 陳小明 樹 樹 樹 樹樹樹 李美義 樹 樹 資三A 資三A 資三A 資三A 樹 樹 資三B 資三B 樹 樹 資資資 資資資 資資資 資資資 樹 樹 資資 資資 樹 樹 為了避免導師名子改變時,可能更新所不一致 ( 先找出功能相依性  口 學號→姓名  口 學號→班級  口 學號→導師  口 班級→學號  口 班級→姓名  口 班級→導師             ┌──↓ ┌→樹 樹 樹 樹 樹 . 資資 . 導師) 資資 導師 資三A 資資資 資三B 資資 樹 樹 樹樹 資資 課程 分數 Q1:有無更新的異常?新增的異常?刪除異常? -7- . 導師樹 │   *主索引可以決定有非主鍵的欄位 │   *去除非主鍵之間的功能相依 └→導師(資資 .

E)        ↑─┘ ① 屬於 3 NF ② 資資資資R1樹資. 樹. 課程 . E樹            └──↑ Ans樹R1樹A .資. B樹 R2樹B . B樹 Q2:      ┌─↓ 資資資資R樹 A . E樹 R2樹B .樹. D樹 R2樹B . 資. C樹 R2樹B .B)R2樹資. 分數) Q1:      ┌─↓──↓ 資資資資R樹 A .D) 資資資資資資資 ┌─↓ Q7資資R樹資. D) 資資資資資資 └─↑ ① 屬於 2 NF ② 資資資資R1樹資. 資. E樹 Ans樹R1樹A . B . 資. D樹 Q6資資R樹資. B .資. C . 資. 樹. B . D樹 Ans樹R1樹A .樹樹 資資資資資R3樹樹. 姓名) 修課(樹 樹 . D 樹 資資資      ┌─↓ 資資資資R樹 A . C樹 資資 R3樹D . C樹 R2樹C . C . B . 樹. D 樹            └──↑ Ans樹R1樹A . D樹 R2樹B . B . E樹 Q5:      ┌───────↓ 資資資資R樹 A . D . 樹. D . D樹 R2樹B . 資. D . B .E) R2樹樹.資. E樹 Ans樹R1樹A . D .D) Q9資資R樹資. E樹 R3樹C . B . C樹   或 R1樹C . C . D) 資資資資資資資 └─↑  ①屬於 1 NF  ②正規化 R1樹資. B . C樹 R3 樹A .資資資R2樹樹. C . B . B .樹資資R2樹樹. D) 資資資資資資資 └─↑  ①屬於 2 NF  ②正規化 資資R1樹資.D) Q8資資R樹資. C樹 Q4:      ┌─↓  ┌──↓ 資資資資R樹 A . C .B) 樹樹 資資資 -8- .資資資資資資資 S01 S01 S01 S02 S02 S03 樹樹樹 樹樹樹 樹樹樹 李小明 李小明 陳生 SQL server 資資 VB Linux Database VB Linux Database 10 50 60 10 50 60 資Ans:有更新的異常、有新增的異常、有刪除異常 Q2:主鍵為? 資Ans:學號 課程 Q3:找出功能相依性 資Ans:學號→姓名、     學號+課程→姓名、     學號+課程→分數     學號+姓名+課程→分數、     學號+課程+分數→姓名 Q4:如何分割? 資Ans樹 樹 樹 樹 樹 樹 . C . D樹   或 R1樹A .

樹 樹 資資 ↑──┘× BCNF 3NF ( 沒有部份相依功能性, 沒有遞移相依性) 不用正規化 或 R樹樹.資.資 樹 R2樹 資.資 樹 R2樹 資.樹 樹 R2樹 資.樹 樹 R樹 資.資.資.樹 樹 資資資 └─↑× 2NF 1NF ( 資資資資資資資資 ) R1樹 資.樹 樹 資資資 ↑─┘× BCNF 3NF( 沒有部份相依功能性, 沒有遞移相依性) R1樹 資.資.樹 樹 R2樹 資.樹 樹 樹樹 主修科目 指導老師 100 150 樹樹 資資 樹樹樹 陳三 200 250 300 300 樹樹 樹樹 資資 樹樹 陳育良 樹樹樹 李培育 陳育良 資資資資資資資資資資資  * 每科主修有多個學生選  * 一個教授指導一個主修 解一: PK(主索引)資 資 資 資 資 資 FD(功能相依性):指導老師→主修科 樹 樹樹: 3NF 資資資樹 主修(學號,主修科目樹 指導(指導老師,主修科目) 資資 解二: PK(主索引):學號+指導老師 FD(功能相依性):指導老師→主修科 樹 樹樹: 1NF 資資資樹 樹學號,指導老師樹 樹指導老師,主修科目) 資資 ┌─↓─↓ 資資 樹樹 主修科目 指導老師 主修科目 100 150 200 250 300 300 樹樹 資資 樹樹 樹樹 資資 樹樹 樹樹樹 陳三 陳育良 李培育 樹樹 資資 樹樹 資資 樹樹 指導老師 指導老師 主修科目 100 150 200 250 300 300 樹樹樹 陳三 陳育良 樹樹樹 李培育 陳育良 樹樹樹 陳三 陳育良 李培育 樹樹 資資 樹樹 資資 資資資( 樹樹樹 )資資資 -9- .樹 樹 資資 ↑──┘× BCNF 3NF( 沒有部份相依功能性, 沒有遞移相依性) R1樹 資.B) R樹 資.資.資資資資資資資 SQL server 資資 R樹 資.樹 樹 R樹 資.樹 樹 R樹 資.樹 樹 資資資 └─↑× 3NF 2NF ( 因無部份功能相依性, 但有遞移相依性,所以不是 3NF ) R1樹 資.資.

B .資資資資資資資 SQL server 資資 R( D . C . A .10 - . E ) 資資資資資 ↑─↑ 資 資 樹 資 資 樹 樹 樹 樹 樹 樹 樹 資 樹 樹 樹 樹 樹 樹 樹 資 樹 資 樹 樹 資資資( 資資資資 ): A→C A→E C→E E→C 資資資資:(框框產的才是正確答案) 資資R1樹資,C,E)R2樹資,A,B) 資資R3樹樹,E)R 4(資樹樹樹  或 R1樹資,C,E)R2樹資,A,B) 資資資R3樹樹,E)R 4(資,E) R(A,B………) 當A→B 且 B→A 時 A可為主鍵 或者 B為主鍵 1 2 資 資 資 資 資 資 資 ×→A  A為主鍵 3 資資×→資資資資資×→A 時 A,B不為主鍵     ↓─────┐ R樹樹,A,B,D,E) 資資資( 樹樹樹 ): C  FD( 資資資資 )資資資資資資資資資資       └─↑ 資資資資樹 資資R1樹資,D) 資資R2樹資,A) 資資R3樹樹,B,E) 資 資 樹 資 資 樹 樹 樹 樹 樹 樹 樹 資 樹 樹 樹 樹 樹 樹 樹 樹 樹 資 樹 樹 ◎ 符合第四正規化(4NF)的資料表之兩個條件   1.有BCNF  2.且沒有多產相依情形 資資資資資資資資資R(A,B,C)…………主索引為ABC          當A→→B…………………當A對應B時,B有多個產相對應          當A→→C…………………當A對應C時,C有多個產相對應          (B和C完全沒有邏輯上的關係) ex:假設我們學校有三個主修科目 英文、數學、心理 有兩個課外活動 游泳、籃球 樹樹 資資 樹樹 樹樹樹 樹樹樹 樹樹樹 樹樹樹 樹樹樹 樹樹樹 資資 樹樹 資資 樹樹 樹樹 資資 資資 資資 樹樹 樹樹 資資 資資 實際情況:  100號的同學選了兩個主修分別是 英文和數學 兩個活動分別 是 游泳和籃球  200號的同學選了兩個主修分別是 英文和數學 一個活動分別 資資資資   學號→→主修  學號→→活動   主修 和 活動 無關 .

資資資資資資資 SQL server 資資 資資資資資資資×樹樹樹     ┌─↓─↓ R樹A,B,C,D,E) ◎樹 樹 樹樹 ◎正規化: R1樹資,C,D) R2樹資樹資,E) 沒有部份相依也沒有遞移相依,但違反"所有 決定因子為候選鍵"×BCNF     ↓─┐ R樹A,B,C,D,E)   ↑─────┘ ◎樹 樹 樹樹 ◎正規化: R1(B,樹資資R2(A,資樹 R3樹資資資,E) 資資資資資×樹樹樹     ┌─↓─↓ R樹A,B,C,D,E) ◎樹 樹 樹樹 ◎正規化: 資資資資資資資×樹樹樹     ┌─↓─↓ R樹A,B,C,D,E) ◎樹 樹 樹樹 ◎正規化: R1(B,樹,D) R2樹A,C,E) R1樹資,E) R2樹資,C,D) R3樹A,B樹 資資資資資×樹樹樹     ┌─↓─↓ R樹資,B,C,D,E)         └─↑ ◎樹 樹 樹樹 ◎正規化:R1樹資,C,D)R2樹資,B,E)  或 R1樹資,E)R2樹資,C,D)R3樹資,B) 資資資資 R資資資資資資資 R資 資 R資 樹 樹 樹 若A→B A→C 樹 樹 樹 資 樹 資資 資資資  則A為主鍵 樹 資資資 樹 資資資 樹 資資 資資  即主鍵可以決定所有的非鍵產 樹 資資資 樹 資資資 樹 資資 資資 候選鍵:{A,B} → R資資資資資資資 樹 資資資 樹 資資資 樹 資資 資資  或 {A,C} → R資資資資資資資 .11 - .

6.12 - . 更改第四項,用主索引當關聯 樹 樹 樹 樹 樹 、姓名、資資樹樹樹樹              班碼 班級(班碼、班級名) 樹樹樹課程名稱、學分數、分數、必/選、學號、學年、學期樹 資資資資資資資課程代號 樹 樹 樹 課程代號、課程名稱) . 4. 找名詞: 資 資 (A)樹 樹 樹 (B)樹 樹 樹 (C)資資資(D)資資資(E)、課程名稱(F)、學分數(G)、分數(H)樹 樹 樹 樹 (I)樹樹樹(J) 3. 找出每個集合的屬性(名詞) 找出代表號 學生(學號、姓名、班級、家長) 班級(班級名) 成績(課程名稱、學分數、分數、必/選) 科目(課程名稱) 資資資資 5. 主題:你要收集的人、事、物    學生      班級      成績      系統      科目 資資C樹D樹E樹J資資資資E資資資資資F樹G樹H樹I資資資資資資資資資資資資資資G 2.資資資資資資資 SQL server 資資 ER 資 用例題做解釋: 大華學生成績 *每位學生每學期必須修 4~5門課  *必須於學期末寄發給家長成績單 學年_____ 學期_____ 學號_____ 姓名_____ 班級_____ 課程名稱 學分數 分數 必 / 選 資資 樹 80 樹 樹樹 樹 60 樹 1.

13 - . 資資資 .E ) R3( E . 資資 ) R1( A . F ) R1資樹資資資 R2(A,B,樹資資資 R3(C,資資資資資資 R 4(A,B,資資資資 R1資樹’樹樹’資資資 R1資樹’樹樹’資資資 R2(A,樹資資資 R3資樹資資資 R 資資樹,E,樹資 資資資資 樹(key):為屬性之一,用來排序或辨識。每資料表有一主鍵,它可以辨識唯一的一筆資料。 樹樹(Primary key):最少欄位的組合。 樹樹樹(Foreign key):在一個資料表的某個欄位,其產參照產外一資料表之主索引。外來鍵通常用來作為資料表間的交叉參 考。 樹樹樹()資 樹樹樹(Super Key):除了候選鍵以外的唯一識別碼。 樹樹樹(Unique Key):具唯一性,最少性,可以找到唯一一筆資料的最少欄位組合 唯一識別碼(Unique Identifier):可找到為一一筆資料的屬性子集 . A . 資資 .資資資資資資資 SQL server 資資 *例題:  (底線為主鍵樹 資資( 書局代號 . 樹樹 . 書號 . A ) R3( E . B ) R2( C . D . 資資 ) 資( 書號 . C ) R1( A . F . 資資 . 資資資 ) 資資( 書局代號 . D . 資資 .B ) R2( C .

身分證 } V { 資資 . 資資} V V . 資資 . 樹樹 } V { 學號 .學年期. 樹樹 } V { 學號 . 樹樹 } V { 學號. 資資 . 身分證 . 身分證 . 資資 } V { 學號 . 產品代號 } 2 P002 50 { 訂單 .平均分數} V 樹樹樹樹 樹樹樹 樹樹 樹樹樹 V V V 樹樹樹 V 資資資 訂單 產品代號 資資 { 訂單 } 1 P001 100 { 產品代號 } 1 P002 50 { 資資 } 2 P003 50 { 訂單 .資資. 樹樹 } V { 學號 . 身分證 } V { 學號 .平均分數} F002 952 65 {學號 .身分證.樹樹 } V { 資資 . 資資 } 樹樹樹 { 產品代號 . 樹樹 } 學生 學號 資資 身分證 樹樹 S001 王振生 F111 1 S002 陳育良 F222 1 S003 李小立 F333 2 樹樹樹樹 2(4 樹樹)-1=15 樹樹樹樹 樹樹樹 樹樹樹 樹樹 樹樹樹樹 { 學號 } V V V { 資資 . 資資 . 身分證 } V 樹樹樹 樹樹 資資資 資資 樹樹樹樹 樹樹樹 樹樹 樹樹樹 V V V 學號 學年期 平均分數 { 學號 } F001 951 80 { 學年期 } F001 952 70 { 平均分數 } F002 951 80 {學號.14 - .平均分數} F003 952 70 {學號. 身分證 . 學年期 } F003 951 90 {學年期. 樹樹 } V { 學號 .資資資資資資資 SQL server 資資 資資資 樹樹{ 學號 . 資資 } { 訂單 . 產品代號 . 樹樹 } { 資資 } { 身分證 } V V { 樹樹 } 樹樹樹 { 身分證 .

'1').15 - . 上司工號 } V V V V { 資資資資. 資資 ) VALUES ('S003'.B} V 50 X U {A.資資資資 UPDATE 樹 樹 SET 資資='1989/10/13' WHERE 樹 樹 ='S001' 資資資資資 . '樹樹樹'. 樹. 資資 單一資料  資料表名稱:學生 INSERT INTO 樹 樹 ( 樹 樹 . 資資資資 } V V { 員工代碼 . 資資資資 .B.C} V 樹樹樹 V {B.C} V V 資資資 員工代碼 資資資資 F001 王大同 F002 F003 F004 李小明 陳三 王大同 上司工號 樹樹樹樹 樹樹樹 樹樹 樹樹樹 {員工代碼} V V V 樹樹樹 {資資資資} F001 F001 F002 {上司工號} { 員工代碼 . 上司工號} 資資資資 建立資料表 資料表名稱:Create Table Create Table 樹 樹 ( 樹 樹 char(4) primary Key. 資資 VARCHAR(10). 性別 CHAR(1) ) 資資 單一資料  資料表名稱:學生 INSERT INTO 樹 樹 VALUES ('S001'. '陳三').資資資資資資資 SQL server 資資 資資資 樹樹樹樹 樹樹樹 樹樹 樹樹樹 V V A B C {A} 100 X W {B} 200 Y V {C} 100 Y V {A.C} {A. 改變 TABLE 資資資  如增加一產欄位 資資 資料型態為 DATETIME 資資資ALTER TABLE 樹 樹 資資資ADD 資資 DATETIME ──建立 資資資 資資資資資Create Database im3a 資資資資資GO ┌─轉換工作區至im3a  │ Use im3a  └ GO ↓建立檢示表 ↓名稱 Create View v_1 刪除資料表 DROP TABLE 樹 樹 . 上司工號 } {員工代碼 .

資資.’Judy’.16 - . ----方式 2 INSERT INTO "資料表名稱 1" ("資資 1".資資.’J123456789’). 資資資資資 Varchar(10) unique. FROM "資料表名稱 2" 樹樹Insert into 資資(資資. "資 2".) SELECT "資資 3".. 資資 Varchar(10).資資資資..’資’.’Im94A’. 資資 Varchar(10).. "資資 2". 資資 Varchar(2). .. "資資 2".. 資資資資 Varchar(10). .資資資資資) 資資資資Select 資資. ..資資..) 樹樹Insert into 資資(資資.資資資資資) 資資資資資Values (‘947001’.’035500055’.資資.資資.資資.資資資資資資資 SQL server 資資 DESC:由大到小排序 Order by:排序,由小到大 group by:分組 AVG資資資 MAX:最大,最高 MIN:最小 Count:筆數 SUM:加總 Having:挑出 delete:刪除 Insert into:輸入 update:更新 left join:左合併 Primary key:主鍵 from:來自 null:空集合 資資 --資資資資資 Create database 資資資資資 primary key 資資 unique 唯一鍵 Foreign key 資資資 --新增資料表 Create table 資資 (資資 Varchar(10) primary key. --Create View .資資.資資. .) VALUES ("資 1".資資資資資 From 資資資資.. Customer Fk_資資 Foreign key(資資資資) references 資資(資資資資)) 資資 樹 樹 樹樹 資資 性別 樹樹 94700 1 Judy 資 94700 2 Nick 資 班級代號 身分證字號 班級代號 班級名稱 035500055 Im94A J123456789 Im94A 資管五 A 035500000 Im94B J123456788 Im94B 資管五 B --資資資資 ----方式 1 INSERT INTO "資料表名稱" ("資資 1". "資資 4".資資.

資資 資資 --清除資料表 DROP TABLE "資料表名稱" --修改欄位屬性 ALTER TABLE "table_name" [改變方式] --清空資料表的資料 TRUNCATE TABLE "資料表名稱" --刪除某一筆資料 DELETE FROM "資料表名稱" --資資資資 UPDATE "資料表名稱" SET "資資 1" = [資 1].17 - . "資資 2" = [資 2] WHERE {資資} WHERE {資資} 資資 --資資資資 SELECT "資資資" FROM "資料表名稱" --資資資資資資資資資資資資資資 SELECT DISTINCT "資資資" FROM "資料表名稱" --資資資 SELECT "資資 1" FROM "資料表名稱" WHERE "資資 2" [資資資資資] (SELECT "資資 1" FROM "資料表名稱" WHERE [資資]) --資資 SELECT "函數名"("資資資") FROM "資料表名稱" --資資 AVG SELECT AVG("資資資") FROM "資料表名稱" --資資 COUNT SELECT COUNT("資資資") FROM "資料表名稱" --資資 MAX SELECT MAX("資資資") FROM "資料表名稱" --資資 MIN SELECT MIN("資資資") FROM "資料表名稱" --資資資資 . --建立索引 Create Index Create Index 索引名稱 on 資料表名稱(欄位名稱).資資資資資資資 SQL server 資資 Create View View_name as select 欄位名稱 from 資料表名稱.

"資資 1" "欄位別名" FROM "資料表名稱" "資料表別名" --AS 資資資 SELECT "資料表別名".ASC 資資資資資資資資資資資資資資資資資 DESC 資資資資資資資資資資資資資資 出。如果兩者皆沒有被寫出的話,那我們就會用 ASC樹 -. SUM("資資 2") FROM "資料表名稱" GROUP BY "資資 1" --OR SELECT "資資資" FROM "資料表名稱" WHERE "簡單條件" OR "簡單條件" --資資資資 SELECT "資資 1"."資資 1" "欄位別名" FROM "資料表名稱" "資料表別名" . '產二'.. SUM("資資 2") FROM "資料表名稱" GROUP BY "資資 1" HAVING (函數條件) --IN SELECT "資資資" FROM "資料表名稱" WHERE "資資資" IN ('產一'.) -.資資資資資資資 SQL server 資資 SELECT "資資資" FROM "資料表名稱" WHERE "資資" --資資 SUN SELECT SUM("資資資") FROM "資料表名稱" --AND SELECT "資資資" FROM "資料表名稱" WHERE "簡單條件" AND "簡單條件" --資資 GROUP BY SELECT "資資 1". DESC] -.. .CASE SELECT CASE ("資資資") WHEN "資資 1" THEN "資資 1" WHEN "資資 2" THEN "資資 2" . [ELSE "資資 N"] END FROM "資料表名稱" --資資 SELECT "資料表別名".BETWEEN SELECT "資資資" FROM "資料表名稱" WHERE "資資資" BETWEEN '產一' AND '產二' --資資 ORDER BY SELECT "資資資" FROM "資料表名稱" [WHERE "資資"] ORDER BY "資資資" [ASC..EXISTS SELECT "資資 1" FROM "資料表名稱 1" WHERE EXISTS (SELECT * FROM "資料表名稱 2" WHERE [資資]) -..18 - .

19 - .卡迪生乘積(Cartesian Product)] M1 資資資:2 樹 資 M2 資資資:2 資資 資資 M1+M2 資資資:4 樹 N1 資資資:4 樹 資 N2 資資資:4 樹 資 資資 N1N2 資資資:8 樹 樹 樹 樹 100 樹 200 樹 300 樹 400 樹 500 樹 樹 樹 300 Union 聯集→Rx 樹 Ry 且重複部分 樹 Show 出一次 SELECT * FROM資R 資 UNION SELECT * FROM資R 資 交集 R X ∩ R 資 SELECT * FROM資R 資 資資資資 R SECT SELECT * FROM資R 資 Union 聯集 Q: 成績961 樹 樹 樹 100 樹 200 樹 300 樹 300 樹 400 樹 500 樹 樹 樹 100 樹 200 Union All 聯集→Show 資 Rx 樹 Ry 樹樹 SELECT * FROM資R 資 UNION ALL SELECT * FROM資R 資 R X-R Y 差集 EXCEPT SELECT * FROM資R 資 EXCEPT SELECT * FROM資R 資 成績962 .資資 2 ) R1 ∪ R2 5 樹 R1 ∩ R2 1 樹 R1 .資資資資資資資 SQL server 資資 --AS 資資資 SELECT "資料表別名".R2 2 樹 Select *資From R1 Select *資From R1 Select *資From R1 Union Select *資From R2 Intersect Select *資From R2 Except Select *資From R2 Inner Join(資資資):將兩個資料表合成一個大資料表 ↓中間運算過程 R1 資 R2 資 R1*R2[資資."資資 1" AS "欄位別名" FROM "資料表名稱" AS "資料表別名" 資資 聯集 UNION 交集 Intersect 差集 Difference 資資 1 ∪ 資資 2 資資 1 ∩ 資資 2 ( 資資 1 .

20 - . max(B) as 樹 樹 樹 1 100 1 100 from R1 1 200 2 200 group By A 2 200 3 400 3 400 .資資 資資 7 3 資資 資資 資資 資資 資資資資 資資資資 S002 S003 S003 資資 Linux 資資 資資 Linux 資資 資資 資資 資資 資資 select 資資. avg(資資) as 資 資 資 資 from (資select 資資.資資資資資資資 SQL server 資資 資資 資資 資資 資資資資 資資資資 S002 S002 S003 資資 資資資 資資 資資資 資資 資資 資資 資資 資資 資資 資資資資資資資資資資資資資資資資資資 資資 資資資資 資資資資 S002 S003 資資. avg(資 資 ) as 資資 資資資資from 資資962 資資資資group by 資資資資資)v group by 資資 資資資 → R1 A B A B 1 100 1 2 1 200 2 1 2 200 3 1 3 400 select A. count(*) from R1 group By A → R → R1 --資資資資資 → A B A B 1 100 1 200 1 200 2 200 2 200 3 400 3 400 --每 組 最 大 產 select A. avg(資 資 ) as 資資 資資資資from 資資961 資資資資group by 資資 資資資資union 資資資資select 資資. max(B) as 樹樹樹 from R1 group By A --每組最小產 A B A B select A.

[Z]))PV R2 資 資 資 Select 資 A . [Y].資資資資資資資 SQL server 資資 資 R1 資 資 資 資 資 資 資 資 資 300 NULL NULL 資 300 資 資 資 資 100 資 NULL 400 NULL 資 資 400 資 資 資 200 資 NULL NULL 700 資 資 資 700 資 資 100 資 資 300 資 資 300 資 資 400 Select A . 資資資資 李小平 資 資資資 資資資資資資資資資 資資 nvarchar(1). [X]. [Y]. '資3A') Insert into 資 資 values ('s002'. [Y]. 資資資資 資資 資 資資資 資資資資資資資資資 資 資 nvarchar(3). C From R1)V From R1)V Pivot (Sum(c) For B In( [X]. '資'. '資'. 資資資資 王大同 資 資資資 資資資資資資資資資 資資 nvarchar(10). 資 資 資 Select 資 A . B . B 資 NULL 30 Group by A . B . [Y]. B 資 資 資資 資 資 70 With rollup NULL 資 40 With cube 資 資 資資 資 資 50 資 資 70 資 資 資資 資 NULL 120 資 資 50 資 資 資資 資 資 60 資 NULL 120 資 資 資資 資 資 70 NULL 資 90 資 NULL 130 資 資 60 NULL NULL 280 資 資 70 資 NULL 130 NULL 資 50 NULL NULL 280 資資 --資 資 資 資 資 資 資 學號 資資 資資 資資 create Table 資 資 ( 學號 nvarchar(4). 資資資資 陳育良 資 資資資 資資Constraint pk_student primary key(學號) ) 資資資資 王振生 資 資資資 --資 資 資 資 資 資 資 資 資 Insert into 資 資 values ('s001'.'李小平'. B .'資 資 '.'王大同'.21 - . '資3B') Insert into 資 資 values ('s003'. [Z] From ( Select A . 資 資 資 資 資 10 Sum(C) 資 資 10 Sum(C) 資 資 資資 資 資 20 From R2 資 資 20 From R2 資 資 資資 資 NULL 30 Group by A .0) For B In( [X]. [Z]))PV Pivot ( isnull(sum(c). C From ( Select A . '資'. '資2A') . B . [Z] Select A . [X].

學年期) ) S004 智育 資資資資 資資資 --資 資 資 資 資 資 資 資 資 Insert into 資資 values ('s001'. S001 智育 資資資資 資資資           獎項 nvarchar(4). [智育]) )PV . '資3B') 資資 --資 資 資 資 資 資 資 學號 獎項 樹樹 學年期 create Table 資資(  學號 nvarchar(4).資 資 .獎項. '智育' 學號 --Q2 資 資 資 資 '德育'.資資. [智育] S002 資 資 from ( select * from 資資)v S002 資 資 S004 資 資 學號 資資 資資 資資 獎項 樹樹 --資 資 資 資 資 資 資 S001 王大同 資 資3A 智育 5000 --Q4 每位學生的學號.'德育'.資資. '961') Insert into 資資 values ('s004'.'智育'.樹樹 S002 李小平 資 資3B 德育 1000 from 資 資 left join 資資 on 資 資 .'德育'. '資'. S002 德育 資資資資 資資資           學年期 varchar(3). 5000.獎項. 資資.'陳育良'.'智育'. '961') 學號 --Q1 資 資 資 資 資 '德育'.樹樹 S001 王大同 資 資3A 德育 1000 select 資 資 . '資'. [智育] S001 資 資 select 學號. S001 德育 資資資資 資資資           金額 int. 5000.學號. 1000. '資3B') Insert into 資 資 values ('s005'.資資資資資資資 SQL server 資資 Insert into 資 資 values ('s004'.22 - .'德育'. '961') Insert into 資資 values ('s003'.資 資 .獎項. [德育]. 資資'智育' S001 select 學號 from 資資 資資資資 select 學號 from 資資 where 獎項 = '德育' 資資資資 where 獎項 = '德育' and 學號 in( and 學號 not in( select 學號 from 資資 select 學號 from 資資 where 獎項 = '智育'資) where 獎項 = '智育'資) 學號 德育 智育 --Q3 pivot 學號. S003 德育 資資資資 資資資 Constraint pk_merit primary key(學號.'王振生'. 1000.學號 S003 資資 資 資2A 德育 1000 S004 陳育良 資 資3B 智育 5000 S005 王振生 資 資3B NULL NULL PIVOT(count(樹樹) for 獎項 in ([德育]. '961') Insert into 資資 values ('s002'. 資資. [德育].學號=資資. 1000. '961') Insert into 資資 values ('s001'.

23 - .sum(資資*數量) as 資資 1 P2 1000 資資 2 450 from 訂單細項 1 P3 300 from 訂單細項 3 175 group By 單 號 2 P1 200 4 50 2 P2 250 3 P1 50 3 P2 125 4 P1 50 樹樹 --Q3 .Q3.樹樹 資資資資 陳育良 資 資 from 資 資 left join 資資 on 資 資 . 資資.資資.資資.獎項. 資資.獎項. [德育]德育總金額 .學號.樹樹 S003 資資 1000 NULL from 資 資 left join 資資 on 資 資 .學號=資資.資資.資 資 .資資*數量as 1 1500 select 單 號 .資資資資資資資 SQL server 資資 學號 資資 德育 智育 --資 資 資 資 資 資 資 資 資資資 資資資資 王大同 資 資 --Q5 資資 Q4.count(*) as 資 資 資 資 from 訂單細項 group By 單 號 單 號 產品代號 資資 --Q2 單 號 1 P1 200 select 單 號 .資 資 . [智育]) )PV S005 王振生 NULL NULL → 訂單細項 → 產品代號 資資 數量 單 號 1 P1 10 20 1 3 1 P2 25 40 2 2 1 P3 30 10 3 2 2 P1 10 20 4 1 2 P2 25 10 3 P1 10 5 3 P2 25 5 4 P1 10 5 單 號 資資資資 --Q1 select 單 號 . [德育].學號=資資.產品代號.學號)v S004 陳育良 NULL 5000 PIVOT( sum(樹樹) for 獎項 in ([德育].學號)v 資資資資 王振生 資 資 PIVOT(count(樹樹) for 獎項 in ([德育]. [智育] 資資資資 資資 資 資 from ( select 資 資 . 資 資 資 資 資 資 S001 王大同 1000 5000 select 學號.[智育] 智育總金額 S002 李小平 1000 NULL from ( select 資 資 . [智育]) )PV 學號 資資 德育總金 智育總金 --資 資 資 資 資 資 資 資 資資資 樹 樹 --Q6 資資 Q4. 資 資 資 資 資 資 資資資資 李小平 資 資 select 學號.資資.Q3.學號.

一個部門有多個員工 2.員工的上司是員工  資資 資資 資資 資資 資資 資資 資資 資資 S001 資資資 S001 12/01/2007 5 資 S002 資 資 資 S001 12/01/2007 6 資 S003 資 資 S002 12/01/2007 5 資 S004 王 四 S002 12/01/2007 6 資 --資 資 資 資 資 資 資 .sum(資資*數量) as 樹樹 from 訂單細項 group By 單 號 ) 資 ER 資 1.一個學生可選多門課.sum(資資*數量) as 資資 3 175 from 訂單細項 4 50 group By 單 號 單 號 select 單 號 .一門課有多個學生選 3.sum(資資*數量) as 樹樹 from 訂單細項 having sum(資資*數量)<( group By 單 號 select avg(樹樹) )V from( select 單 號 .24 - .資 資 資 資 資 資 資 資 資 資 .資資資資資資資 SQL server 資資 資資 --Q4 543 select avg(樹樹) as 資資 from( 樹樹 --Q5"低於平均(樹樹)" 2 450 select 單 號 .

'12/1/2007'. '資') --iNNER jOIN 資資 I SELECT * FROM dbo.資資. '資資') Insert into dbo. '5'. 資 資 char(1).資資 INSERT INTO dbo.資資 VALUES ('S001'.資資 --資資 s003 資 資 資 資 資 資 資 資 s007.資 資 (資資. '6'.資資. '陳四') GO --建立缺席資料表及欄位名稱 Create Table 資資 ( 資資 char(4). '資') VALUES ('S001'.25 - .'12/1/2007'. 資資) values ('s001'.資資=dbo. 資資) values ('s002'. Constraint pk_資資 primary key(資資.資資 INSERT INTO dbo. '資資資') Insert into dbo. 陳武 .資 資 WHERE dbo. '5'.'12/1/2007'.資資=資 資 . dbo.資 資 .'12/1/2007'. '資') VALUES ('S002'.資 資 . '資 資 資 ') Insert into dbo.資 資 (資資. Constraint Fk_資資 FOREIGN key(資資) REFERENCES 資 資 (資資) ) --資資資資 INSERT INTO dbo. 資資 varchar(10) ) go --資資資資 Insert into dbo.資 資 (資資.資 資 ).資資 --iNNER jOIN 資資 II Select * from 資資 inner join 資 資 on 資資. '6'. 資資 varchar(10). 資資) values ('s003'. '資') VALUES ('S002'.資資資資資資資 SQL server 資資 Create Database test go use test go --建立學生資料表及欄位名稱 Create Table 資 資 ( 資資 char(4) primary key.資資 INSERT INTO dbo. 資資) values ('s004'. 資 資 datetime.資 資 (資資.

26 - .資資 WHERE 資 資 IS NULL --C 資 資 資 資 資 資 資 資 資 SELECT 資 資 . COUNT(資 資 ) FROM 資 資 LEFT JOIN 資資 ON 資資.資 資 資 資 資 資 資 資 資 SELECT * FROM 資 資 LEFT JOIN 資資 ON 資資.資資.資資 --B 資 資 資 資 資 SELECT * FROM 資 資 LEFT JOIN 資資 ON 資資.資資=資 資 .資 資 set 資資='s007'.資資=資 資 .資資資資資資資 SQL server 資資 update dbo. 資資='陳武' where 資資='s003' --A.資資 GROUP BY 資 資 . 資資 .資資.資資=資 資 . 資資.