SELECT within SELECT Tutorial(SQLZoo第四部分)

参考表

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

-- 4.1
SELECT name FROM world
			WHERE population >
			(SELECT population FROM worldWHERE name='Russia')

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

-- 4.2
SELECT name FROM world 
            WHERE gdp/population > 
            (SELECT gdp/population FROM world WHERE name = 'United Kingdom')
            AND continent = 'Europe'

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

-- 4.3
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。以德國的人口的百分比作人口顯示。

-- 4.5
SELECT name, 
       CONCAT( ROUND( population/( SELECT population FROM world WHERE name= 'Germany')*100, 0), '%') percentage
       FROM world
       WHERE continent= 'Europe';

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

--4.6
SELECT name FROM world
            WHERE gdp > ALL(SELECT gdp FROM world WHERE continent = 'Europe' AND gdp>0)

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

-- 4.7
SELECT continent,name,area FROM world x
                           WHERE area >= 
                           ALL(SELECT area FROM world y WHERE y.continent = x.continent AND area>0)

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

-- 解法1
SELECT continent,name FROM world x
                      WHERE name <=
                      ALL(SELECT name FROM world y WHERE x.continent = y.continent)
-- 解法2
SELECT continent,name FROM world x
                      WHERE name =
                      (SELECT name FROM world y WHERE x.continent = y.continent ORDER BY name LIMIT 1)

-- 解法3
SELECT continent,name FROM world x
                      WHERE name =
                      (SELECT TOP 1 name FROM world y WHERE x.continent = y.continent ORDER BY name)

-- 解法4
SELECT continent,name FROM world
                      WHERE name IN 
                      (SELECT MIN(name) FROM world GROUP BY continent);

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

-- 4.9
SELECT name,continent,population FROM world x
                                 WHERE 25000000 >=
                                 ALL(SELECT population FROM world y WHERE x.continent = y.continent AND y.population > 0)

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

-- 4.10
-- 解法一:数字过大,导致超出int类型范围
SELECT name,continent FROM world x
                      WHERE population >= 
                      ALL(SELECT 3*y.population FROM world y WHERE x.continent = y.continent 
                      AND x.name!=y.name AND y.population > 0)
-- 解法二:不一定很准确,毕竟涉及除法
SELECT name,continent FROM world x
                      WHERE x.population/3 >= 
                      ALL(SELECT y.population FROM world y WHERE x.continent = y.continent 
                      AND x.name!=y.name AND y.population > 0)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值