5-4 多重查詢 Exists 連結
內容:
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) 系統分析:
select Dep_ID
from department
where dep_name = "資訊管理系"
|
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)。
-
步驟 3 :利用 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) 系統分析:
(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 題目),如下:
|