Download presentation
Presentation is loading. Please wait.
1
資料庫系統 Database System 施莉萍 2017/12/28
2
01. Join 02. Subquery 03. Union 01
3
學生住宿資料(Dormitory_data)
資料表範例 學生資料 (Std_data) Std_id(學號) Std_name(姓名) Gender(性別) Major(科系) Class(班級) 課程資料 (Classroom_data) Course_id(課程代碼) Course_name(課程名稱) Teacher(教師) Credits(學分數) 教室資料 (Course_data) C_id(課程代碼) Course_day(上課星期) Course_period(節) Course_room(上課教室) 學生住宿資料(Dormitory_data) S_id(學號) Building(宿舍代碼) Room_id(房號代碼) 選課資料(Std_course) S_id(學號) Course_id(課程代碼) 02
4
Join 03 分為: Natural Join Inner Join Outer Join
Left Join (Left Outer Join) Right Join (Right Outer Join) 03
5
Join - Natural Join 選課資料 課程資料 列出學生B00001選課的名稱與授課老師 04
6
Join - Natural Join SELECT course_data.course_name,course_data.teacher FROM std_course NATURAL JOIN course_data WHERE S_id = ‘B00001’ 選課資料 課程資料 列出學生B00001選課的名稱與授課老師 05
7
Join - Inner Join 06 列出學生姓名、宿舍代碼、房號代碼 和natural join效果一樣
學生資料 學生住宿資料 和natural join效果一樣 差別在於結合條件的欄位名稱是否相同 列出學生姓名、宿舍代碼、房號代碼 06
8
2019/5/16 Join - Inner Join SELECT std_name , dormitory_data.room_id , dormitory_data.building FROM std_data INNER JOIN dormitory_data ON std_data.std_id = dormitory_data.S_id; ON std_data.std_id = dormitory_data.S_id; 可省略,前後對調沒關係 列出學生姓名、宿舍代碼、房號代碼 07
9
錯誤案例說明 如果使用Natual Join,結果會變成如何? 08
10
Join - Left Join 學生資料 學生住宿資料 列出學生姓名與住宿的宿舍和房號 09
11
Join - Left Join 學生資料 學生住宿資料 10
12
Join - Right Join 學生資料 學生住宿資料 列出學生姓名與住宿的宿舍和房號 11
13
Join - Right Join 學生資料 學生住宿資料 12
14
Join – Full Join(補充) 13 MySQL並不支援Full Join (Full outer Join) 學生資料
學生住宿資料 MySQL並不支援Full Join (Full outer Join) 13
15
Join – Full Join(補充) 14
16
Subquery 15 Subquery又稱為子查詢或巢狀查詢 有的時候子查詢是唯一能夠連接兩個表格的方式。
17
Subquery 16 SELECT course_name,teacher FROM course_data
WHERE course_id IN 列出學生B00001選課的名稱與授課老師 (SELECT course_id FROM std_course WHERE S_id = ‘ B00001 ’) 16
18
Subquery 17 列出星期一可以修的課程代碼與名稱
SELECT course_id as 課程代碼 ,course_name as 課程名稱 FROM course_data WHERE course_id IN ( SELECT C_id FROM classroom_data WHERE course_day = '星期一') 17
19
Union 列出星期一或星期二可以修的課程代碼與名稱 (參考第頁範例) 18
20
Union 19 SELECT course_id AS 課程代碼,course_name AS 課程名稱 FROM course_data
WHERE course_id IN ( UNION SELECT C_id FROM classroom_data WHERE course_day = '星期一') SELECT C_id FROM classroom_data WHERE course_day = '星期二') 19
21
補充( Union , Intersect , Minus )
Minus(差集) = difference MySQL不支援Intersect、Minus 20
22
練習1 Q1:列出各個老師的姓名與科系 21
23
練習2 Q2:列出科系為資訊管理的學生名單,並且欄位名稱改成”學生名單” 22
24
練習3 Q3:列出就讀資訊工程的男生是多少人,並且欄位名稱設定為男生人數 23
25
練習4 Q4:列出資工系老師的姓名與員工編號與電話 24
26
練習5 Q5:列出資工系的簡同學與會計系的杜同學的姓名與電話(使用Union) 25
Similar presentations