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

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

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

Store_Information 表格

store_name
Sales
Date

Los Angeles
$1500
Jan-05-1999

San Diego
$250
Jan-07-1999

Los Angeles
$300
Jan-08-1999

Boston
$700
Jan-08-1999

Geography 表格

region_name
store_name

East
Boston

East
New York

West
Los Angeles

West
San Diego

我們要運用 subquery 來找出所有在西部的店的營業額。我們可以用下面的 SQL 來達到我們的目的:

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)

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

No Money No Hone 發表在 痞客邦 PIXNET 留言(0) 人氣()