SQLZOO Notes II - SELECT from WORLD Tutorial
篇章II - SELECT from WORLD Tutorial
此章接續前章:SELECT basics I。比起前章節,題目相對更靈活。
題目:https://sqlzoo.net/wiki/SQLZOO:SELECT_from_WORLD_Tutorial/zh
以下是 SELECT basics I 連結:https://medium.com/@yuting.lily.wang/sqlzoo-select-basics-i-efd531af8c16
我們一樣會使用SELECT語句,對World表格進行查詢。讓我們開始吧 !
Q1. 閱讀此表的注意事項 ,觀察運行一個簡單的SQL命令的結果。
SELECT name, continent, population FROM world;
Q2. 顯示具有至少2億人口的國家名稱。( 2億 : 200000000,有8個零 )
SELECT name FROM world
WHERE population >= 200000000;
Q3. 找出有至少200百萬(2億)人口的國家名稱,及人均國內生產總值(GDP/population)。
SELECT name, gdp/population FROM world
WHERE population >= 200000000;
Q4. 顯示 ’South America’南美洲大陸的國家名字和以百萬為單位人口數。 ( 將人口 population 除以一百萬(1000000)可得以百萬為單位人口數 )
SELECT name, population/1000000 FROM world
WHERE continent = ‘South America’;
Q5. 顯示 France, Germany, Italy 的國家名稱和人口。
SELECT name, population FROM world
WHERE name IN (‘Germany’, ‘France’, ‘Italy’);
Q6. 顯示包含單詞 “United” 為名稱的國家。
SELECT name FROM world
WHERE name LIKE ‘United%’;
Q7. 判定大國的兩種方式:a. 如果它有3百萬平方公里以上的面積 或是 b. 擁有250百萬(2.5億)以上人口。顯示大國的名稱、人口和面積。
SELECT name, population, area FROM world
WHERE area >= 3000000
OR population >= 250000000;
Q8. 顯示以人口"或"面積為大國的國家,但需"排除"同時符合之大國。顯示符合條件的國家名稱、人口和面積。
Ex : USA, India, China 是人口多,同時面積也大的國家,故不顯示。
SELECT name, population, area FROM world
WHERE (area >= 3000000 AND population < 250000000)
OR (area < 3000000 AND population >= 250000000);
Q9. 顯示對於南美國家名稱及以百萬計顯示的人口,和以十億為單位含2位小數顯示的 GDP。
Tips:a. 除以1000000 (6個零)=以百萬計。 b. 除以1000000000(9個零)=以十億計。 c. 使用 ROUND 函數 來顯示小數點後兩位的數值。
SELECT name,
ROUND(population/1000000, 2) AS population,
ROUND(gdp/1000000000, 2) AS gdp FROM world
WHERE continent = ‘South America’;
Q10. 顯示 GDP 達至少1萬億元 (12個零) 以上的國家名稱,及人均國內生產總值 (此值:GDP/population 需四捨五入到最接近1000)。
Notes:先以 ROUND函數取 "人均國內生產總值/1000" 四捨五入之整數,再乘回來 1000。
SELECT name,
ROUND(gdp/population/1000, 0) * 1000 AS gdpp FROM world
WHERE gdp >= 1000000000000;
More challenging Questions
Tips:使用 CASE 函數 替換。
Q11. 顯示以 N 為首的國家名 ,與所屬洲 (若為 Oceania , 改以 Australasia 顯示)。
SELECT name,
CASE WHEN continent = ‘Oceania’ THEN ‘Australasia’
ELSE continent
END
FROM world
WHERE name LIKE ‘N%’;
Q12. 顯示以 A / B 為首的國家名 ,與所屬洲 (用 Eurasia 代替 Europe / Asia;用 America 代替 North America / South America / Caribbean)。
SELECT name,
CASE WHEN continent=’Europe’ OR continent=’Asia’
THEN ‘Eurasia’
WHEN continent LIKE ‘% America’ OR continent=’Caribbean’
THEN ‘America’
ELSE continent
END
FROM world
WHERE name LIKE ‘A%’ OR name LIKE ‘B%’;
Q13. 顯示所有國家名與所屬洲,及重新定義的新所屬洲。
- Oceania 替換成 Australasia
- 在 Eurasia 的國家 及 Turkey 替換成 Europe/Asia
- 以 B 為首的 Caribbean islands 替換成 North America, 其餘的 Caribbean islands 則替換成 South America
Notes:Eurasia 是 continent(洲); Turkey 是 name(國名);以國名排序
SELECT name, continent,
CASE WHEN continent = ‘Oceania’ THEN ‘Australasia’
WHEN continent = ‘Eurasia’ THEN ‘Europe/Asia’
WHEN name = ‘Turkey’ THEN ‘Europe/Asia’
WHEN continent = ‘Caribbean’ AND name LIKE ‘B%’
THEN ‘North America’
WHEN continent = ‘Caribbean’ AND name NOT LIKE ‘B%’
THEN ‘South America’
ELSE continent
END
FROM world
ORDER BY name;