SQL 子查詢


SQL UNION
SQL UNION ALL
SQL INTERSECT
SQL MINUS
SQL 子查詢
SQL EXISTS
SQL CASE
SQL 算排名
SQL 算中位數
SQL 算累積總計
SQL 算總合百分比
SQL 算累積總合百分比



網站導引
其他資源


我們可以在一個 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')

結果:

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 1999-2009   1keydata.com.   版權所有