Microsoft PowerPoint - 008_第八章 合併理論與實作(ccchen).ppt

Similar documents
HTML網頁基礎語言

Microsoft PowerPoint - SQL 的查詢語言(ccchen).ppt

0 0 = 1 0 = 0 1 = = 1 1 = 0 0 = 1

第六章 SQL 進階查詢

Microsoft PowerPoint - 資料庫程式設計教材.pptx

DB2 (join) SQL DB2 11 SQL DB2 SQL 9.1 DB2 DB2 ( ) SQL ( ) DB2 SQL DB2 DB2 SQL DB2 DB2 SQL DB2 ( DB2 ) DB2 DB2 DB2 SQL DB2 (1) SQL (2) S

840 提示 Excel - Excel -- Excel (=) Excel ch0.xlsx H5 =D5+E5+F5+G5 (=) = - Excel 00

untitled

幻灯片 1

Ⅰ Ⅱ Ⅲ Ⅳ

Ⅰ Ⅱ1 2 Ⅲ Ⅳ


Ⅰ Ⅱ1 2 Ⅲ Ⅳ

Microsoft Word - ACL chapter02-5ed.docx



投影片 1

Microsoft PowerPoint - 002_第二章 關聯式資料庫(cchen).ppt

ACI pdf

Ⅰ Ⅱ1 2 Ⅲ Ⅳ

目錄

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new

1

2009高考英语满分作文大全

使用手冊

123

威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 號 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民

1.3

