SELECT within SELECT Tutorial/zh
| Language: Project:Language policy | English • 日本語 • 中文 |
|---|
此教程教我們在SELECT查詢中使用別一個SELECT查詢,進行一些更複雜的查詢。
| name國家名 | continent洲份 | area面積 | population人口 | gdp國民生產總值 |
|---|---|---|---|---|
| Afghanistan | Asia | 652230 | 25500100 | 20343000000 |
| Albania | Europe | 28748 | 2831741 | 12960000000 |
| Algeria | Africa | 2381741 | 37100000 | 188681000000 |
| Andorra | Europe | 468 | 78115 | 3712000000 |
| Angola | Africa | 1246700 | 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'的數值。
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。以德國的人口的百分比作人口顯示。
SELECTname, CONCAT(ROUND(100*population/(SELECTpopulationFROMworldWHEREname='Germany')),'%') FROMworld WHEREcontinent='Europe'
如要練習一些較少用的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)