Oracle SQL 指令依功能分為四大類:DQL(查詢)、DDL(定義)、DML(操作)、DCL(控制)、TCL(交易)。本課程以標準語法、實用範例、權限模型,帶你在 15 分鐘建立完整 SQL 認知框架。
| 分類 | 全稱 | 核心指令 | 是否隱含 COMMIT |
|---|---|---|---|
| DQL | Data Query Language | SELECT | 否 |
| DDL | Data Definition Language | CREATE, ALTER, DROP, TRUNCATE, RENAME | 是 |
| DML | Data Manipulation Language | INSERT, UPDATE, DELETE, MERGE | 否 |
| DCL | Data Control Language | GRANT, REVOKE | 是 |
| TCL | Transaction Control Language | COMMIT, ROLLBACK, SAVEPOINT | N/A |
SELECT [DISTINCT] {* | column [alias], expr [alias] ...}
FROM table [alias]
[WHERE condition]
[GROUP BY expr [, expr ...]]
[HAVING condition]
[ORDER BY expr [ASC|DESC] [NULLS FIRST|LAST] [, ...]];
+ - * /、串接 ||、字面值、NULL 處理。JOIN:INNER/LEFT/RIGHT/FULL OUTER JOIN、CROSS JOIN、NATURAL JOIN。-- 建表
CREATE TABLE emp (
empno NUMBER(4) PRIMARY KEY,
ename VARCHAR2(10) NOT NULL,
job VARCHAR2(9),
mgr NUMBER(4) REFERENCES emp(empno),
hiredate DATE DEFAULT SYSDATE,
sal NUMBER(7,2) CHECK (sal > 0),
comm NUMBER(7,2),
deptno NUMBER(2) REFERENCES dept(deptno)
);
-- 修改表
ALTER TABLE emp ADD (email VARCHAR2(50));
ALTER TABLE emp MODIFY (ename VARCHAR2(30));
ALTER TABLE emp DROP COLUMN email;
ALTER TABLE emp RENAME COLUMN ename TO emp_name;
-- 刪除/截斷/重命名
DROP TABLE emp PURGE;
TRUNCATE TABLE emp; -- 保留結構、釋放空間、不產生 UNDO、不可回滾
RENAME emp TO employee;
-- INSERT
INSERT INTO emp (empno, ename, job, sal) VALUES (1001, 'Wang', 'CLERK', 3000);
INSERT INTO emp SELECT 1002, 'Li', 'CLERK', 2500 FROM dual;
-- UPDATE
UPDATE emp SET sal = sal * 1.1 WHERE job = 'CLERK';
-- DELETE
DELETE FROM emp WHERE empno = 1001;
-- MERGE (UPSERT)
MERGE INTO emp e
USING (SELECT 1003 empno, 'Zhang' ename, 'CLERK' job, 2800 sal FROM dual) s
ON (e.empno = s.empno)
WHEN MATCHED THEN UPDATE SET e.sal = s.sal
WHEN NOT MATCHED THEN INSERT (empno, ename, job, sal) VALUES (s.empno, s.ename, s.job, s.sal);
常用角色組合:
CONNECT:建立會話、建立表/視圖/序列/同義詞等基本開發權限。RESOURCE:建立觸發器、程序、類型、索引等進階開發權限。DBA:所有系統權限、管理資料庫。GRANT CONNECT, RESOURCE TO dev_user;
GRANT CREATE VIEW, CREATE PROCEDURE TO dev_user;
REVOKE CREATE PROCEDURE FROM dev_user;
GRANT SELECT, INSERT, UPDATE, DELETE ON emp TO dev_user;
GRANT ALL ON emp TO dev_user; -- 所有物件權限
GRANT SELECT ON emp TO role_readonly; -- 授予角色
REVOKE DELETE ON emp FROM dev_user;
-- 交易隱含開始於第一條 DML
INSERT INTO emp ...;
UPDATE emp ...;
SAVEPOINT before_delete;
DELETE FROM emp WHERE ...;
-- 發現錯誤
ROLLBACK TO SAVEPOINT before_delete;
-- 確認無誤
COMMIT; -- 永久生效
-- 或完全放棄
ROLLBACK; -- 回到交易起點
COMMIT,結束前一筆交易。SET AUTOCOMMIT ON/OFF 控制 SQL*Plus 行為;JDBC 預設 autoCommit=true。理解邏輯順序能避免「WHERE 不能用別名」「HAVING 必須跟 GROUP BY」等常見錯誤。
CREATE USER learn IDENTIFIED BY learn DEFAULT TABLESPACE users QUOTA UNLIMITED ON users; GRANT CONNECT, RESOURCE TO learn;EXPLAIN PLAN 觀察執行計畫,養成效能意識。掌握五大分類核心語法與權限模型,是 Oracle 開發、管理、調優的基石。建議將本文列印為單頁速查表,貼在螢幕旁,寫 SQL 時隨時對照,養成標準、規範的編碼習慣。