我們可以在一個 SQL 語句中放入另一個 SQL 語句。當我們在 WHERE 子
句或 HAVING 子句中插入另一個 SQL 語句時,我們就有一個子查詢
(subquery) 的架構。 子查詢的作用是什麼呢?第一,它可以被用來連接表格。另外,有的時候
子查詢是唯一能夠連接兩個表格的方式。
子查詢的語法如下:
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')
結果:
在這個例子中,我們並沒有直接將兩個表格連接起來,然後由此直接算出每一間西區店面的營業額。
我們做的是先找出哪些店是在西區的,然後再算出這些店的營業額總共是多少。
在以上的例子,內部查詢本身與外部查詢沒有關係。這一類的子查詢稱為『簡單子查詢』 (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 1999-2009 1keydata.com. 版權所有
|