此章接續前章: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;
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. 顯示所有國家名與所屬洲,及重新定義的新所屬洲。
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;
這章的題目更具有挑戰性,有些問題可能只是語意理解錯誤,不是不會 ˊ ˋ 有些 error 也可能只是尾巴少了某一符號,相當考驗細心度。多了 ROUND 函數 取數值尾數 & CASE 函數 用於替換,題目變得多樣有趣。閒聊下~ 我是直接拿 SQLZOO學 SQL語法(有些人是學後刷題用),雖然本科計算機,但完全零基礎。相對 C等程式語言,這真的小蛋糕,好吃美味(x
歡迎任何對文章的建議,如果喜歡也可以幫我拍手鼓勵!