相關子查詢是指引用了外部查詢中出現的表的列的子查詢。這就意味着子查詢要依賴於外部查詢,不能獨立地調用它。在邏輯上,相關子查詢會為每個外部行單獨計算一次。這篇文章我想從以下兩個方面進行總結。
1,一個相關子查詢的簡單例子
2,相關子查詢和EXISTS謂詞
一個相關子查詢的簡單例子
例如,以下查詢會為每個客戶返回其訂單ID最大的訂單。
SQL查詢代碼如下:
-- 相關子查詢 SELECT custid,orderid,orderdate,empid FROM Sales.Orders AS orders1 WHERE orderid= (SELECT MAX(orders2.orderid) FROM Sales.Orders AS orders2 WHERE orders2.custid= orders1.custid);-- 這里引用了外部查詢的custid字段
查詢結果:
相關子查詢和EXISTS謂詞
相關子查詢通常也和謂詞EXISTS一起使用,對於EXISTS,它的輸入是一個子查詢,如果子查詢能夠返回任何行,那么它就返回TRUE,否則返回FALSE。
例如,以下查詢語句返回下過訂單的西班牙客戶。
SQL查詢代碼:
-- 相關子查詢和謂詞EXISTS SELECT customers.custid,customers.companyname FROM Sales.Customers AS customers WHERE customers.country=N'Spain' AND EXISTS(SELECT * FROM Sales.Orders AS orders WHERE orders.custid= customers.custid);
查詢結果:
使用謂詞EXISTS的好處之一就是可以用類似英語的語言來直觀地表達查詢。而且,EXISTS謂詞的另一個需要注意的方面是:與T-SQL中的大多數謂詞不同,EXISTS謂詞使用的是二值邏輯,而不是三值邏輯,也就是說,不知道查詢是否有返回行的情況是不存在的。