相關子查詢


相關子查詢是指引用了外部查詢中出現的表的列的子查詢。這就意味着子查詢要依賴於外部查詢,不能獨立地調用它。在邏輯上,相關子查詢會為每個外部行單獨計算一次。這篇文章我想從以下兩個方面進行總結。

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字段

查詢結果:

image

相關子查詢和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);

查詢結果:

image

使用謂詞EXISTS的好處之一就是可以用類似英語的語言來直觀地表達查詢。而且,EXISTS謂詞的另一個需要注意的方面是:與T-SQL中的大多數謂詞不同,EXISTS謂詞使用的是二值邏輯,而不是三值邏輯,也就是說,不知道查詢是否有返回行的情況是不存在的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM