Using nested SELECT/zh

From SQLZoo

反回 SELECT中的SELECT練習

如何使用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')

返回 SELECT中的SELECT練習