四技二專統測國文科 93 ~ 98 年 表一 單元名稱 字音辨正 ( 正確讀音 形近字讀音辨識 ) 字形測驗 ( 正確字形 同音字形使用辨識 ) 字 詞義 解釋 ( 一字多義 古今異義


Ⅰ Ⅱ Ⅲ1 2 Ⅳ1 2?

Microsoft Word 生物02.doc

新 疆 交 通 建 设 集 团 股 份 有 限 公 司 首 次 公 开 发 行 股 票 辅 导 工 作 进 展 报 告 新 疆 交 通 建 设 集 团 股 份 有 限 公 司 ( 以 下 简 称 新 疆 交 建 发 行 人 或 公 司 ) 拟 申 请 首 次 公 开 发 行 股 票 并 上 市, 公

Microsoft Word - 手冊.docx

Book1

习题1

Microsoft PowerPoint - VB14.ppt

工 序 的 是 ( ) A. 卷 筒 切 筒 装 药 造 粒 B. 搬 运 造 粒 切 引 装 药 C. 造 粒 切 引 包 装 检 验 D. 切 引 包 装 检 验 运 输 7. 甲 公 司 将 其 实 施 工 项 目 发 包 给 乙 公 司, 乙 公 司 将 其 中 部 分 业 务 分 包 给

四川省普通高等学校

Microsoft Word 電腦軟體設計.doc

主動學習快樂玩,韻文詩歌我在行

(Microsoft Word - 03\300\243\244p.doc)

1 1 Excel VBA 說明 ( ) (_) STEP4 Excel 2 STEP5 A1 1 B2 2 C3 3 STEP6 A1 STEP7 > > 1-11

投影片 1

<4D F736F F D20A1BE A1BF C4EABDADCBD5D7CFBDF0C5A9B4E5C9CCD2B5D2F8D0D0B9C9B7DDD3D0CFDEB9ABCBBEB8FAD7D9C6C0BCB6B1A8B8E6A3A8B8FAD7D A3A9>

現在人類獲取地球內部訊息的方法, 是從可能影響我們身家性命安全的地震, 用數學模型把地震資料轉換成地震波速度, 進而獲得地底物質密度與深度的關係 地下世界知多少 km/s g/cm 3 P Gpa km S P S 3,000 3,000 ak K 透視地底 Percy Bridgma

CIP / ISBN Ⅰ. Ⅱ. Ⅲ. - Ⅳ. E CIP ISBN 7-8

Excel VBA Excel Visual Basic for Application


Microsoft PowerPoint - EMDBCh08SQL1.ppt


epub 61-6

<4D F736F F D B0EAA5C1A470BEC7A4CEB0EAA5C1A4A4BEC7B8C9B1CFB1D0BEC7B9EAAC49A4E8AED7>

學 科 100% ( 為 單 複 選 題, 每 題 2.5 分, 共 100 分 ) 1. 請 參 閱 附 圖 作 答 : (A) 選 項 A (B) 選 項 B (C) 選 項 C (D) 選 項 D Ans:D 2. 下 列 對 於 資 料 庫 正 規 化 (Normalization) 的 敘

ebook4-14

AutoCAD 用戶如何使用 ArchiCAD

<4D F736F F D B0D3B77EC3FEA7DEC3C0C476C1C9A5BFA6A1B8D5C3442DB57BA6A1B35DAD702DBEC7ACEC2E646F6378>

北京市基本医疗保险政策解答

書面

RUN_PC連載_12_.doc

1-4 二 社會工作存在的前提 / 基本假設 Boehm


縣 94 學年度 上 學期 區 國民中學 Q 年級 R 領域教學計畫表 設計者:

2016 勒索軟體白皮書


第 一 信 封 详 细 评 审 第 二 信 封 初 步 评 审 (5) 投 标 人 以 联 合 体 形 式 投 标 时, 联 合 体 协 议 书 满 足 招 标 文 件 的 要 求 : 投 标 人 按 照 招 标 文 件 提 供 的 格 式 签 订 了 联 合 体 协 议 书, 并

投影片 1

43081.indb

Transcription:

合併理論

限制 (Restrict) 定義定義 是指是指在關聯表中在關聯表中選取符合某些條件的值組 ( 記錄 ), 然後另 成一個新的關聯 代表符號代表符號 σ( 唸成 sigma) 假設假設 P 為選取的條件, 則以 σ p (R) 代表此運算 其結果為原關聯表 R 記錄的 水平 子集合 水平 子集合 關聯式代數關聯式代數 σ 條件 ( 關聯 ) SQL 語法 關聯 Where 條件 其中條件條件可用可用邏輯運算子 (AND, OR, NOT) 來組成

概念圖概念圖 從關聯表 R 中選取符合條件 (Predicate) P 的值組值組 其結果為 其結果為原關聯表 R 記錄的 水平 子集合 水平 子集合 如下圖所示 : P σ p (R) 對應 SQL 語法 SELECT 屬性集合 FROM 關聯表 R WHERE 選取符合條件 P // 水平篩選

實例實例 請在下列的學生選課表中, 請找出課程學分數學分數為 3 的記錄? 解答解答 以 SQL 達成關聯式代數的運算功能 執行結果執行結果 關聯式代數 σ 學分數 =3( 學生選課表 ) 相當於 SELECT * SQL FROM 學生選課表 WHERE 學分數 ='3'

投影 (Project) 定義定義 是指在 關聯表 R 中選取想要的 欄位, 然後另成一個新 的關聯表 代表符號代表符號 π( 唸成 pai) 假設假設 關聯表 R 中選取想要的欄位為 A1,A2 A2,A3, An,, 則以 π A1,A2,A3 An 垂直 子集合 關聯式代數關聯式代數 π 欄位 ( 關聯表 ) An(R) 表示此投影運算投影運算 其結果為原關聯表 R 的 SQL 語法 Select 欄位 From 關聯表 其中欄位欄位可以由數個欄位所組成

概念圖概念圖 從關聯表 R 中選取想要的欄位欄位 其結果為 其結果為原關聯表 R 記錄的 垂直 子 集合 如下圖所示 : π 欄位 (R) 對應 SQL 語法 SELECT 屬性集合 FROM 資料表名稱 // 垂直篩選

實例實例 請在下列的學生選課表中, 請找出學生 姓名 與 課程名稱? 解答解答 以 SQL 達成關聯式代數的運算功能 關聯式代數 π 姓名, 課程名稱 ( 學生選課表 ) 相當於 SQL SELECT 姓名, 課程名稱 FROM 學生選課表 執行結果執行結果 < 資料庫檔案名稱 : ch8-2-2.accdb> 2.accdb>

卡氏積 (Cartesian Product) 定義定義 是指將是指將兩關聯表 R 1 與 R 2 的記錄利用集合運算中的乘積運算乘積運算形成 代表符號代表符號 新的關聯表 R 3 卡氏積 (Cartesian Product); ; 也稱交叉乘積 (Cross Product); ; 或稱交叉合併 (Cross Join) 假設假設 R 1 有 r 1 個屬性,m, 筆記錄,R, 2 有 r 2 個屬性,n, 筆記錄,R3, 會有 (r 1 +r 2 ) 個屬性,(m n) ) 筆記錄 關聯式代數關聯式代數 R 3 =R 1 XR 2 SQL 語法 SELECT * FROM A 表格,B 表格

