SQLZoo 是全球知名的互動式 SQL 學習平台。本文針對 SELECT basics 章節,提供中文場景說明、核心語法講解、標準答案與變體練習,幫助零基礎學習者快速掌握 SELECT 查詢核心技能。
| 欄位 | 中文含義 | 型別 | 範例 |
|---|---|---|---|
name | 國家名稱 | VARCHAR | 'China', 'Germany' |
continent | 洲份 | VARCHAR | 'Asia', 'Europe' |
area | 面積(平方公里) | INT | 9600000 |
population | 人口數 | BIGINT | 1400000000 |
gdp | 國內生產總值 | BIGINT | 14000000000000 |
題目:顯示 'Germany' (德國) 的人口數。字串需用單引號。
-- 答案
SELECT population FROM world WHERE name = 'Germany';
解析:WHERE 過濾單一記錄,字串常量必須用單引號 'Germany',雙引號在標準 SQL 中為識別符(MySQL 除外)。
題目:查詢面積 > 5,000,000 平方公里的國家,顯示國家名與人均 GDP (gdp/population)。
-- 答案
SELECT name, gdp/population FROM world WHERE area > 5000000;
解析:
SELECT 列表中使用算術運算式 gdp/populationWHERE 條件使用數值比較,無需引號gdp/population,建議加 AS per_capita_gdp題目:顯示 'Ireland'(愛爾蘭)、'Iceland'(冰島)、'Denmark'(丹麥) 的國家名與人口。
-- 答案
SELECT name, population FROM world WHERE name IN ('Ireland', 'Iceland', 'Denmark');
解析:
IN 等價於多個 OR:name='Ireland' OR name='Iceland' OR name='Denmark'IN 列表順序不影響結果,執行計畫通常優化為常量集合查找BETWEEN題目:顯示面積在 200,000 至 250,000 平方公里之間的國家名與面積(含邊界)。
-- 答案
SELECT name, area FROM world WHERE area BETWEEN 200000 AND 250000;
解析:
BETWEEN a AND b 等價於 area >= 200000 AND area <= 250000,**包含邊界值**area > 200000 AND area < 250000| 語法元素 | 功能 | 範例 | 注意事項 |
|---|---|---|---|
SELECT col1, col2 | 指定輸出欄位 | SELECT name, population | * 代表所有欄位,生產環境禁用 |
FROM table | 指定資料來源 | FROM world | 可加別名 FROM world w |
WHERE condition | 行級過濾 | WHERE area > 5000000 | 字串加單引號,日期用 'YYYY-MM-DD' |
col IN (v1,v2) | 離散集合匹配 | name IN ('A','B') | 優於多個 OR,可含子查詢 |
col BETWEEN a AND b | 連續範圍匹配 | area BETWEEN 100 AND 200 | 含邊界,a 必須 ≤ b |
expr AS alias | 欄位別名 | gdp/population AS per_capita | 可省略 AS,建議保留提升可讀性 |
SELECT name, population FROM world WHERE population > 100000000 ORDER BY population DESC LIMIT 5;
SELECT SUM(area) AS total_area, AVG(population) AS avg_pop FROM world WHERE continent = 'Asia';
SELECT name, gdp/population AS per_capita_gdp FROM world WHERE population >= 1000000 ORDER BY per_capita_gdp DESC LIMIT 10;
SELECT name, population,
CASE
WHEN population > 1000000000 THEN '超大國'
WHEN population > 100000000 THEN '大國'
ELSE '中小國'
END AS country_level
FROM world;
WHERE、IN、BETWEEN 的邏輯差異,舉一反三col = NULL 永遠為假,必須用 col IS NULL;IN 列表含 NULL 會影響結果SELECT name:字串模式匹配 (LIKE、%、_)SELECT from WORLD:聚合函數 (SUM、COUNT、AVG)、GROUP BY、HAVINGSELECT from NOBEL:多表連接 (JOIN、LEFT JOIN)SELECT within SELECT:子查詢、EXISTS、ALL/ANYUsing NULL:IS NULL、COALESCE、NULLIF給初學者的話:SQL 看起來像英語,實則是嚴格的集合運算語言。前 20 小時刻意練習
SELECT-FROM-WHERE三大塊,建立「集合→過濾→投影」心智模型,後續 Join、子查詢、窗口函數才不會迷失。SQLZoo 免費、無廣告、即時反饋,是入門最佳練兵場。