子查詢(Sub Query)是嵌套在主查詢中的SELECT查詢語句,即當一個查詢是另一個查詢的條件時,稱之為子查詢。子查詢嵌套在一個 SELECT、SELECT...INTO 語句、INSERT...INTO 語句、DELETE 語句、或 UPDATE 語句或嵌套在另一子查詢中。
在SQL語言中,一個SELECT-FROM-WHERE語句稱為一個查詢塊。當獲得一個查詢的答案需要多個步驟的操作,首先必須建立一個查詢來确定使用者不知道但包含在資料庫中的值,将一個查詢塊嵌套在另一個查詢塊的WHERE字句或HAVING短語的條件中查詢塊稱為子查詢或内層查詢。上層的查詢塊曾為父查詢或外層查詢。子查詢的結果作為輸入傳遞回“父查詢”或“外部查詢”。父查詢将這個值結合到計算中,以便确定最後的輸出。
SQL語言允許多層嵌套查詢,即一個子查詢中還可以嵌套其他子查詢。以層層嵌套的方式來構造程式正是SQL中"結構化"的含義所在。
子查詢是本質上就是一個完整 的SELECT 語句,它可以使一個 SELECT、SELECT...INTO 語句、INSERT...INTO 語句、DELETE 語句、或 UPDATE 語句或嵌套在另一子查詢中。子查詢的輸出可以包括一個單獨的值(單行子查詢)、幾行值(多行子查詢)、或者多列資料(多列子查詢)。
可用三種文法來建立子查詢:
- comparison ANY | ALL | SOME
- expression [NOT] IN (sqlstatement)
- [NOT] EXISTS (sqlstatement)
其中,comparison是一個表達式及一個比較運算符,将表達式與子查詢的結果作比較。expression用以搜尋子查詢結果集的表達式。sqlstatement是SELECT 語句,遵從與其他 SELECT 語句相同的格式及規則。它必須括在括号之中。
子查詢的使用規則如下:
- 子查詢必須自身是一個完整的查詢。即它必須至少包括一個SELECT子句和FROM子句。
- 子查詢SELECT語句不能包括在ORDER BY子句中。因為ORDER BY字句隻能對最終查詢結果排序,如果顯示的輸出需要按照特定順序顯示,那麼ORDER BY子句應該作為外部查詢的最後一個子句列出。
- 子查詢“必須包括在一組括号中”,以便将它與外部查詢分開。
- 如果将子查詢放在外部查詢的WHERE或HAVING子句中,那麼該子查詢隻能位于比較運算符的“右邊”。
資料來源:
王珊 薩師煊.資料庫系統機率(第5版):高等教育出版社,2014
SQL 子查詢
http://www.veryhuo.com/a/manual/sql/dasqlsubqueries.htm