SQLZoo 是經典的線上 SQL 練習平台。本文針對 world 資料表(欄位:name 國名、continent 洲別)的 15 道 SELECT 練習題,提供標準答案與語法解析,涵蓋 LIKE 模糊比對、萬用字元 % _、字串函數 CONCAT、REPLACE 等核心技巧。
world(name, continent)
-- 範例資料
Afghanistan | Asia
Albania | Europe
Algeria | Africa
...
| # | 題目需求 | SQL 語句 | 關鍵點 |
|---|---|---|---|
| 1 | 找出以 Y 開頭的國家 | SELECT name FROM world WHERE name LIKE 'Y%' | % 代表任意長度字串 |
| 2 | 找出以 Y 結尾的國家 | SELECT name FROM world WHERE name LIKE '%Y' | 同前,位置互換 |
| 3 | 名字包含字母 x 的國家 | SELECT name FROM world WHERE name LIKE '%x%' | 雙邊 % 任意位置 |
| 4 | 名字以 land 結尾 | SELECT name FROM world WHERE name LIKE '%land' | 後綴比對 |
| 5 | 以 C 開頭、ia 結尾 | SELECT name FROM world WHERE name LIKE 'C%ia' | 前綴+後綴組合 |
| 6 | 名字包含雙 o (oo) | SELECT name FROM world WHERE name LIKE '%oo%' | 子字串搜尋 |
| 7 | 名字含 3 個以上 a | SELECT name FROM world WHERE name LIKE '%a%a%a%' | 多重 % 計數 |
| 8 | 第 2 個字母是 t | SELECT name FROM world WHERE name LIKE '_t%' ORDER BY name | _ 單一字元萬用字元 |
| 9 | 兩個 o 中間隔 2 個字元 | SELECT name FROM world WHERE name LIKE '%o__o%' | __ 固定 2 字元 |
| 10 | 名字剛好 4 個字母 | SELECT name FROM world WHERE name LIKE '____' | 4 個 _ 精確長度 |
| 11 | 首都與國名相同 | SELECT name FROM world WHERE name = CONCAT(capital, '') | CONCAT 字串連接 |
| 12 | 首都 = 國名 + ' City' | SELECT name FROM world WHERE capital = CONCAT(name, ' City') | 字串運算比對 |
| 13 | 首都包含國名 | SELECT capital, name FROM world WHERE capital LIKE CONCAT('%', name, '%') | 動態建構 LIKE 模式 |
| 14 | 首都為國名延伸且不相同 | SELECT name, capital FROM world WHERE capital LIKE CONCAT('%', name, '%') AND capital != name | 排除相等情況 |
| 15 | 顯示國名及延伸詞 | SELECT name, REPLACE(capital, name, '') FROM world WHERE capital LIKE CONCAT(name, '%_') | REPLACE 移除國名取後綴 |
LIKE + %(任意長度)/ _(單一字元)是模糊查詢基石CONCAT(str1, str2, ...) 串接字串,MySQL 不支援 || 運算子REPLACE(str, from_str, to_str) 替換字串,此處用於「扣除國名取得首都後綴」AND/OR,注意括號優先序完成基礎 SELECT 後,建議挑戰 SQLZoo 後續單元:SELECT FROM nobel(聚合函數)、JOIN 多表查詢、NULL 處理、子查詢等,循序漸進建立扎實 SQL 功力。