Sitemap

SQLZOO Notes II - SELECT from WORLD Tutorial

6 min readSep 2, 2019
Photo by Carlos Muza on Unsplash

篇章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;

心得

這章的題目更具有挑戰性,有些問題可能只是語意理解錯誤,不是不會 ˊ ˋ 有些 error 也可能只是尾巴少了某一符號,相當考驗細心度。多了 ROUND 函數 取數值尾數 & CASE 函數 用於替換,題目變得多樣有趣。閒聊下~ 我是直接拿 SQLZOO學 SQL語法(有些人是學後刷題用),雖然本科計算機,但完全零基礎。相對 C等程式語言,這真的小蛋糕,好吃美味(x

希望有幫助到你

歡迎任何對文章的建議,如果喜歡也可以幫我拍手鼓勵!

--

--

一枝莉莉
一枝莉莉

Written by 一枝莉莉

Product Manager | 喜歡發現生活中的樂趣 | 左撇子 | 平時熱衷於觀察社會及研究 UI /UX 設計 | 愛上旅行 / 做甜點 / 影樂欣賞 / 瑜珈。

No responses yet