SELECT within SELECT Tutorial/zhJump to navigationJump to search
此教程教我們在SELECT查詢中使用別一個SELECT查詢,進行一些更複雜的查詢。
練習
1.
列出每個國家的名字 name,當中人口 population 是高於俄羅斯'Russia'的人口。
world(name, continent, area, population, gdp)
参考答案
SELECT name FROM world
WHERE population >
(SELECT population FROM world
WHERE name='Russia')


2.
列出歐州每國家的人均GDP,當中人均GDP要高於英國'United Kingdom'的數值。
人均GDP人均GDP即是 gdp除以population
参考答案
SELECT name FROM world
WHERE gdp/population >
(SELECT gdp/population FROM world
WHERE name = 'United Kingdom')
AND continent = 'Europe'


3.
在阿根廷Argentina 及 澳大利亞 Australia所在的洲份中,列出當中的國家名字 name 及洲分 continent 。按國字名字順序排序
参考答案
SELECT name, continent FROM world
WHERE continent in
(SELECT continent FROM world
WHERE name in ('Argentina','Australia'))
ORDER BY name


4.
哪一個國家的人口比加拿大Canada的多,但比波蘭Poland的少?列出國家名字name和人口population 。
参考答案
SELECT name, population FROM world
WHERE population >
(SELECT population FROM world
WHERE name = 'Canada')
AND population <
(SELECT population FROM world
WHERE name = 'Poland')


5.
Germany德國(人口8000萬),在Europe歐洲國家的人口最多。Austria奧地利(人口850萬)擁有德國總人口的11%。
顯示歐洲的國家名稱name和每個國家的人口population。以德國的人口的百分比作人口顯示。
小數位數百分號 %您可以使用函數 CONCAT 增加的百分比符號。
参考答案
SELECT name,
CONCAT(ROUND(population/(SELECT population FROM world WHERE name='Germany')*100,0),'%')
FROM world
WHERE continent = 'Europe'


練習SQL中較重要的功能--群組函數,按此到下一個教程。
如要練習一些較少用的SQL功能,看下去。
我們可以用ALL 這個詞對一個列表進行>=或>或<或<=充當比較。例如,你可以用此查詢找到世界上最大的國家(以人口計算):
SELECT name FROM world WHERE population >= ALL(SELECT population FROM world WHERE population>0)
你需在子查詢的條件中使用 population>0,因為有些國家的記錄中,人口是沒有填入,只有 null值。
6.
哪些國家的GDP比Europe歐洲的全部國家都要高呢? [只需列出 name 。] (有些國家的記錄中,GDP是NULL,沒有填入資料的。)
参考答案
SELECT name FROM world
WHERE GDP >
ALL(SELECT GDP FROM world
WHERE continent = 'Europe'
AND GDP > 0 )


我們可以在子查詢,參閱外部查詢的數值。我們為表格再命名,便可以分別內外兩個不同的表格。
7.
在每一個州中找出最大面積的國家,列出洲份 continent, 國家名字 name 及面積 area。 (有些國家的記錄中,AREA是NULL,沒有填入資料的。)
参考答案
SELECT continent, name, area FROM world x
WHERE area >= ALL
(SELECT area FROM world y
WHERE y.continent=x.continent
AND area>0)


8.
列出洲份名稱,和每個洲份中國家名字按子母順序是排首位的國家名。(即每洲只有列一國)
参考答案
SELECT continent, name FROM world x
WHERE x.name = (SELECT name FROM world y
WHERE y.continent=x.continent
ORDER BY name LIMIT 1)
