-- 單行顯式列
INSERT INTO table_name (col1, col2, ...) VALUES (val1, val2, ...);
-- 子查詢插入
INSERT INTO table_name (col1, col2, ...)
SELECT col1, col2, ... FROM another_table WHERE ...;
-- 多表插入 (12c+)
INSERT ALL
INTO t1 (c1) VALUES (v1)
INTO t2 (c2) VALUES (v2)
SELECT ... FROM dual;
'GOOD DAY',單引號轉義:''(兩個單引號)。SYSDATE 或 TO_DATE('2024-07-09','YYYY-MM-DD')。DBMS_LOB。seq_name.NEXTVAL(見自增列文章)。DELETE FROM table_name WHERE condition;
-- 全表清空(高速、釋放空間、DDL、不可回滾)
TRUNCATE TABLE table_name;
DELETE 只標記塊未用,不釋放空間,產生 UNDO/REDO。DELETE ... WHERE rownum <= 10000 循環 + COMMIT。UPDATE table_name SET col1 = val1, col2 = val2, ... WHERE condition;
COMMIT 釋放,ROLLBACK 回滾。LOOP DELETE ... WHERE rownum <= 10000; EXIT WHEN SQL%ROWCOUNT = 0; COMMIT; END LOOP;-- 常用類型
col_name CHAR(n) -- 固定長度,補空格
col_name VARCHAR2(n) -- 變長,不補空格
col_name NUMBER(p,s) -- p 總位數,s 小數位
col_name DATE -- 日期時間(秒級)
col_name TIMESTAMP -- 高精度時間戳
col_name CLOB / BLOB -- 大對象
-- 創建表最佳實踐
CREATE TABLE orders (
order_id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY, -- 12c+
cust_id NUMBER NOT NULL REFERENCES customers(cust_id),
order_dt DATE DEFAULT SYSDATE NOT NULL,
amount NUMBER(12,2) CHECK (amount > 0),
status VARCHAR2(20) DEFAULT 'NEW' CHECK (status IN ('NEW','PAID','SHIPPED','CANCELLED')),
remarks VARCHAR2(4000)
) TABLESPACE users PCTFREE 10;
-- 重命名表
ALTER TABLE old_name RENAME TO new_name;
-- 或 RENAME old_name TO new_name;
-- 增加列
ALTER TABLE table_name ADD (col_name datatype [DEFAULT val]);
-- 修改列
ALTER TABLE table_name MODIFY (col_name datatype [DEFAULT val] [NULL|NOT NULL]);
-- 添加約束
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 ADD CONSTRAINT fk_name FOREIGN KEY (col) REFERENCES ref_table(ref_col);
-- 緩存控制
ALTER TABLE table_name CACHE; -- 全表掃描放入 LRU 熱端
ALTER TABLE table_name NOCACHE; -- 默認行為
DROP TABLE table_name CASCADE CONSTRAINTS; -- 連同約束一起刪
TRUNCATE TABLE table_name; -- 保留結構,瞬間清空,DDL
SELECT col1, col2, ...
FROM table1 [alias1]
[JOIN table2 alias2 ON alias1.col = alias2.col]
[WHERE condition]
[GROUP BY col1, col2 ...]
[HAVING condition]
[ORDER BY col1 [ASC|DESC], col2 ...]
[FETCH FIRST n ROWS ONLY]; -- 12c+ 分頁標準語法
| 函數 | 說明 |
|---|---|
COUNT(*) | 行數(含 NULL) |
COUNT(col) | 非 NULL 行數 |
MIN/MAX/AVG/SUM | 聚合 |
DISTINCT(col) | 去重 |
TO_CHAR(date, 'fmt') | 日期轉字符 |
NVL(expr1, expr2) | expr1 為 NULL 返回 expr2 |
DECODE(val, v1, r1, v2, r2, ..., default) | 等值分支(Oracle 專有) |
CASE WHEN cond THEN res ... ELSE def END | 標準分支(推薦) |
LPAD(str, n, pad) | 左填充至 n 長度 |
ROW_NUMBER() OVER (PARTITION BY ... ORDER BY ...) | 分組排序編號(去重、Top-N) |
列間可直接 + - * /,注意 NULL 參與運算結果為 NULL,配合 NVL 處理。
EMP_DEPT_V),< 30 字符(12.2+ 128)。AL32UTF8,NLS_LENGTH_SEMANTICS=CHAR。COMMENT ON TABLE/COLUMN ... IS '...' 必寫。掌握 DML 的事務邊界與鎖行為、DDL 的約束設計與緩存控制、SELECT 的標準 JOIN 與分析函數、以及命名註釋規範,即可覆蓋 95% 的日常開發運維場景。建議將本手冊作為團隊 SQL_STYLE_GUIDE 附件,Code Review 時核對執行。