本日主題:建立練習環境,學會最基本的 SELECT 預計時間:2 小時 對應主教材:第 6.1 節
一、今日學習目標
- [ ] 建好 SQL 練習環境
- [ ] 建立測試資料表
- [ ] 會寫基本 SELECT 查詢
- [ ] 理解 SQL 語法結構
- [ ] 認識 DISTINCT 去重複
二、教材內容
2.1 為什麼 SQL 對 MIS 這麼重要?
公司的資料都存在資料庫裡(員工、訂單、維修紀錄、庫存)。會 SQL 才能查資料、做報表、串系統。這是 MIS 職位跟其他 IT 最大的區隔技能,面試很可能當場要你寫。
┌──────────────────────────────────────────────┐
│ SQL 在企業的應用場景 │
├──────────────────────────────────────────────┤
│ │
│ 📊 查詢報表:每月營業額、庫存查詢、出勤紀錄 │
│ 👤 人事管理:員工資料查詢、薪資統計 │
│ 🔧 維修紀錄:設備維修歷程、零件使用統計 │
│ 📦 庫存管理:進銷存查詢、安全庫存警示 │
│ 🔗 系統整合:ERP/MES/WMS 之間的資料查詢 │
│ │
│ 面試必考:手寫 SQL 或白板題 │
└──────────────────────────────────────────────┘
2.2 準備練習環境(任選一個)
- SQLite:最輕量,下載 DB Browser for SQLite,圖形介面好上手(推薦)。
- 線上平台:SQLite Online、DB Fiddle、W3Schools SQL Tryit(免安裝)。
- MySQL:較接近企業環境,但安裝較費工。
2.3 建立測試資料表
在環境裡執行:
CREATE TABLE departments (
id INTEGER PRIMARY KEY,
dept_name TEXT
);
CREATE TABLE employees (
id INTEGER PRIMARY KEY,
name TEXT,
department TEXT,
dept_id INTEGER,
salary INTEGER,
hire_date TEXT
);
INSERT INTO departments VALUES (1,'IT'),(2,'會計'),(3,'維修');
INSERT INTO employees VALUES
(1,'王小明','IT',1,52000,'2024-03-01'),
(2,'李大華','IT',1,48000,'2023-06-15'),
(3,'陳美麗','會計',2,45000,'2022-01-10'),
(4,'林志強','維修',3,60000,'2021-09-20'),
(5,'張雅婷','IT',1,55000,'2025-02-01'),
(6,'黃建宏','維修',3,47000,'2024-11-11');
2.4 SQL 語法結構
SQL 語句的基本順序:
SELECT 要顯示的欄位
FROM 資料來源(表名)
WHERE 篩選條件
ORDER BY 排序方式
記憶口訣:「選(SELECT)從(FROM)哪(WHERE)排(ORDER BY)」
2.5 基本 SELECT
-- 查全部欄位、全部資料(* 代表所有欄位)
SELECT * FROM employees;
-- 只看指定欄位
SELECT name, salary FROM employees;
-- 篩選 IT 部門
SELECT name, salary FROM employees
WHERE department = 'IT';
-- 依薪水由高到低排序
SELECT name, salary FROM employees
WHERE department = 'IT'
ORDER BY salary DESC;
SELECT選欄位、FROM哪張表、WHERE篩選條件、ORDER BY排序(DESC 降冪、ASC 升冪)。
2.6 欄位別名(AS)
-- 用 AS 給欄位一個好看的名字(別名)
SELECT name AS 姓名, salary AS 薪水 FROM employees;
-- AS 可以省略(但建議寫,比較清楚)
SELECT name 姓名, salary 薪水 FROM employees;
2.7 DISTINCT 去除重複
-- 查看有哪些部門(不重複)
SELECT DISTINCT department FROM employees;
-- 結果:IT, 會計, 維修(每個部門只出現一次)
-- 比較:不加 DISTINCT
SELECT department FROM employees;
-- 結果:IT, IT, 會計, 維修, IT, 維修(有重複)
2.8 常見錯誤示範
-- ❌ 錯誤 1:字串沒加引號
SELECT * FROM employees WHERE department = IT;
-- 正確:WHERE department = 'IT'
-- ❌ 錯誤 2:忘記 FROM
SELECT name, salary WHERE department = 'IT';
-- 正確:SELECT name, salary FROM employees WHERE department = 'IT'
-- ❌ 錯誤 3:中文逗號
SELECT name, salary FROM employees;
-- 正確:SELECT name, salary FROM employees(要用英文逗號)
-- ❌ 錯誤 4:ORDER BY 放在 WHERE 前面
SELECT * FROM employees ORDER BY salary WHERE department = 'IT';
-- 正確:WHERE 在 ORDER BY 前面
三、常見誤解
| 誤解 | 正確觀念 |
|---|---|
| 「SELECT * 最方便」 | 正式環境應指定需要的欄位,* 會拖慢效能且不清楚回傳什麼 |
| 「SQL 大小寫有差」 | SQL 關鍵字不分大小寫(SELECT = select),但字串值分大小寫('IT' ≠ 'it') |
| 「ORDER BY 預設是降冪」 | 預設是 ASC(升冪),要降冪需明確寫 DESC |
四、面試加分小知識
- RDBMS:關聯式資料庫管理系統,如 MySQL、PostgreSQL、SQL Server、Oracle。
- Schema:資料庫架構,定義表的結構(欄位、型別、關聯)。
- NULL:空值,不是 0 也不是空字串,是「沒有值」。
- Primary Key(主鍵):表中唯一識別每筆資料的欄位,不可重複、不可為 NULL。
五、今日練習(在環境實際打)
Q1. 查出所有員工的姓名與部門。
Q2. 查出維修部門的所有員工。
Q3. 查出所有員工,依薪水由低到高排序。
Q4. 查出所有不重複的部門名稱。
Q5. 查出 IT 部門的員工姓名與薪水,並用中文別名顯示。
參考解答
-- A1:查姓名與部門
SELECT name, department FROM employees;
-- A2:查維修部門
SELECT * FROM employees WHERE department = '維修';
-- A3:依薪水由低到高
SELECT * FROM employees ORDER BY salary ASC;
-- A4:不重複的部門名稱
SELECT DISTINCT department FROM employees;
-- A5:IT 部門 + 中文別名
SELECT name AS 姓名, salary AS 薪水
FROM employees
WHERE department = 'IT';
六、延伸閱讀
- W3Schools SQL Tutorial — 最經典的 SQL 入門教程
- SQLite Online — 免安裝線上 SQL 練習環境
- DB Browser for SQLite — 推薦的圖形介面工具
七、今日檢核
- [ ] 我建好了 SQL 練習環境與測試資料
- [ ] 我會寫 SELECT + WHERE + ORDER BY
- [ ] 我知道 DISTINCT 和 AS 的用法
- [ ] 我成功跑出查詢結果
- [ ] 我知道常見錯誤要避免
🏠 本週總覽 | ➡️ 下一天:Day 2 — 篩選與排序進階