概念圖概念圖 R 1 有 r 1 個屬性,m, 筆記錄,R, 2 有 r 2 個屬性,n, 筆記錄,R3, 會有 (r 1 +r 2 ) 個屬性,(m n) ) 筆記錄 如下圖所示 : 格式 1 格式 2 SELECT * FROM A 表格,B 表格 SELECT * FROM A 表格 CROSS JOIN B 表格

實例實例 請在下列的 請在下列的 學生表 與 課程表 中, 請找出學生表學生表與課程 表的所有的所有可能配對的集合? 解答解答 1. 分析 : < 資料庫檔案名稱 : ch8-2-3.accdb> 已知 : 學生表 R 1 ( 學號, 姓名, 課號 ) 課程表 R 2 ( 課號, 課名, 學分數 ) 兩個資料表的 卡氏積, 可以表示為 : 學生表 R 1 ( 學號, 姓名, 課號 ) 課程表 R 2 ( 課號, 課名, 學分數 )= 新資料表 R 3 R 1 有 (r 1 =3) 個屬性,(m=2) 筆記錄,R 2 有 (r 2 =3) 個屬性,(n=3) 筆記錄, R 3 會有 (r 1 +r 2 ) 個屬性 =6 個屬性 新資料表 R 3 ( 學號, 姓名, 學生表. 課號, 課程表. 課號, 課名, 學分數 ) R 3 會有 (m n) 筆記錄 =6 筆記錄

在資料記錄方面, 每一位學生 (2 位 ) 均會對應到每一門課程資料 (3 門 ), 亦即二位學生資料, 產生 (2 3)=6 筆記錄 如下圖所示 : 因此, 學生表 與 課程表 在經過 卡氏積 之後, 共會產生 6 筆 記錄, 如下圖所示 :

以上面所產生的六筆記錄六筆記錄中中, 不知您是否有發現, 有一些不太合理的記 錄 例如 : 張三 只選修課號為 C001,, 但是卻多出了兩筆不相關的紀錄 (C002,C003) 因此, 如何從 卡氏積 所展開的全部組合中, 挑選出 合理的記錄, 就必須要再透過下一章節所要介紹的 內部合併 (Inner Join)

合併 (Join) 定義定義 是指將是指將兩關聯表 R 1 與 R 2 依合併條件合併成一個合併成一個新的關聯表 R 3 表示符號表示符號 假設假設 假設 P 為合併條件, 以 R 1 pr 2 表示此合併運算 關聯式代數關聯式代數 R 3 = R 1 pr 2 SQL 語法 SELECT * FROM A 表格,B 表格 WHERE 條件 P

概念圖概念圖 由兩個或兩個以上的關聯 ( 表格 ),, 透過某一欄位的共同值域所組合而成 的, 以建立出一個新的資料表 如下圖所示 :

合併的分類合併的分類 廣義而言, 合併可分為 來源合併 與 結果合併 兩種 一 來源合併 :(: 需要 FK PK) K) ( 一 )Inner Join( 內部合併 ) 如果查詢目前老師有開設的課程, 則會使用到 內部合併 如上圖中的 Ⅱ 區 ( 二 )Outer Join( 外部合併 ) 1. 如果要查詢尚未開課的老師, 則會使用到 左外部合併 如上圖中的 Ⅰ 區 2. 如果查詢有那些課程尚未被老師開課, 則會使用到 右外部合併 如上圖中的 Ⅲ 區

