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

Oracle SQL 快速參考手冊:DML、DDL、查詢核心語法與函數大全

     編輯:Oracle 資料庫基礎

一、 數據操作語言 (DML)

1. INSERT 插入數據

-- 顯式列插入
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.NEXTVAL
  • 大對象 (CLOB/BLOB) 需用 DBMS_LOB 包處理,單次 INSERT 限 4000 字節

2. DELETE 刪除數據

DELETE FROM table_name WHERE condition;
-- 全表清空(高效、釋放空間、不可回滾)
TRUNCATE TABLE table_name;

注意: DELETE 不釋放高水位線,TRUNCATE 重置高水位線且不可回滾。

3. UPDATE 更新數據

UPDATE table_name SET col1 = val1, col2 = val2 ... WHERE condition;

陷阱: 右側值為 NULL 會將列置空;超長度報錯;大量更新必須分批 COMMIT。

4. 事務控制與鎖

  • DML 隱式加行級鎖,必須 COMMIT 生效,ROLLBACK 回滾
  • 單次事務建議 < 1 萬行,大批量操作分段提交
  • SELECT ... FOR UPDATE 顯式加鎖

二、 數據定義語言 (DDL)

常用數據類型

類型說明
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) 核心

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 WHENCASE 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)

五、 子查詢與集合操作

  • 標量子查詢:SELECT 列表中
  • 相關子查詢:WHERE 子句中引用外層表
  • UNION (去重) / UNION ALL (保留重複)
  • INTERSECT (交集) / MINUS (差集)

提示: 本手冊覆蓋 90% 日常開發場景。複雜分析查詢請參考 Oracle SQL Tuning Guide 及 DBMS_XPLAN 實戰調優。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved