我們可以在一個 SQL 語句中放入另一個 SQL 語句。當我們在 WHERE 子句或 HAVING 子句中插入另一個 SQL 語句時,我們就有一個子查詢 (Subquery) 的架構。 子查詢的作用是什麼呢?第一,它可以被用來連接表格。另外,有的時候子查詢是唯一能夠連接兩個表格的方式。

子查詢的語法如下:

SELECT "欄位1"
FROM "表格"
WHERE "欄位2" [比較運算素]
(SELECT "欄位1"
FROM "表格"
WHERE "條件"
);

[比較運算素] 可以是相等的運算素,例如 =, >, <, >=, <=. 這也可以是一個對文字的運算素,例如 "LIKE"。綠色的部分代表外查詢,紅色的部分代表內查詢。

我們就用剛剛在闡述 SQL 連接時用過的例子:

Store_Information 表格
Store_NameSalesTxn_Date
Los Angeles150005-Jan-1999
San Diego25007-Jan-1999
Los Angeles30008-Jan-1999
Boston70008-Jan-1999

Geography 表格
Region_NameStore_Name
EastBoston
EastNew York
WestLos Angeles
WestSan Diego

我們可以用以下的 Subquery 語句來找出所有在西部的店的營業額。

SELECT SUM(Sales) FROM Store_Information
WHERE Store_Name IN
(SELECT Store_Name FROM Geography
WHERE Region_Name = 'West');

結果:

SUM(Sales)
2050

在這個例子中,我們並沒有直接將兩個表格連接起來,然後由此直接算出每一間西區店面的營業額。我們做的是先找出哪些店是在西區的,然後再算出這些店的營業額總共是多少。

在以上的例子,內部查詢本身與外部查詢沒有關係。這一類的子查詢稱為『簡單子查詢』 (Simple Subquery)。如果內部查詢是要利用到外部查詢提到的表格中的欄位,那這個字查詢就被稱為『相關子查詢』 (Correlated Subquery)。以下是一個相關子查詢的例子:

SELECT SUM(a1.Sales) FROM Store_Information a1
WHERE a1.Store_Name IN
(SELECT Store_Name FROM Geography a2
WHERE a2.Store_Name = a1.Store_Name);

紅色部分即是外部查詢提到的表格中的欄位。

下一頁:SQL EXISTS



Copyright © 2017   1keydata.com   版權所有