本日主題:建立練習環境,學會最基本的 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';

六、延伸閱讀


七、今日檢核

  • [ ] 我建好了 SQL 練習環境與測試資料
  • [ ] 我會寫 SELECT + WHERE + ORDER BY
  • [ ] 我知道 DISTINCT 和 AS 的用法
  • [ ] 我成功跑出查詢結果
  • [ ] 我知道常見錯誤要避免

🏠 本週總覽 | ➡️ 下一天:Day 2 — 篩選與排序進階