SQL有著非常強大且靈活的查詢方式,而多表連接操作往往也可以用子查詢進行替代,本篇文章將會講述子查詢的方方面面。
子查詢本質上是嵌套進其他SELECT,UPDATE,INSERT,DELETE語句的一個被限制的SELECT語句,在子查詢中,只有下面幾個子句可以使用
SELECT子句(必須)
FROM子句(必選)
WHERE子句(可選)
GROUP BY(可選)
HAVING(可選)
ORDER BY(只有在TOP關鍵字被使用時才可用)
子查詢也可以嵌套在其他子查詢中,這個嵌套最多可達32層。子查詢也叫內部查詢(Inner query)或者內部選擇(Inner Select),而包含子查詢的查詢語句也叫做外部查詢(Outter)或者外部選擇(Outer Select),子查詢的概念可以簡單用下圖闡述:
上圖是作為數據源使用的一個子查詢.
通常來講,子查詢按照子查詢所返回數據的類型,可以分為三種,分別為:
返回一張數據表(Table)
返回一列值(Column)
返回單個值(Scalar)
下面,我們按照這三種方式來闡述子查詢
當子查詢在外部查詢的FROM子句之後使用時,子查詢被當作一個數據源使用,即使這時子查詢只返回一個單一值(Scalar)或是一列值(Column),在這裡依然可以看作一個特殊的數據源,即一個二維數據表(Table).作為數據源使用的子查詢很像一個View(視圖),只是這個子查詢只是臨時存在,並不包含在數據庫中。
比如這個語句:
SELECT P.ProductID, P.Name, P.ProductNumber, M.Name AS ProductModelName FROM Production.Product AS P INNERJOIN (SELECT Name, ProductModelID FROM Production.ProductModel) AS M ON P.ProductModelID = M.ProductModelID
上述子查詢語句將ProductModel表中的子集M,作為數據源(表)和Product表進行內連接。結果如下:
作為數據源使用也是子查詢最簡單的應用。當然,當子查詢作為數據源使用時,也分為相關子查詢和無關子查詢,這會在文章後面介紹到.