二 結果合併 :(: 不需要 FK PK) K) ( 一 )Cross Join( 卡氏積 ) ( 二 )Union( 聯集 ) ( 三 )Intersect( 交集 ) ( 四 )Except( 差集 )

內部合併 (Inner Join) 定義定義 內部合併 (Inner Join) 又稱為 條件式合併 (Condition Join), 也 就是說, 將 卡氏積 將 卡氏積 展開後的結果, 在兩個資料表之間加上 限制條 件, 亦即在兩個資料表之間找到 對應值組 對應值組 才行, 而 Outer join 則 無此規定 這裡所指的 限制條件 限制條件 是指兩個資料表之間的某一欄位值的 是指兩個資料表之間的某一欄位值的 關 係比較 如下表所示 : = 運算子 ( 等於 ) <> ( 不等於 ) < ( 小於 ) 學生表. 課號 = 課程表. 課號 學生成績單. 成績 <>60 學生成績單. 成績 <60 <= ( 小於等於 ) 學生成績單. 成績 <=60 > ( 大於 ) 學生成績單. 成績 >60 >= ( 大於等於 ) 學生成績單. 成績 >=60 條件式說明

兩種作法兩種作法 1. 透過 SELECT 指令 WHERE 部分的等式, 即對等合併即 (Equi-Join) From A,B Where (A.c=B.c) 2. 透過 SELECT 指令 FROM 部分的 INNER JOIN 即自然合併 (Natural Join); ; 又稱為內部合併 (Inner Join) From A INNER JOIN B ON A.c=B.c

實例實例 假設有兩個資料表, 分別是 學生表 學生表 與 課程表 課程表, 現在欲將這兩個 資料表進行 內部合併, 因此, 我們必須要透過相同的欄位值相同的欄位值來進行 關聯, 亦即 學生表 的 課號 對應到 課程表 的 課號, 如下 圖所示 : 解析解析 從下一頁開始

1. 分析 從上圖中, 我們就可以將此條關聯線關聯線條寫成 : 學生表. 課號 = 課程表. 課號 因此, 我們將這兩個資料表進行 卡氏積 卡氏積 運算, 其結果如下圖所示, 接下來, 從展開後的記錄中, 找尋那幾筆記錄具有符合符合 學生表. 課號 = 課程表. 課號 的 的條件, 亦即 學生表 的 課號 等於 課程表 的 課號

2. 撰寫 SQL 程式碼 (1) 第一種做法 :(Equi: Equi-Join 最常用 ) Select 學號, 姓名, 課程表. 課號, 課程名稱, 學分數 From 學生表, 課程表 Where 學生表. 課號 = 課程表. 課號 (2) 第二種做法 :INNER: JOIN SELECT 學號, 姓名, 課程表. 課號, 課程名稱, 學分數 FROM 學生表 INNER JOIN 課程表 ON 學生表. 課號 = 課程表. 課號 執行結果執行結果

3. 綜合分析 : 當我們欲查詢的欄位名稱是來源於兩個或兩個以上的資料表時, 則必 須要進行以下的分析 : ch8-2.4.1a.accdb 步驟一 : 辨識 目標屬性目標屬性 及 及 相關表格相關表格 學生資料表 ( 學號, 姓名, 系碼 )?? 選課資料表 ( 學號, 課號, 成績 ) 目標屬性 : 學號, 姓名, 平均成績 相關表格 : 學生資料表, 選課資料表 步驟二 : 將相關表格將相關表格進行 卡氏積? SELECT * FROM 學生資料表 AS A, 選課資料表 AS B

步驟三 : 進行 合併 (Join); ; 本題以 內部合併 為例, 亦即在 Where 中加入 相關表格 的關聯性 SELECT * FROM 學生資料表 AS A, 選課資料表 AS B WHERE A. 學號 =B. 學號 5 筆記錄 步驟四 : 加入限制條件 SELECT * FROM 學生資料表 AS A, 選課資料表 AS B WHERE A. 學號 =B. 學號 And B. 成績 >=70 4 筆記錄

