exists子句在Sql中的含義

ljm0211發表於2012-06-20
      帶有EXISTS謂詞的子查詢不返回任何資料,只產生邏輯真值“true”或邏輯假值“false”。
      使用存在量詞EXISTS後,若內層查詢結果非空,則外層的WHERE子句返回真值否則返回假值。
      由EXISTS引出的子查詢,其目標列表示式通常都用*,因為帶EXISTS的子查詢只返回真值或假值,給出列名無實際意義。
      這類查詢與前面講解得不相關子查詢有一個明顯的區別,即子查詢的查詢條件依賴於外層父查詢的某個屬性值,稱這類查詢為相關子查詢。求解相關子查詢不能像求解不相關子查詢那樣,一次將子查詢求解出來,然後求解父查詢。內層查詢由於與外層查詢有關,因此必須反覆求值。從概念上講,相關查詢的一般處理過程是:
      首先去外層查詢中表的第1個元組,根據它與內層查詢相關的屬性值處理內層查詢,若WHERE子句返回值為真,則取此元組放入結果表;然後再取表的下一個元組;重複這個過程直到外層表全部檢查完為止。
      相對來講,in子句通常用在不相關子查詢中。通常先執行子查詢,將子查詢的結構用於父查詢。子查詢的查詢條件不依賴於父查詢,這類子查詢稱為不相關子查詢
exists子句例子:SELECT Sname
                          FROM Student
                          WHERE EXISTS
                                       (SELECT *
                                         FROM SC
                                        WHERE Sno=Student.Sno AND Cno='1');
in子句例子:SELECT Sno,Sname,Sdept
           FROM Student
           WHERE Sdept IN
                (SELECT Sdept
                 FROM Student
                 WHERE Sname='');

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/11411056/viewspace-733344/,如需轉載,請註明出處,否則將追究法律責任。

相關文章