1. 程式人生 > >SQL 子查詢

SQL 子查詢

單個 調用 不依賴 相關子查詢 date 1.2 like p s tid

SQL支持在查詢中編寫查詢,或者嵌套其他查詢。最外層查詢的結果集會返回給調用者,稱為外部查詢。內部查詢的結果是提供給外部查詢使用的,也成為子查詢。 子查詢可以分為獨立子查詢和相關子查詢兩類。獨立子查詢不依賴於它所屬的外部查詢,而相關子查詢則須依賴於他所屬的外部查詢。子查詢可以返回單值(標量)、多值、表。

1.獨立子查詢

獨立子查詢是獨立於外部查詢的子查詢。獨立子查詢調試起來非常方便,因為總可以把子查詢代碼獨立出來單獨運行,並確保它能夠實現默認的功能。

1.1獨立標量子查詢

標量子查詢是返回單個值的子查詢,它可以出現在外部子查詢期望使用單個值的任何地方(WHERE,、SELECT,等等)

SELECT
orderid,orderdate,empid,custid FROM TSQLFundamentals2008.Sales.Orders WHERE orderid= (SELECT MAX(A.orderid) FROM TSQLFundamentals2008.Sales.Orders AS A)

例句查詢了TSQLFundamentals2008數據中的Orders表,返回表中的訂單ID最大的訂單信息。先通過子查詢先獲取訂單表中最大的訂單ID,再從訂單表中篩選出此訂單ID對應的信息。

1.2獨立多值子查詢

多值子查詢是在一個列中返回多個值的子查詢 ,一些謂詞(例如 IN 謂詞)可以處理多值子查詢。IN 謂詞的格式可以是:<標量表達式> IN (<多值子查詢>)。如果標量表達式的值與子查詢返回值中的任何一個值相等,IN 謂詞的計算結果就為TRUE。NOT運算符可以用來否定謂詞,例如 NOT IN 。

SELECT orderid
FROM TSQLFundamentals2008.Sales.Orders
WHERE empid IN 
    (SELECT A.empid
     FROM TSQLFundamentals2008.HR.Employees AS A
     WHERE A.lastname LIKE D%)

例句返回由姓氏以D開頭的雇員所處理的訂單ID。先通過 子查詢獲取雇員表中姓氏以D開頭的雇員ID,再從訂單表中篩選出雇員ID包含在子查詢返回的雇員ID中的訂單ID。

2.相關子查詢

SQL 子查詢