步驟五 : 投影使用者欲 輸出的欄位名稱 SELECT A. 學號, 姓名, 課號, 成績 FROM 學生資料表 AS A, 選課資料表 AS B WHERE A. 學號 =B. 學號 And B. 成績 >=70 輸出的欄位名稱 步驟六 : 使用群組化及聚合函數 (85+100)/2=92.5 SELECT A. 學號, 姓名, AVG( 成績 ) AS 平均成績 FROM 學生資料表 AS A, 選課資料表 AS B WHERE A. 學號 =B. 學號 And B. 成績 >=70 GROUP BY A. 學號, 姓名依照學號與姓名來分群

步驟七 : 使用 聚合函數 之後, 再進行篩選條件 SELECT A. 學號, 姓名, AVG( 成績 ) AS 平均成績 FROM 學生資料表 AS A, 選課資料表 AS B WHERE A. 學號 =B. 學號 70( 含 ) 以上 And B. 成績 >=70 GROUP BY A. 學號, 姓名 HAVING AVG( 成績 )>=70 步驟八 : 依照某一欄位或 聚合函數 結果, 來進行 排序 SELECT A. 學號, 姓名, AVG( 成績 ) AS 平均成績 FROM 學生資料表 AS A, 選課資料表 AS B WHERE A. 學號 =B. 學號 And B. 成績 >=60 由高到低分排序 GROUP BY A. 學號, 姓名 HAVING AVG( 成績 )>=70 ORDER BY AVG( 成績 ) DESC;

4. 結論 : 學生表 與 課程表 在經過 卡氏積 卡氏積 之後, 會展開成各種組合, 並產生龐大記錄, 但大部份都是不太合理但大部份都是不太合理的配對組合 所以, 我們就必須要再透過 內部合併 (Inner Join) 來取出來取出符合 限制條件 的記錄 因此, 我們從上面的結果, 可以清楚得知 內部 合併 的結果就是的結果就是 卡氏積 卡氏積 的子集合 如下圖所示 :

外部合併 (Outer Join) 定義定義 當在進行合併 (Join) 時不管不管記錄記錄是否符合條件, 都會被列出其中一 個資料表的所有記錄所有記錄時時, 則稱為 外部合併 此時不符合條件不符合條件的記錄 就會被預設為 NULL 值 即左右兩邊的關聯表, 不一定要有要有對應值組對應值組 用途用途 是應用在異質性分散式資料庫異質性分散式資料庫上的整合運算, 其好處是不會讓資訊遺 漏

分類分類 1. 左外部合併 (Left Outer Join,, 以表示 ) 舉例 : 如果要查詢尚未開課尚未開課的老師, 則會使用到 左外部合併 如上圖中的 Ⅰ 區 2. 右外部合併 (Right Outer Join,, 以表示 ) 舉例 : 如果查詢有那些課程課程尚未被老師開課, 則會使用到 右外部合併 如上圖中的 Ⅲ 區 3. 完全外部合併 (Full Outer Join,, 以表示 ) 舉例 : 如果要查詢每一位老師開課資料, 其中包括尚未開課的老師也要列出, 並且也查詢每一門課程資料, 其中包括尚未被老師開課的課程也要列出

格式格式 SELECT * FROM 表格 A [RIGHT LEFT FULL] [OUTER ][JOIN] 表格 B ON 表格 A.PK= 表格 B.FK

舉例 1 左外部合併 資料庫檔名 :ch8-2-4-2.accdb 假設有兩個資料表, 分別是 老師資料表 與 課程資料表, 現在欲 查詢每一位老師開課資料, 其中包括尚未開課的老師也要列出尚未開課的老師也要列出 如下圖 所示 : 解析解析 從下一頁開始

1. 分析 當兩個關聯做合併運算時, 會保留第一個關聯 ( 左邊 ) 中的所有值組 (Tuples) 找不到相匹配的值組時, 必須填入 NULL( 空值 ) 左外部合併 利用 SQL Server 2008 執行結果如下 : 利用 Access2007 執行結果如下 :

2. 撰寫 SQL 程式碼 SELECT * FROM 老師資料表 AS A LEFT JOIN 課程資料表 AS B ON A. 老師編號 =B. 老師編號

