帶有EXISTS謂詞的子查詢

帶有EXISTS謂詞的子查詢不返回任何數據,只產生邏輯真值“true”或邏輯假值“false”.

1、查詢所有選修了1號課程的學生姓名。

本查詢涉及Student和SC表。可以在Student中一次取每個元組的Sno值,用此值去檢查SC表。若SC中存在這樣的元組,其Sno值等於此Student.Sno值,並且其Cno='1',則取此Student.Sname送入結果表。

SELECT Sname FROM Student WHERE EXISTS(SELECT * FROM SC WHERE Sno=Student.Sno AND Cno='1')

使用存在量詞EXISTS後,若內層查詢結果非空,則外層的WHERE子句返回真值,否則返回假值。

由EXISTS引出的子查詢,其目標列表達式通常都用*,因爲帶EXISTS的子查詢只返回真值或假值,給出列名無實際意義。

本例中子查詢的查詢條件依賴於外層父查詢的某個屬性值(Student的Sno值),因此也是相關子查詢。

這個相關子查詢的處理過程是:首先取外層查詢中(Student)表的第一個元組,根據他與內層查詢相關的屬性值(Sno值)處理內層查詢。若WHERE子句返回值爲真,則取外層查詢中該元組的Sname放入結果表;然後再取(Student)表的下一個元組,重複這一過程,直至外層(Student)表全部檢查完爲止。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章