SQL (Structured Query Language) 是關係型資料庫的標準語言。本章建立核心概念框架,掌握最基礎的查詢與過濾技巧。
| 類別 | 全稱 | 核心指令 | 用途 |
|---|---|---|---|
| DML | Data Manipulation Language | SELECT, INSERT, UPDATE, DELETE, MERGE | 操作資料內容 |
| DDL | Data Definition Language | CREATE, ALTER, DROP, TRUNCATE, RENAME | 定義/修改資料庫結構 |
| DCL | Data Control Language | GRANT, REVOKE, COMMIT, ROLLBACK, SAVEPOINT | 控制存取權限與事務 |
SELECT [DISTINCT] {*, column1, column2, ...}
FROM table_name
[WHERE condition]
[ORDER BY column [ASC|DESC]];
三種寫法等價,建議統一使用 AS 提升可讀性:
-- 1. 直接空格
SELECT last_name name, employee_id id FROM employees;
-- 2. 使用 AS (推薦)
SELECT last_name AS name, employee_id AS id FROM employees;
-- 3. 雙引號 (別名含空格/特殊字符/保留字時必須)
SELECT last_name AS "Employee Name", employee_id AS id FROM employees;
||Oracle 使用 || 連接欄位與字面值,可「合成」輸出欄位:
SELECT last_name || '''s job_id is ' || job_id AS details FROM employees;
-- 輸出範例: King's job_id is AD_PRES
DISTINCTSELECT DISTINCT department_id FROM employees;
NULL 值視為一種值,僅保留一筆。'John', '2024-01-01'。WHERE| 運算子 | 說明 | 範例 |
|---|---|---|
| =, !=, <>, >, <, >=, <= | 基本比較 | salary > 5000 |
| BETWEEN ... AND ... | 區間包含邊界 | salary BETWEEN 3000 AND 6000 |
| IN (val1, val2, ...) | 離散值集合 | dept_id IN (10,20,30) |
| LIKE | 模糊比對 | last_name LIKE 'K%' |
| IS [NOT] NULL | 空值判斷 | commission_pct IS NULL |
| AND / OR / NOT | 邏輯組合 | dept_id=10 AND salary>5000 |
%:代表 0~n 個任意字元。_:代表**單一**任意字元。ESCAPE:自定義跳脫字元,查詢實際含 % 或 _ 的資料。
WHERE last_name LIKE '%\_%' ESCAPE '\' -- 查詢含底線的姓名
IS NULL, LIKE, INBETWEENNOTANDOR使用括號 () 明確改變優先順序,提升可讀性。
ORDER BYSELECT last_name, salary
FROM employees
WHERE department_id = 90
ORDER BY salary DESC, last_name ASC; -- 先按薪資降序,同薪資按姓名升序
ASC (預設):遞增/升序。DESC:遞減/降序。ORDER BY 2 DESC) 或複合運算式排序。NULL 排序:Oracle 預設 NULLS LAST (升序時) / NULLS FIRST (降序時),可顯式指定 ORDER BY col NULLS FIRST。掌握 DML/DDL/DCL 分類、SELECT 基礎結構、別名與連接、DISTINCT 去重、WHERE 多條件過濾 (含 LIKE/IN/BETWEEN/NULL)、運算子優先級、ORDER BY 多欄位排序。這是所有進階查詢的基石,請大量練習直至肌肉記憶。