許多人在初次接觸 SQL 時,常常會搞不清楚要從哪個指令開始下手。畢竟 SQL 的指令真的很多,像是 SELECT、INSERT、UPDATE、DELETE、JOIN、GROUP BY… 一路念下去都可以數好幾分鐘。可是在實際教學經驗裡,我們最常用到、也是最能快速看到成果的指令,其實就那四個:SELECT、INSERT、UPDATE、DELETE。
如果你是那種「很想馬上動手寫看看,但又擔心自己亂敲一通」的初學者,那麼這篇文章正好可以讓你在最短的時間內,利用這四種基本指令,從零到有地建置出一個資料表,再做出最基本的 CRUD(Create, Read, Update, Delete)操作。
為什麼一定要懂這四個指令?
- SELECT:用來「讀取」資料,是最常見的指令。可以比喻為「查詢資料庫裡到底有什麼東西」。
- INSERT:用來「新增」資料,就像往 Excel 裡面新增一個新列的概念。
- UPDATE:用來「修改」已存在的資料,如果你想要更正或更新資料表裡某一筆資料的欄位,就會用到它。
- DELETE:用來「刪除」資料,當一筆資料不需要時,就用 DELETE 把它移除。
乍聽之下或許很簡單,但這四種指令就是組成 SQL 最核心操作的方法。把它們徹底摸熟之後,你就能應付多數的基礎情境,像是:
- 新增一筆使用者資料到會員列表。
- 查詢某個使用者的姓名與訂單記錄。
- 更新訂單的狀態,從「處理中」改為「完成」。
- 刪除某個過期或不再使用的紀錄。
接下來,就讓我們先建一個資料表,然後依序體驗這四個指令吧。
Step 1:建立資料表 (Create Table)
在正式寫指令之前,我們先想像一個情境:假設我們想要建立一個「員工名冊 (employee)」的資料表,裡面包含每位員工的編號、姓名、職稱等等。那我們的指令就可以這樣寫:
CREATE TABLE employee (
emp_id INT PRIMARY KEY, -- 員工編號,數字型態,且作為主鍵
emp_name VARCHAR(50), -- 員工姓名,文字型態,可接受最多 50 字元
title VARCHAR(50), -- 職稱,文字型態,可接受最多 50 字元
hire_date DATE -- 到職日期,日期型態
);
- CREATE TABLE employee:代表要「建立一張名為 employee 的資料表」
- emp_id INT PRIMARY KEY:指的是要建立一個整數型態 (INT) 欄位做主鍵 (PRIMARY KEY),作為唯一識別碼。
- emp_name VARCHAR(50):代表一個長度上限為 50 的字串欄位,存員工姓名。
- hire_date DATE:存放員工的到職日期。
這裡要稍微注意的是,不同資料庫系統在建立欄位時,語法細節可能會略有差異,但都大同小異。只要了解概念,其實切換資料庫並不困難。
主鍵 (Primary Key) 是什麼?
- 主鍵就是能夠唯一識別一筆紀錄的欄位,不容許重複或是 NULL。可以把它想成每個員工都有一個「員工編號」,來辨識這個員工。
Step 2:新增資料 (INSERT)
一張空白的資料表就像空的 Excel 表格,要「填資料」才能體現它的價值。這時,我們就要用 INSERT 指令來操作。假設我們先把三位員工的資料加入到 employee 表格:
INSERT INTO employee (emp_id, emp_name, title, hire_date)
VALUES
(1001, 'Alice Chen', 'Software Engineer', '2019-01-15'),
(1002, 'Bob Lin', 'Sales Representative', '2019-06-30'),
(1003, 'Carol Wang', 'UX Designer', '2020-02-12');
- INSERT INTO employee (欄位清單) VALUES (值的清單) :代表插入一筆或多筆資料。
- 這裡一次插入了三筆資料,每一筆都用括號括起來並用逗號分隔。
- 記得每個值的順序必須要對應到前面所寫的欄位順序。
有些資料庫也可以寫成 INSERT INTO employee VALUES (...) 不特別指定欄位,但那需要表格欄位的順序和你提供的值完全一致,不然很可能會出現錯誤或欄位混亂。在學習階段,還是比較建議明確指定每個欄位名稱。
日期型態要怎麼處理?
- 這跟資料庫系統的版本或語法設定有關。一般來說用字串 'YYYY-MM-DD' 就能存入 DATE 欄位。若是時間戳記欄位 (DATETIME、TIMESTAMP 等),就要確認你的資料庫支援的格式。
Step 3:查詢資料 (SELECT)
新增了資料後,下一步通常就是想「看一下我剛剛插入的資料長什麼樣子」。這時就會用到 SELECT 指令了。最常見、也是最基本的查詢指令是:
SELECT *
FROM employee;
- SELECT * :表示「選取所有欄位」。
- FROM employee :表示「從 employee 這個資料表」。
這樣就能看到我們先前插入的三筆資料。若你只想看特定欄位,可以把 * 換成具體的欄位名稱,例如:
SELECT emp_name, title
FROM employee;
這樣就會只顯示姓名和職稱兩個欄位的資訊,不會列出其他欄位。
在查詢中篩選資料
除了單純顯示所有資料,有時候我們只想要找「職稱是 Software Engineer 的人」。這時可以加上 WHERE 條件,例如:
SELECT emp_id, emp_name, title
FROM employee
WHERE title = 'Software Engineer';
可以一次更新多筆資料嗎?
- 可以,只要 WHERE 條件符合多筆紀錄,它都可以一起撈出來。例如 WHERE 後面可以再加入更多條件、運算子或 AND / OR 等等,依需求做資料篩選。
Step 4:更新資料 (UPDATE)
隨著時間推移,可能有些員工的職稱會調整、或有欄位資料需要修正。這時就需要使用 UPDATE 指令。假設我們要把員工 emp_id = 1002 的職稱,從「Sales Representative」改成「Senior Sales Representative」:
UPDATE employee
SET title = 'Senior Sales Representative'
WHERE emp_id = 1002;
- UPDATE employee :表示要更新哪一張表。
- SET title = '...' :表示要將 title 欄位更新為什麼。
- WHERE emp_id = 1002 :表示只要找出 emp_id 等於 1002 的那筆資料去更新。如果沒加 WHERE,可是會把整張表的所有 title 欄位都改掉,這裡要特別小心!
完成後,再用 SELECT 查詢一下,就能看到員工編號 1002 的職稱已經變成「Senior Sales Representative」。
Step 5:刪除資料 (DELETE)
一般來說,DELETE 指令可以用來移除資料表中已經不需要的紀錄,真正「清除」它們在資料庫裡的存在。舉例來說,如果我們先前為了做測試而在資料表裡新增了一些假員工紀錄 (例如 emp_id = 9999) 並且不想再保留,那就可以這麼做:
DELETE FROM employee
WHERE emp_id = 9999;
- DELETE FROM employee 表示要刪除哪一張表的資料。
- WHERE emp_id = 9999 指定只刪除 emp_id 等於 9999 的那筆紀錄。如果不小心沒加 WHERE,會刪除整張表的所有資料喔!
注意事項:為何不建議直接刪除「離職的員工」?
很多 SQL 新手在學到 DELETE 時,會直覺地想:「離職的員工應該直接刪掉啊!」但在真實的企業環境中,其實很少會真的刪除離職員工資料,因為未來仍可能需要人力資源分析、人才庫管理、過去雇用紀錄查詢等。如果把這些資料直接刪除,後續就無法再查到。
比較正確的做法,是透過在 employee 表裡加上「員工狀態 (status)」或「在職狀態 (is_active)」欄位:
- 例如 is_active = 1 代表在職、is_active = 0 代表離職。
- 這樣做可以保留歷史紀錄,又能在查詢在職員工時,使用 WHERE is_active = 1 來篩選。
而 DELETE 則更適用於確定不再需要的資料 (例如:測試用假資料、無效或重複的紀錄、法律規範必須刪除的個資等)。若只是代表使用者或員工「不活躍」了,建議還是使用「狀態欄位」或「軟刪除 (soft delete)」的方式較好。
不小心刪到整張表怎麼辦?
- 如果你用的是某些支援交易 (Transaction) 機制的資料庫 (例如 MySQL、PostgreSQL、MS SQL…),可以在刪除前先 BEGIN TRANSACTION,檢查沒問題再 COMMIT,有問題則 ROLLBACK。
- 如果沒有交易機制就更要謹慎確認 WHERE 條件。
打好基礎,再進階就不難
透過以上的步驟,你應該可以清楚看到 SQL 中最核心的四種指令是如何運作的,也理解了它們的常見應用情境。當你掌握了最基本的「增刪改查 (CRUD)」後,你離完成更複雜的操作就不遠了!