整理 Oracle 最常用的基礎查詢語法與範例,適合初學者速查、資深開發者備忘。
SELECT * FROM emp;
SELECT ename, sal, job FROM emp;
DESC emp;
-- 或
SELECT column_name, data_type, data_length, nullable
FROM user_tab_columns
WHERE table_name = 'EMP';
-- 比較運算子
SELECT * FROM emp WHERE sal > 2000;
-- 日期比較 (需轉換格式)
SELECT * FROM emp WHERE TO_CHAR(hiredate,'YYYY-MM-DD') > '1982-01-01';
SELECT * FROM emp WHERE TO_CHAR(hiredate,'YYYY') = '1980';
SELECT * FROM emp WHERE TO_CHAR(hiredate,'MM') = '04';
-- BETWEEN 範圍
SELECT * FROM emp WHERE sal BETWEEN 2000 AND 2500;
-- 等同於 sal >= 2000 AND sal <= 2500
-- % 任意 0~N 個字元,_ 單一字元
SELECT ename, sal FROM emp WHERE ename LIKE 'S%'; -- S 開頭
SELECT ename, sal FROM emp WHERE ename LIKE '__O%'; -- 第 3 字元為 O
SELECT ename, sal FROM emp WHERE ename LIKE '%\_%' ESCAPE '\'; -- 包含底線
SELECT * FROM emp WHERE empno IN (123, 345, 678);
-- 等同於 empno=123 OR empno=345 OR empno=678
SELECT * FROM emp WHERE comm IS NULL;
SELECT * FROM emp WHERE comm IS NOT NULL;
-- AND 優先於 OR,建議用括號明確
SELECT * FROM emp
WHERE (sal > 500 OR job = 'MANAGER')
AND ename LIKE 'J%';
-- 當前用戶所有表
SELECT table_name FROM user_tables;
-- 所有可存取表
SELECT table_name FROM all_tables;
-- 含系統表 (需 DBA)
SELECT table_name FROM dba_tables;
-- 指定擁有者
SELECT table_name FROM dba_tables WHERE owner = 'SCOTT';
TO_CHAR(hiredate)),改寫為範圍查詢 (hiredate >= DATE '1982-01-01') 以利用索引。LIKE '%abc%' 導致全表掃描,若需前綴搜尋請用 LIKE 'abc%'。IN 列表過長 (>1000) 會解析變慢,考慮用臨時表 JOIN 或 EXISTS。