無論您是否從事程式開發,身為現代開發者幾乎無法避開 SQL。本文為有興趣掌握資料庫操作的讀者撰寫,涵蓋資料操作語言 (DML) 四大基礎指令,建立扎實的 SQL 基礎。
SQL (Structured Query Language) 是 ANSI 維護的資料庫互動標準,最新版本為 SQL:2023。主流資料庫 (Oracle、SQL Server、MySQL、PostgreSQL、SQLite 等) 均支援 ANSI SQL-92 核心子集,並各自擴展專有語法。
| 術語 | 定義 |
|---|---|
| RDBMS | 關聯式資料庫管理系統 |
| 資料庫 | 邏輯容器,含多張資料表、視圖、程序等物件 |
| 資料表 | 由欄位定義結構、列存放資料的二維結構 |
| 欄位 | 特定資料類型的命名容器 (如 LastName 存姓氏) |
| 列/記錄 | 一橫列完整資料,對應一個實體實例 |
| 結果集 | 查詢回傳的資料集合,可從單一欄位到完整資料庫 |
| 指令 | 用途 | 核心語法 |
|---|---|---|
| SELECT | 查詢/檢索資料 | SELECT col1, col2 FROM table WHERE condition; |
| INSERT | 新增資料列 | INSERT INTO table (col1, col2) VALUES (val1, val2); |
| DELETE | 刪除資料列 | DELETE FROM table WHERE condition; |
| UPDATE | 修改現有資料 | UPDATE table SET col1=val1 WHERE condition; |
SELECT 選項最豐富,支援 JOIN、UNION、子查詢等進階組合,後續文章將深入探討。
-- 指定欄位
SELECT column1, column2 FROM table_name;
-- 全欄位 (開發/除錯適用,生產環境建議明確列出欄位)
SELECT * FROM table_name;
-- 等值比較
SELECT * FROM table_name WHERE column1 = 3;
-- 多條件組合
SELECT * FROM Products
WHERE category = 'Electronics' AND price < 1000;
| 運算子 | 意義 | 範例 |
|---|---|---|
| = | 等於 | age = 25 |
| <> / != | 不等於 | status <> 'Closed' |
| > / < | 大於/小於 | price > 100 |
| >= / <= | 大於等於/小於等於 | qty >= 10 |
| BETWEEN | 區間 (含邊界) | age BETWEEN 18 AND 65 |
| IN | 集合成員 | color IN ('Red','Blue') |
| LIKE | 模糊比對 | name LIKE 'J%' |
| IS NULL | 空值檢查 | email IS NULL |
-- 明確指定欄位 (推薦)
INSERT INTO Customers (name, email, city)
VALUES ('John Doe', 'john@example.com', 'Taipei');
-- 全欄位依序插入 (不推薦,結構變更易出錯)
INSERT INTO Customers VALUES ('Jane', 'jane@example.com', 'Taichung');
UPDATE Products
SET price = price * 1.1, updated_at = CURRENT_TIMESTAMP
WHERE category = 'Electronics';
⚠️ 必加 WHERE:未加條件將更新整張表所有列!
DELETE FROM Orders
WHERE order_date < '2020-01-01' AND status = 'Cancelled';
⚠️ 同樣必加 WHERE:避免誤刪全表資料。大量刪除考慮 TRUNCATE TABLE (無法回滾、速度較快)。
BEGIN TRANSACTION ... COMMIT/ROLLBACK 中SELECT * 與 INSERT VALUES 省略欄位清單