實例 2 左外部合併 假設有兩個資料表, 分別是 老師資料表 與 課程資料表, 請撰寫 出尚未開課的老師尚未開課的老師的 SQL 指令 解析解析 1. 利用圖解說明 利用 左外部合併

2. 撰寫 SQL 程式碼 --1.1 查詢尚未開課的老師 ( 利用左外部合併 ) SELECT A. 老師編號,A. 老師姓名 FROM 老師資料表 AS A LEFT OUTER JOIN 課程資料表 AS B ON A. 老師編號 =B. 老師編號 WHERE B. 老師編號 IS NULL 3. 執行結果

舉例 1 右外部合併 假設有兩個資料表, 分別是 老師資料表 與 課程資料表, 現在欲 查詢每一門課程資料, 其中包括尚未被老師開課的課程也要列出尚未被老師開課的課程也要列出 如下 圖所示 : 解析解析 從下一頁開始

1. 分析 當兩個關聯做合併運算時, 會保留第二個關聯 ( 右邊 ) 中的所有值組 (Tuples) 找不到相匹配的值組時, 必須填入 NULL( 空值 ) 右外部合併 利用 SQL Server 2008 執行結果如下 : 利用 Access2007 執行結果如下 :

2. 撰寫 SQL 程式碼 --2. 右外部合併 SELECT * FROM 老師資料表 AS A RIGHT JOIN 課程資料表 AS B ON A. 老師編號 =B. 老師編號 ORDER BY B. 課程代碼

舉例 1 全外部合併 假設有兩個資料表, 分別是 老師資料表 與 課程資料表, 現在欲 查詢每一位老師開課資料, 其中包括尚未開課的老師也要列出, 並且也 查詢每一門課程資料, 其中包括尚未被老師開課的課程也要列出尚未被老師開課的課程也要列出 如下 圖所示 : 解析解析 從下一頁開始

1. 分析 當兩個關聯做合併運算時, 會保留左右兩邊關聯中的所有值組 (Tuples) 找不到相匹配的值組時, 必須填入 NULL( 空值 ) 全外部合併

2. 撰寫 SQL 程式碼 SELECT * FROM 老師資料表 AS A FULL OUTER JOIN 課程資料表 AS B ON A. 老師編號 =B. 老師編號 ; 註 :FULL: OUTER JOIN 在 SQL Server 中才能執行此指令

集合運算子 基本上, 集合運算子有三種 : 1. 交集 (Intersection) 2. 聯集 (Union) 3. 差集 (Difference)

交集 (Intersection) 定義定義 是指關聯表 R 1 與關聯表 R 2 作 交集 時, 則將原來在兩個關聯式中 都有出現的值組 ( 記錄 ) 組合在一起成為新的關聯式 R 3 代表符號代表符號 R 1 R 2 SQL 語法 From 關聯表 R 1 概念圖概念圖 Intersect 關聯表 R 2

格式格式 關聯式代數 SQL A B 相當於 Select * From A Intersect B

舉例舉例 列出 97 與 98 學年度 都有 在網路開課老師名單 97 學年度網路開課老師表 98 學年度網路開課老師表 解答解答 < 此功能只能在 SQL Server 上執行 > SQL 指令 SELECT * FROM [97 學年度網路開課老師表 ] INTERSECT SELECT * FROM [98 學年度網路開課老師表 ] 執行結果執行結果 選取兩資料表 都有 的資料列

聯集 (Union) 定義定義 是指關聯表 R 1 與關聯表 R 2 作 聯集 時, 則會重新組合成一個新的新的 關聯表 R 3, 而新的關聯表而 R 3 中的記錄為原來兩關聯表的所有記錄, 若有重複的記錄, 則只會出現一次 表示符號表示符號 R 1 R 2 SQL 語法 From 關聯表 R 1 概念圖概念圖 Union 關聯表 R 2

對應的 SQL 語法 關聯式代數 A B 相當於 Select * SQL From A Union B

舉例舉例 列出 97 與 98 學年度有在網路開課老師名單 97 學年度網路開課老師表 98 學年度網路開課老師表 解答解答 SQL 指令 SELECT * FROM [97 學年度網路開課老師表 ] UNION SELECT * FROM [98 學年度網路開課老師表 ] 執行結果執行結果 聯集運算乃在選取兩資料表 所有 的資料列, 但重複的資料列只取一次

