Presentation is loading. Please wait.

Presentation is loading. Please wait.

資料庫系統  Database System 施莉萍 2017/12/28.

Similar presentations


Presentation on theme: "資料庫系統  Database System 施莉萍 2017/12/28."— Presentation transcript:

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


Download ppt "資料庫系統  Database System 施莉萍 2017/12/28."

Similar presentations


Ads by Google