SQLZOO 4.SELECT-within-SELECT

175 阅读2分钟

SELECT within SELECT Tutorial

namecontinentareapopulationgdp
AfghanistanAsia6522302550010020343000000
AlbaniaEurope28748283174112960000000
AlgeriaAfrica238174137100000188681000000
AndorraEurope468781153712000000
AngolaAfrica124670020609294100990000000
...

1.Bigger than Russia

列出人口大于俄罗斯的国家。

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

Correct answer

name
Bangladesh
Brazil
China
India
Indonesia
Nigeria
Pakistan
United States

2.Richer than UK

列出人均GDP大于美国的欧洲国家。

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

Correct answer

name
Andorra
Austria
Belgium
Denmark
Finland
France
Germany
Iceland
Ireland
Liechtenstein
Luxembourg
Monaco
Netherlands
Norway
San Marino
Sweden
Switzerland

3.Neighbours of Argentina and Australia

列出与阿根廷或澳大利亚所在大洲相同的国家,并以名称字母排序

SELECT name,continent FROM world
  WHERE continent IN
     (SELECT continent FROM world
      WHERE name='Argentina' OR name = 'Australia' )
ORDER BY name

Correct answer

namecontinent
ArgentinaSouth America
AustraliaOceania
BoliviaSouth America
BrazilSouth America
ChileSouth America
ColombiaSouth America
EcuadorSouth America
FijiOceania
GuyanaSouth America
KiribatiOceania
Marshall IslandsOceania
Micronesia, Federated States ofOceania
NauruOceania
New ZealandOceania
PalauOceania
Papua New GuineaOceania
ParaguaySouth America
PeruSouth America
Saint Vincent and the GrenadinesSouth America
SamoaOceania
Solomon IslandsOceania
SurinameSouth America
TongaOceania
TuvaluOceania
UruguaySouth America
VanuatuOceania
VenezuelaSouth America

4.Between Canada and Poland

列出人口比加拿大多,比波兰少的国家。

SELECT name,population FROM world
  WHERE population >
     (SELECT population FROM world
      WHERE name='Canada') AND population  < (SELECT population FROM world
      WHERE name='Poland')

Correct answer

namepopulation
Iraq36004552
Sudan37289406

5.Percentages of Germany

列出欧洲国家名称,以及该国人口占德国人口的百分比。

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

Correct answer

namepercentage
Albania3%
Andorra0%
Austria11%
Belarus12%
Belgium14%
Bosnia and Herzegovina5%
Bulgaria9%
Croatia5%
Czech Republic13%
Denmark7%
Estonia2%
Finland7%
France82%
Germany100%
Greece14%
Hungary12%
Iceland0%
Ireland6%
Italy75%
Kazakhstan21%
Latvia2%
Liechtenstein0%
Lithuania4%
Luxembourg1%
Macedonia3%
Malta1%
Moldova4%
Monaco0%
Montenegro1%
Netherlands21%
Norway6%
Poland48%
Portugal13%
Romania25%
San Marino0%
Serbia9%
Slovakia7%
Slovenia3%
Spain58%
Sweden12%
Switzerland10%
Ukraine53%
United Kingdom79%
Vatican City0%

6.Bigger than every country in Europe

列出GDP大于欧洲所有国家的国家名称。

SELECT name
FROM world
WHERE GDP > ALL (
	SELECT GDP
	FROM world
	WHERE GDP > 0
		AND continent = 'Europe'
)

Correct answer

name
China
Japan
United States

7.Largest in each continent

列出每个大洲面积最大的国家,按大洲,国家名称,面积。

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

Correct answer

continentnamearea
AfricaAlgeria2381741
OceaniaAustralia7692024
South AmericaBrazil8515767
North AmericaCanada9984670
AsiaChina9596961
CaribbeanCuba109884
EuropeKazakhstan2724900
EurasiaRussia17125242

8.First country of each continent (alphabetically)

列出大洲,国家名称,只列各大洲的字母排序的第一个国家。

SELECT continent,name FROM world x
  WHERE name =
    (SELECT name FROM world y
        WHERE y.continent=x.continent ORDER BY name  limit 1)

Correct answer

continentname
AfricaAlgeria
AsiaAfghanistan
CaribbeanAntigua and Barbuda
EurasiaArmenia
EuropeAlbania
North AmericaBelize
OceaniaAustralia
South AmericaArgentina

9.Difficult Questions That Utilize Techniques Not Covered In Prior Sections

列出大洲总人口小于25000000的大洲上的国家名称,所在大洲,人口。

SELECT name, continent, population FROM world
WHERE continent IN
(SELECT continent FROM world a
WHERE population >= ALL(SELECT population FROM world b where b.continent = a.continent AND population > 0)
AND population <= 25000000)

Correct answer

namecontinentpopulation
Antigua and BarbudaCaribbean86295
AustraliaOceania23545500
BahamasCaribbean351461
BarbadosCaribbean285000
CubaCaribbean11167325
DominicaCaribbean71293
Dominican RepublicCaribbean9445281
FijiOceania858038
GrenadaCaribbean103328
HaitiCaribbean10413211
JamaicaCaribbean2717991
KiribatiOceania106461
Marshall IslandsOceania56086
Micronesia, Federated States ofOceania101351
NauruOceania9945
New ZealandOceania4538520
PalauOceania20901
Papua New GuineaOceania7398500
Saint LuciaCaribbean180000
SamoaOceania187820
Solomon IslandsOceania581344
TongaOceania103036
Trinidad and TobagoCaribbean1328019
TuvaluOceania11323
VanuatuOceania264652

10.

列出可以3倍于同一大洲任一国家人口的国家名称和大洲名称。

SELECT name, continent 
FROM world a
WHERE a.population/3  
	>=ALL(SELECT population FROM world b where b.continent = a.continent AND b.name<> a.name )

Correct answer

namecontinent
AustraliaOceania
BrazilSouth America
RussiaEurasia