差集 (Difference) 定義定義 是指將一個關聯表 R 1 中的記錄減去減去另一個另一個關聯表 R 2 的記錄, 形成 新的關聯表 R 3 的記錄 亦即關聯表 R 1 差集關聯表 R 2 之後的結果, 則為關聯表 R 1 減掉 R 1 R 2 兩關聯共同的值組 代表符號代表符號 R 1 R 2 SQL 語法 From 關聯表 R 1 概念圖概念圖 Except 關聯表 R 2

格式格式 關聯式代數 A B 相當於 Select * SQL From A Except B 事實上差集差集的運算相當於將的運算相當於將關聯表 R1 中的記錄減去 R1 與 R2 共有的記錄, 也就是 R1-R2 R2=R1-(R1 R2) R2)

舉例舉例 列出有在 97 學年度網路開課, 但沒有在 98 學年度網路開課的老師名單 97 學年度網路開課老師表 98 學年度網路開課老師表 解答解答 執行結果執行結果 SQL 指令 SELECT * FROM [97 學年度網路開課老師表 ] Except < 此功能只能在 SQL Server 上執行 > SELECT * FROM [98 學年度網路開課老師表 ]

巢狀結構查詢 定義定義 是指在 Where 敘述中 再嵌入另一個查詢敘述, 此查詢敘述此查詢敘述稱為稱為 子查 詢 換言之, 你可以將 子查詢 子查詢 的結果結果拿來做為拿來做為另一個查詢的條 件 注意注意 詢 子查詢 是可以是可以獨立地被執行, 其執行結果其執行結果稱為 稱為 獨立子查 分類分類 1. 傳回單一值 (=) 2. 傳回多值 (IN) 3. 測試子查詢是否存在 ( 利用 EXIST)

比較運算子 = 定義定義 由於主查詢的條件主查詢的條件中使用了中使用了比較運算子 =, 所以子查詢子查詢就只能傳回 一個結果 一旦子查詢傳回了一個以上的結果, 那麼主查詢的 Where 子 句中的條件就無法成立了 使用時機使用時機 子查詢子查詢就只能傳回一個結果, 否則會出現如下的畫面 :

實例 1 利用子查詢來找出選修 資料庫系統 的學生學號及姓名 解答解答 資料表見 8-4 第一個案例 SELECT A. 學號, 姓名 查詢結果查詢結果 SQL 指令 FROM 學生資料表 AS A, 選課資料表 AS B WHERE A. 學號 =B. 學號 AND B. 課號 = (SELECT C. 課號 FROM 課程資料表 AS C WHERE 課名 = ' 資料庫系統 '); 子查詢就只能傳回一個結果 主查詢 子查詢

IN 集合條件 定義定義 如果我們想讓子查詢子查詢可以可以傳回一個以上的值, 我們可以在主查詢主查詢條件 之中使用 IN 運算子來接收來接收子查詢傳回的結果, 因為 IN 可以處理多個值, 也就是說, 當某列的學號學號等於 IN 之內的任何一個學號, 此列就會被傳 回 使用時機使用時機 子查詢子查詢可以可以傳回一個以上的結果

實例實例 若授課老師想了解有修 資料 開頭的課程之同學 ( 利用子查詢來找 出, 使用 IN) 解答解答 資料表見 8-4 第一個案例 SELECT A. 學號, 姓名 SQL 指令 FROM 學生資料表 AS A, 選課資料表 AS B WHERE A. 學號 =B. 學號 AND B. 課號 IN (SELECT C. 課號 FROM 課程資料表 AS C WHERE 課名 LIKE ' 資料 *'); 主查詢 子查詢 子查詢可以可以傳回兩個或兩個以上的結果 查詢結果查詢結果

EXIST 測試子查詢是否存在 定義定義 是指用來判斷子查詢結果是否存在於合併後的結果中 如果存在, 則 會傳回 TRUE,, 若不存在的話則會傳回 FALSE 若是 TRUE 的話, 則會執則 行主查詢, 若是 FALSE 的話則不會被執行

