Using nested SELECT/zh
From SQLZoo
如何使用SELECT中的SELECT
See SELECT FROM SELECT for how to use a derived table.
SELECT查詢的結果可以當作一個值,用在另一個查詢當中,例如
SELECT continent FROM world WHERE name = 'Brazil'
得到結果 'South America'
,所以我們可以用此值來找出與巴西'Brazil'同一洲份的全部國家。
List each country in the same continent as 'Brazil'.
SELECT name FROM world WHERE continent =
(SELECT continent
FROM world WHERE name = 'Brazil')
別名
在某些SQL系統中,子查詢中有時必須使用別名, 當作新的表格名. 只需加上 AS 別名
在括號之後:
SELECT name FROM world WHERE continent = (SELECT continent FROM world WHERE name='Brazil') AS brazil_continent
多於一個結果
子查詢有時會得出多於一個結果-如出現,而你又對此結果進行值的比較,會出現錯誤。 可能的話,使用IN會更加安全。
查詢(SELECT continent FROM world WHERE name = 'Brazil' OR name='Mexico')
會得到兩個值('North America' 和 'South America'). 你應使用:
SELECT name, continent FROM world WHERE continent IN (SELECT continent FROM world WHERE name='Brazil' OR name='Mexico')
列出與巴西'Brazil' 和 墨西哥'Mexico'相同洲份的每個國家名和洲份。
SELECT name, continent FROM world
WHERE continent IN
(SELECT continent
FROM world WHERE name='Brazil'
OR name='Mexico')
SELECT語句中的子查詢
如你保證子查詢只會有一個結果,你可以在SELECT語句中使用子查詢。
顯示中國人口是英國人口的多少倍。
SELECT
population/(SELECT population FROM world
WHERE name='United Kingdom')
FROM world
WHERE name = 'China'
對一個集合使用運算子
這些運算子是二元的,即它要兩個數值運作。:
= 等於 > 大於 < 小於 >= 大於或等於 <= 小於或等於
你可以使用 ALL 或 ANY ,當運算子的右面有多於一個值的時候。
找出哪些國家的人口是高於歐洲每一國的人口。\
留意,我們是找高於歐洲每一個單一國家的人口,不是歐洲各國合計的全部總人口。
SELECT name FROM world
WHERE population > ALL
(SELECT population FROM world
WHERE continent='Europe')