-- 顯式列插入
INSERT INTO table_name (col1, col2, ...) VALUES (val1, val2, ...);
-- 從其他表複製
INSERT INTO table_name (col1, col2, ...) SELECT col1, col2, ... FROM other_table;
關鍵規則:
'GOOD DAY''' 代表一個單引號TO_DATE('2023-08-01', 'YYYY-MM-DD') 或 DATE '2023-08-01'CREATE SEQUENCE seq_name INCREMENT BY 1 START WITH 1 MAXVALUE 999999 NOCACHE; 使用 seq_name.NEXTVALDBMS_LOB 包處理,單次 INSERT 限 4000 字節DELETE FROM table_name WHERE condition;
-- 全表清空(高效、釋放空間、不可回滾)
TRUNCATE TABLE table_name;
注意: DELETE 不釋放高水位線,TRUNCATE 重置高水位線且不可回滾。
UPDATE table_name SET col1 = val1, col2 = val2 ... WHERE condition;
陷阱: 右側值為 NULL 會將列置空;超長度報錯;大量更新必須分批 COMMIT。
COMMIT 生效,ROLLBACK 回滾SELECT ... FOR UPDATE 顯式加鎖| 類型 | 說明 |
|---|---|
| CHAR(n) | 固定長度,空白填充,最大 2000 字節 |
| VARCHAR2(n) | 可變長度,最大 4000 字節 |
| NUMBER(p,s) | 精度 p,標度 s |
| DATE | 日期時間,精確到秒 |
| TIMESTAMP | 高精度時間戳 |
| CLOB / BLOB | 大文本/二進制對象 |
-- 創建表
CREATE TABLE products (
prod_id NUMBER(4) PRIMARY KEY,
prod_name VARCHAR2(20) NOT NULL,
stock_qty NUMBER(5,3) DEFAULT 0,
created_dt DATE DEFAULT SYSDATE
);
-- 修改表
ALTER TABLE table_name RENAME TO new_name;
ALTER TABLE table_name ADD (col_name datatype);
ALTER TABLE table_name MODIFY (col_name new_datatype);
ALTER TABLE table_name ADD CONSTRAINT pk_name PRIMARY KEY (col);
ALTER TABLE table_name ADD CONSTRAINT uk_name UNIQUE (col);
ALTER TABLE table_name CACHE | NOCACHE;
-- 刪除表
DROP TABLE table_name CASCADE CONSTRAINTS; -- 級聯刪除約束
TRUNCATE TABLE table_name; -- 保留結構清空數據
SELECT [DISTINCT] col1, col2, ...
FROM table1 [alias1], table2 [alias2] ...
WHERE condition
GROUP BY col1, col2 ...
HAVING group_condition
ORDER BY col1 [ASC|DESC], col2 ...;
| 函數 | 用法示例 | 說明 |
|---|---|---|
| NVL(expr1, expr2) | NVL(comm, 0) | expr1 為 NULL 返回 expr2 |
| NVL2(expr1, e2, e3) | NVL2(comm, 'Y', 'N') | 非 NULL 返回 e2,否則 e3 |
| DECODE(val, v1, r1, v2, r2, ..., def) | DECODE(deptno, 10, 'ACCT', 20, 'SALES', 'OTHER') | 類似 CASE WHEN |
| CASE WHEN | CASE WHEN sal>3000 THEN 'HIGH' ELSE 'LOW' END | 標準 SQL,更靈活 |
| TO_CHAR(date, fmt) | TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') | 日期轉字符 |
| TO_DATE(str, fmt) | TO_DATE('20230801', 'YYYYMMDD') | 字符轉日期 |
| TO_NUMBER(str) | TO_NUMBER('123.45') | 字符轉數字 |
| SUBSTR(str, pos, len) | SUBSTR('Hello', 2, 3) -> 'ell' | 截取子串 |
| INSTR(str, substr) | INSTR('Hello', 'l') -> 3 | 查找位置 |
| LPAD/RPAD(str, n, pad) | LPAD('5', 3, '0') -> '005' | 填充對齊 |
| ROUND/TRUNC(num, dec) | ROUND(3.1415, 2) -> 3.14 | 四捨五入/截斷 |
| SYSDATE / SYSTIMESTAMP | 當前日期/時間戳 |
COUNT(*), SUM(col), AVG(col), MAX(col), MIN(col), STDDEV(col), VARIANCE(col)
ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY sal DESC) rn
RANK() / DENSE_RANK()
LAG(col, n) / LEAD(col, n)
SUM(col) OVER (PARTITION BY deptno ORDER BY hiredate ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
-- 內連接
SELECT * FROM emp e JOIN dept d ON e.deptno = d.deptno;
-- 左外連接
SELECT * FROM emp e LEFT JOIN dept d ON e.deptno = d.deptno;
-- 右外連接 / 全外連接 (FULL OUTER JOIN)
UNION (去重) / UNION ALL (保留重複)INTERSECT (交集) / MINUS (差集)提示: 本手冊覆蓋 90% 日常開發場景。複雜分析查詢請參考 Oracle SQL Tuning Guide 及 DBMS_XPLAN 實戰調優。