實例實例 請利用 EXISTS 來找出選修 資料庫系統 的學生學號及姓名 解答解答 資料表見 8-4 第一個案例 SELECT DISTINCT A. 學號, 姓名 SQL 指令 FROM 學生資料表 AS A, 選課資料表 AS B WHERE A. 學號 =B. 學號 AND EXISTS (SELECT C. 課號 FROM 課程資料表 AS C WHERE 課名 =' 資料庫系統 '); 主查詢 子查詢 查詢結果查詢結果 子查詢傳回 TRUE

ALL 與 ANY 集合條件 定義定義 假設有兩個資料表 ( 主關聯與子關聯 ),, 如果想比較主關聯主關聯與子關聯子關聯資 料時, 就可以利用 ALL 與 ANY 集合條件來篩選資料 ALL 的例子 1 A >ALL B A 集合 : 2025 25 60 80 100 B 集合 : 30 50 取出 最大值 A >ALL B 是指取出 A 集合中比 B 集合 最大值 最大值 還要大還要大的資料 所以, 在上面的例子中, 顯示的結果為 :{60,80,100}:

實例 1 請列出 甲班成績單 中有那些同學的 成績 比 乙班成績單 中 所有同學的 成績 同學的 成績 高 解答解答 SELECT 學號, 姓名, 成績 FROM 甲班成績單 SQL 指令 主查詢 WHERE 成績 >ALLALL (SELECT 成績 FROM 乙班成績單 ); 子查詢 查詢結果查詢結果 是指取出取出甲班成績單甲班成績單中比中比乙班成績單乙班成績單 最高分 最高分 還要高還要高的成績

View 視界 View 有人稱為 視界 檢視表 或 虛擬資料表, 事實 上, 不管稱為 視界 或 檢視表, 這些都是由 View 來翻譯過來的 名詞, 因此,View, 這個英文字還是最能傳達關聯式資料庫 過濾 的 觀念 View 與 ANSI/SPARC 架構的關係 視界表格 (View Table) 在關聯式系統中的地位相當於 ANSI/SPARC 資料 庫的三層綱目架構上的的三層綱目架構上的外部層 (External( Level) 因為它只是在實際 資料表之外的一個虛擬資料表, 實際上並沒有儲存資料

什麼是 VIEW? 定義定義 視界 (View) 其實只是基底表格 (Base Table) 的一個 小窗口 小窗口 而已, 因為視界表格 (View Table) 往往只是基底表格基底表格的一部份一部份而非全部, 我們 可以利用 SQL 結構化查詢語言, 將我們需要的資料從各個資料表各個資料表中挑選 出來, 整合成一張新的資料表一張新的資料表 概念圖概念圖

基底表格 與 虛擬資料表 的關係 假設現在有兩個基底表格 (Base Table),, 分別為 課程資料表 及 老 師資料表, 在透過 SQL 查詢之後, 合併成一個使用者需求的資料表, 即稱為虛擬資料表 如下圖所示 :

說明說明 視界表格 (View Table) 的資料來源在於數個基底表格 (Base Table),, 也就是說, 透過 View Select 語法的查詢, 來建立一個新的虛 擬資料表, 使用者可以依不同的需求, 來撰寫不同的 SQL 指令, 進而查 詢出使用者所需要的結果

View 的用途 View 視界的主要用途就是可以提供不同的使用者不同的查詢資 訊 因此, 我們可以歸納為下列幾項用途 : 1. 讓不同使用者對於資料有不同的觀點與使用範圍 例如 : 教務處是以學生的 學業成績 為主要觀點 學務處是以學生的 操行成績 為主要觀點 2. 定義不同的視界, 讓使用者看到的資料過濾後的資訊 例如 : 一般使用者所看到的資訊只是管理者的部份子集合 3. 有保密與資料隱藏的作用 例如 : 個人可以看到個人全部資訊, 但是, 無法觀看他人的資料 ( 如 : 薪資 紅利 年終獎金等 ) 4. 絕大部份的視界僅能做查詢, 不能做更新