Oracle 入門必學核心:基本 SELECT 語法、NULL 語義與 NVL/NVL2/COALESCE 處理、SQL*Plus 環境設定與輸出格式化指令。本文整理為可直接複製實作的筆記,適合初學者快速上手與資深工程師查閱。
-- 全欄位
SELECT * FROM employees;
-- 指定欄位 + 別名 (AS 可省略)
SELECT employee_id AS id, last_name "Name", salary FROM employees;
-- 條件過濾
SELECT * FROM employees WHERE department_id = 10;
SELECT * FROM employees WHERE salary BETWEEN 5000 AND 10000;
SELECT * FROM employees WHERE last_name LIKE 'K%'; -- K 開頭
SELECT * FROM employees WHERE commission_pct IS NULL; -- NULL 判斷
SELECT * FROM employees WHERE manager_id IN (100, 101, 102);
-- 排序
SELECT * FROM employees ORDER BY salary DESC, hire_date ASC;
| 函式 | 語法 | 行為 | 範例結果 |
|---|---|---|---|
| NVL | NVL(expr1, expr2) | expr1 為 NULL 回傳 expr2,否則回傳 expr1 | NVL(comm, 0) → 0 |
| NVL2 | NVL2(expr1, expr2, expr3) | expr1 不為 NULL 回傳 expr2,NULL 回傳 expr3 | NVL2(comm, 'Y', 'N') |
| COALESCE | COALESCE(e1, e2, e3...) | 回傳第一個非 NULL 運算式 (ANSI 標準、短路求值) | COALESCE(comm, bonus, 0) |
| NULLIF | NULLIF(e1, e2) | e1=e2 回傳 NULL,否則回傳 e1 | NULLIF(salary, 0) |
-- 需求:部門代碼可選、職稱可選、薪資區間可選
SELECT * FROM employees
WHERE (dept_id = NVL(:p_dept, dept_id))
AND (job_id = NVL(:p_job, job_id))
AND (salary BETWEEN NVL(:p_min, salary) AND NVL(:p_max, salary));
-- 參數為 NULL 時條件自動失效,達到動態查詢效果
| 指令 | 功能 | 範例 |
|---|---|---|
| DESC / DESCRIBE | 顯示表結構 | DESC employees |
| SET PAGESIZE | 每頁行數 | SET PAGESIZE 100 |
| SET LINESIZE | 每行寬度 | SET LINESIZE 150 |
| SET PAUSE ON | 分頁暫停 | SET PAUSE ON |
| SET LONG | LONG/CLOB 顯示長度 | SET LONG 20000 |
| SET FEEDBACK | 顯示筆數 | SET FEEDBACK ON |
| SET AUTOTRACE | 執行計畫+統計 | SET AUTOTRACE TRACEONLY |
| SPOOL | 輸出至檔案 | SPOOL output.lst |
| @ / START | 執行腳本 | @script.sql |
| EDIT | 編輯緩衝區/檔案 | EDIT / EDIT script.sql |
-- 字串欄位:寬度、標題、NULL 顯示
COLUMN last_name HEADING 'Employee|Name' FORMAT A15
COLUMN job_id FORMAT A10 NULL '(none)'
-- 數值欄位:千分位、貨幣、對齊
COLUMN salary JUSTIFY RIGHT FORMAT $99,999.99
COLUMN commission_pct FORMAT 9.99
-- 日期欄位:格式、NULL 顯示
COLUMN hire_date FORMAT A10 NULL 'Not Hired'
-- 清除格式
COLUMN last_name CLEAR
COMMIT 需要分號結尾。 (F) — 不需分號,不存入 Buffer。NVL(NULL, 'X') 回傳 'X'。 (T)WHERE col = NULL 可找出 NULL 值。 (F) — 必須 IS NULL。
-- 登入
sqlplus user/pwd@sid
sqlplus / as sysdba
-- 基本查詢模板
SELECT col1, col2
FROM table
WHERE condition
ORDER BY col1;
-- NULL 安全比較
WHERE NVL(col, 'DEFAULT') = 'DEFAULT'
WHERE COALESCE(col1, col2, col3) IS NOT NULL
-- 格式化輸出模板
SET PAGESIZE 100 LINESIZE 150
COLUMN key_col FORMAT A20 HEADING 'Key|Column'
COLUMN num_col FORMAT 999,999.99 JUSTIFY RIGHT
熟練這些基礎語法與工具指令,是進階 SQL 調優、PL/SQL 開發、DBA 管理的基石。