首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 教學

【獨孤九劍】Oracle 實戰 (四) SQL DML 與 DDL 核心模式大全

     編輯:Oracle 教學

【獨孤九劍】Oracle 實戰 (四) SQL DML 與 DDL 核心模式大全

Oracle SQL 分類:DML (資料操作)、DDL (定義)、TCL (交易控制)、SCL (會話控制)、系統控制、嵌入式 SQL。本章聚焦高頻 DML/DDL 實戰模式。

1. DML 核心模式

基本增刪改查

SELECT * FROM table1;
INSERT INTO table1(f1,f2,f3) VALUES (v1,v2,v3);
UPDATE table1 SET f1=v1 WHERE f2=v2;
DELETE FROM table1 WHERE f2=v2;

ROWNUM 特性與分頁

  • ROWNUM 為查詢結果動態編號,從 1 起算,不可跳躍:可用 WHERE ROWNUM <= N、WHERE ROWNUM = 1,不可 WHERE ROWNUM > 1 或 WHERE ROWNUM = 2。
  • WHERE ROWNUM = 0 可取得表結構 (無資料列)。

標準分頁寫法

SELECT * FROM (
  SELECT t.*, ROWNUM rn FROM table1 t WHERE ROWNUM <= :end_row
) WHERE rn >= :start_row;

聯結查詢

風格語法
舊式 (+)WHERE t1.id = t2.id(+) (LEFT JOIN), WHERE t1.id(+) = t2.id (RIGHT JOIN)
ANSI JOINFROM t1 JOIN t2 ON t1.id=t2.id / LEFT JOIN / RIGHT JOIN / FULL OUTER JOIN

MERGE (UPSERT) 單陳述式合併更新/插入

-- 兩表合併
MERGE INTO target_table a
USING source_table b
ON (a.id = b.id)
WHEN MATCHED THEN
  UPDATE SET a.f1=b.f1, a.f2=b.f2+1
WHEN NOT MATCHED THEN
  INSERT (id,f1,f2) VALUES (b.id,b.f1,b.f2);

-- 多表關聯作為來源
MERGE INTO table1 a
USING (SELECT t2.id, t2.f1, t2.f2, t3.f1 AS f3
       FROM table2 t2 JOIN table3 t3 ON t2.id=t3.id) b
ON (a.id = b.id)
WHEN MATCHED THEN
  UPDATE SET a.f1=b.f1, a.f2=b.f2+1;

2. DDL 常用操作

指令用途範例
CREATE建立 TABLE, VIEW, PROCEDURE, FUNCTION, SEQUENCE...CREATE TABLE t (id NUMBER PRIMARY KEY);
ALTER修改物件結構ALTER TABLE t ADD (col2 VARCHAR2(20));
DROP刪除物件DROP TABLE t;
TRUNCATE快速清空表 (不可回滾, 釋放空間)TRUNCATE TABLE t;
RENAME重命名物件RENAME old_name TO new_name;
GRANT/REVOKE授權/撤銷權限GRANT SELECT ON t TO user1;
COMMENT加註解COMMENT ON TABLE t IS '業務表';
AUDIT/NOAUDIT啟用/停用稽核AUDIT SELECT ON t BY ACCESS;

3. 交易控制 (TCL)

COMMIT;           -- 提交
ROLLBACK;         -- 回滾
SAVEPOINT sp1;    -- 設定存檔點
ROLLBACK TO sp1;  -- 回滾至存檔點
SET TRANSACTION READ ONLY; -- 唯讀交易

實戰提醒

  • 大量刪除優先考慮 TRUNCATE 或分區截斷,避免大量 Undo/Redo 產生。
  • MERGE 適用於 ETL 同步場景,單一 SQL 完成 INSERT/UPDATE,效能優於分開執行。
  • DDL 隱含 COMMIT,謹慎在交易中穿插 DDL。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved