首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

SQLZoo 入門教程:SELECT 基礎查詢中文詳解與練習答案

     編輯:MySQL 綜合教學

SQLZoo 入門教程:SELECT 基礎查詢中文詳解與練習答案

SQLZoo 是全球知名的互動式 SQL 學習平台。本文針對 SELECT basics 章節,提供中文場景說明、核心語法講解、標準答案與變體練習,幫助零基礎學習者快速掌握 SELECT 查詢核心技能。


一、學習資料集:world 表

欄位中文含義型別範例
name國家名稱VARCHAR'China', 'Germany'
continent洲份VARCHAR'Asia', 'Europe'
area面積(平方公里)INT9600000
population人口數BIGINT1400000000
gdp國內生產總值BIGINT14000000000000

二、核心練習題詳解

練習 1:查詢指定國家人口

題目:顯示 'Germany' (德國) 的人口數。字串需用單引號。


-- 答案
SELECT population FROM world WHERE name = 'Germany';

解析:WHERE 過濾單一記錄,字串常量必須用單引號 'Germany',雙引號在標準 SQL 中為識別符(MySQL 除外)。

練習 2:大面積國家的人均 GDP

題目:查詢面積 > 5,000,000 平方公里的國家,顯示國家名與人均 GDP (gdp/population)。


-- 答案
SELECT name, gdp/population FROM world WHERE area > 5000000;

解析:

  • 可直接在 SELECT 列表中使用算術運算式 gdp/population
  • WHERE 條件使用數值比較,無需引號
  • 結果欄位無別名,顯示為 gdp/population,建議加 AS per_capita_gdp

練習 3:IN 操作符多值匹配

題目:顯示 '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

練習 4: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,建議保留提升可讀性

四、進階變體練習(自測)

  1. 查詢人口超過 1 億的國家,按人口降序顯示前 5 名
    SELECT name, population FROM world WHERE population > 100000000 ORDER BY population DESC LIMIT 5;
  2. 查詢亞洲國家的總面積與平均人口
    SELECT SUM(area) AS total_area, AVG(population) AS avg_pop FROM world WHERE continent = 'Asia';
  3. 查詢人均 GDP 前 10 的國家(排除人口 < 100 萬的小國)
    SELECT name, gdp/population AS per_capita_gdp FROM world WHERE population >= 1000000 ORDER BY per_capita_gdp DESC LIMIT 10;
  4. 使用 CASE WHEN 將國家分級:人口 > 10 億「超大國」、> 1 億「大國」、其他「中小國」
    SELECT name, population,
      CASE
        WHEN population > 1000000000 THEN '超大國'
        WHEN population > 100000000 THEN '大國'
        ELSE '中小國'
      END AS country_level
    FROM world;

五、學習建議與避坑指南

  • 手敲每條 SQL:SQLZoo 提供線上執行環境,務必親自輸入、修改、觀察報錯
  • 理解而非背誦:掌握 WHERE、IN、BETWEEN 的邏輯差異,舉一反三
  • 注意 NULL 處理:col = NULL 永遠為假,必須用 col IS NULL;IN 列表含 NULL 會影響結果
  • 字串比較大小寫敏感性:取決於排序規則,MySQL 預設不敏感,PostgreSQL 預設敏感
  • 善用 EXPLAIN:即使練習階段,也要養成看執行計畫習慣

六、後續學習路徑

  1. SELECT name:字串模式匹配 (LIKE、%、_)
  2. SELECT from WORLD:聚合函數 (SUM、COUNT、AVG)、GROUP BY、HAVING
  3. SELECT from NOBEL:多表連接 (JOIN、LEFT JOIN)
  4. SELECT within SELECT:子查詢、EXISTS、ALL/ANY
  5. Using NULL:IS NULL、COALESCE、NULLIF

給初學者的話:SQL 看起來像英語,實則是嚴格的集合運算語言。前 20 小時刻意練習 SELECT-FROM-WHERE 三大塊,建立「集合→過濾→投影」心智模型,後續 Join、子查詢、窗口函數才不會迷失。SQLZoo 免費、無廣告、即時反饋,是入門最佳練兵場。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved