資料庫系統概論第 五章 多重子查詢操作   上一頁    下一頁

5-4 多重查詢 Exists 連結

內容:

  • 5-4-1 Exists 連結語法

  • 5-4-2 範例研討:查詢已開課教師名單

  • 5-4-3 範例研討:查詢未開課教師名單

  • 5-4-4 範例研討:查詢未選課學生名單

  • 5-4-5 範例研討:查詢系老師開課代碼

  • 5-4-6 自我挑戰:查詢系別教師開課名稱

5-4-1 Exists 連結語法

只要子查詢語句傳回來不是空值的話,表示條件成立,而且上層查詢語句的 Where 條件敘述,與子查詢語句的Where 條件相同,基本語句如下:

Select 欄位

From 表格

Where exists (select 欄位 

                        From 表格 

                        Where 條件敘述);

或條件不存在(not exists),基本語法如下:

Select 欄位

From 表格

Where not exists (select 欄位 

                             From 表格 

                               Where 條件敘述);

5-4-2範例研討:查詢已開課教師名單

(A) 程式功能:Ex5_5

 請查詢『資訊管理系』這學期已經排課的教師代碼與姓名,查詢結果下:

(B) 系統分析:

  • 步驟1:首先由 department 表中查出『資訊管理系』的系別代碼(Dep_ID),如下:

 select Dep_ID

 from department

  where dep_name = "資訊管理系"

  • 步驟2:再利用 dep_ID teachers 表中查詢出該系有哪些老師(teacher_ID),如下:

Select teacher_ID

From teachers

Where dep_ID = ‘11’;

 (C) 程式範例:

欲找出已排課教師代號和姓名必須由 teachers 表格中查詢,但條件是該老師的單位是資訊管理系,並且在 open_course 表格內已登錄開課,程式如下:

select  teacher_ID, name

from teachers

where exists (select *

                      from open_course

                      where teacher_ID = teachers.teacher_ID)

and dep_ID = (select Dep_ID

                        from department        

                       where dep_name = "資訊管理系");

5-4-3範例研討:全校未開課教師名單

(A) 程式功能:Ex5_6

 請全校這學期還未排課教師名單,查詢結果下:

(B) 系統分析:

這一題較簡單,只要找出沒有在 open_course 表格內的 teacher_ID,再由 teachers 表格找出相對應姓名即可。

(C) 程式範例:

select  teacher_ID, name

from teachers

where not exists (select *

                            from open_course

                             where teacher_ID = teachers.teacher_ID)

5-4-4範例研討:查詢未選課學生名單

(A) 程式功能:Ex5_7

查詢這學期開『資訊管理系』尚未選課學生學號與姓名,結果如下: (請新增一位資訊管理系學生)

(B) 系統分析:

  • 步驟 1查詢資訊管理系的系別編碼(Dep_ID)

  • 步驟 2由系別編碼(Dep_ID) 查出資訊管理系有哪些班級(class_ID)

  • 步驟利用 class_ID students 表中查出有哪些學生,並且不在 select_course 表內,則印出其 student_ID name

(C) 程式範例:

select  student_ID, name

from students

where not exists (select *

                           from select_course

                           where student_ID = students.student_ID)

and class_ID in (select class_ID

                           from classes

                          where dep_ID = (select Dep_ID

                                                      from department

                                                      where dep_name = "資訊管理系"));

5-4-5範例研討:查詢系老師開課代碼

(A) 程式功能:Ex5_8

查詢這學期開『資訊管理系』老師總共開了那些課程,如下:

(B) 系統分析:

  • 步驟 1 department 表中查詢資訊管理系的系別編碼(Dep_ID)

  • 步驟 2利用 Dep_ID teachers 查出有哪些老師,由 open_course 表中有開課教師,在印出課程代碼 (course_ID)

(C) 程式範例:

select  distinct  course_ID

from open_course

where exists (select *

                       from teachers

                      where teacher_ID = open_course.teacher_ID

                      And dep_ID = (select dep_ID

                                              from department

                                              where dep_name='資訊管理系'));

5-4-6 自我挑戰:查詢系別教師開課名稱

(A) 程式功能:PM5_6

查詢這學期開『資訊管理系』老師總共開了那些課程的課程名稱(延續 5-3-5 題目),如下:

翻轉工作室:粘添壽

 

資料庫系統概論(含邏輯設計)

 

 

翻轉電子書系列: