SELECT within SELECT Tutorial/zh

From SQLZoo
Language: Project:Language policy English  • 日本語  • 中文

此教程教我們在SELECT查詢中使用別一個SELECT查詢,進行一些更複雜的查詢。

name國家名continent洲份area面積 population人口gdp國民生產總值
AfghanistanAsia6522302550010020343000000
AlbaniaEurope28748 2831741 12960000000
AlgeriaAfrica2381741 37100000 188681000000
AndorraEurope46878115 3712000000
AngolaAfrica1246700 20609294 100990000000
...

如何使用子查詢

練習

列出每個國家的名字 name,當中人口 population 是高於俄羅斯'Russia'的人口。

world(name, continent, area, population, gdp)


SELECTnameFROMworld
WHEREpopulation>
(SELECTpopulationFROMworld
WHEREname='Romania')
SELECTnameFROMworld
WHEREpopulation>
(SELECTpopulationFROMworld
WHEREname='Russia')


列出歐州每國家的人均GDP,當中人均GDP要高於英國'United Kingdom'的數值。

人均GDP即是 gdp除以population
SELECTnameFROMworld
WHEREcontinent='Europe'ANDgdp/population>
(SELECTgdp/populationFROMworld
WHEREname='United Kingdom')

在阿根廷Argentina 及 澳大利亞 Australia所在的洲份中,列出當中的國家名字 name 及洲分 continent 。按國字名字順序排序

SELECTname,continent
FROMworld
WHEREcontinentIN(
SELECTcontinent
FROMworld
WHEREnameIN('Australia','Argentina'))
ORDERBYname


哪一個國家的人口比加拿大Canada的多,但比波蘭Poland的少?列出國家名字name和人口population 。

SELECTname,populationFROMworld
WHEREpopulationBETWEEN
(SELECTpopulation+1FROMworldWHEREname='Canada')
AND
(SELECTpopulation-1FROMworldWHEREname='Poland')


Germany德國(人口8000萬),在Europe歐洲國家的人口最多。Austria奧地利(人口850萬)擁有德國總人口的11%。

顯示歐洲的國家名稱name和每個國家的人口population。以德國的人口的百分比作人口顯示。

您可以使用函數ROUND 刪除小數。
您可以使用函數 CONCAT 增加的百分比符號。
SELECTname,
CONCAT(ROUND(100*population/(SELECTpopulationFROMworldWHEREname='Germany')),'%')
FROMworld
WHEREcontinent='Europe'


練習SQL中較重要的功能--群組函數,按此到下一個教程。

如要練習一些較少用的SQL功能,看下去。

我們可以用ALL 這個詞對一個列表進行>=或>或<或<=充當比較。例如,你可以用此查詢找到世界上最大的國家(以人口計算):

SELECTname
FROMworld
WHEREpopulation>=ALL(SELECTpopulation
FROMworld
WHEREpopulation>0)

你需在子查詢的條件中使用 population>0,因為有些國家的記錄中,人口是沒有填入,只有 null值。

哪些國家的GDP比Europe歐洲的全部國家都要高呢? [只需列出 name 。] (有些國家的記錄中,GDP是NULL,沒有填入資料的。)

SELECTnameFROMworld
WHEREgdp>ALL
(SELECTgdpFROMworld
WHEREcontinent='Europe'
ANDgdpISNOTNULL)

我們可以在子查詢,參閱外部查詢的數值。我們為表格再命名,便可以分別內外兩個不同的表格。

在每一個州中找出最大面積的國家,列出洲份 continent, 國家名字 name 及面積 area。 (有些國家的記錄中,AREA是NULL,沒有填入資料的。)

SELECTcontinent,name,populationFROMworldx
WHEREpopulation>=ALL
(SELECTpopulationFROMworldy
WHEREy.continent=x.continent
ANDpopulation>0)
SELECTcontinent,name,area
FROMworldx
WHEREarea>=ALL
(SELECTareaFROMworldy
WHEREy.continent=x.continent
andarea>0)


列出洲份名稱,和每個洲份中國家名字按子母順序是排首位的國家名。(即每洲只有列一國)

SELECTcontinent,nameFROMworldx
WHEREx.name<=ALL(
SELECTnameFROMworldy
WHEREx.continent=y.continent)

困難的題目(早前練習沒有包含的技巧)

找出洲份,當中全部國家都有少於或等於 25000000 人口. 在這些洲份中,列出國家名字name,continent 洲份和population人口。

SELECTname,continent,populationFROMworldx
WHERE25000000>=ALL(
SELECTpopulationFROMworldy
WHEREx.continent=y.continent
ANDy.population>0)

有些國家的人口是同洲份的所有其他國的3倍或以上。列出 國家名字name 和 洲份 continent。

SELECTname,continentFROMworldxWHERE
population>ALL
(SELECTpopulation*3FROMworldy
WHEREy.continent=x.continent
ANDy.name!=x.name)
Kaleidoscope - get a kaleidoscope view using your phone/laptop camera
  • Served by: noddy at 2026年07月06日T12:49