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

SQL 基礎精要速查手冊:DDL/DML/DCL、數據類型、高級查詢與常用函數

     編輯:DB2 教學

SQL 定義與分類

SQL (Structured Query Language) 面向數據庫的通用處理語言,功能涵蓋:查詢提取、增刪改、對象定義、安全控制、完整性保護。

  • DDL (Data Definition Language): CREATE、ALTER、DROP、DECLARE
  • DML (Data Manipulation Language): SELECT、DELETE、UPDATE、INSERT
  • DCL (Data Control Language): GRANT、REVOKE、COMMIT、ROLLBACK

DB2 核心數據類型

類型說明長度/精度
CHAR(n)定長字符串最大 254
VARCHAR(n)變長字符串最大 4000
SMALLINT短整數2 字節
INTEGER整數4 字節
REAL單精度浮點32 位近似值
DOUBLE雙精度浮點64 位近似值
DECIMAL(m,n)精確數值精度 m,小數位 n
DATE / TIME / TIMESTAMP日期/時間/時間戳

DDL 核心語法速查

數據庫

CREATE DATABASE db_name [USING CODESET codeset TERRITORY territory];
DROP DATABASE db_name;

註: 代碼頁選擇關鍵,創建時指定避免亂碼。

表

-- 新建
CREATE TABLE tab_name (
  col1 type1 [NOT NULL] [PRIMARY KEY],
  col2 type2 [NOT NULL], ...
);

-- 依現有表結構建表
CREATE TABLE tab_new LIKE tab_old;
CREATE TABLE tab_new AS SELECT col1,col2 FROM tab_old DEFINITION ONLY;

-- 修改表
ALTER TABLE tab_name ADD COLUMN col_name type;  -- 僅支持增加列,不可刪列
ALTER TABLE tab_name ADD PRIMARY KEY (col);
ALTER TABLE tab_name DROP PRIMARY KEY;

-- 刪表
DROP TABLE tab_name;

鐵律: 列增加後不可刪除;DB2 中列類型不可變,唯一可擴展 VARCHAR 長度。

表空間

CREATE TABLESPACE tbs_name PAGESIZE 4K MANAGED BY DATABASE USING (FILE 'path' SIZE);
ALTER TABLESPACE tbs_name ADD (FILE 'path' SIZE);  -- 不可逆,謹慎添加
DROP TABLESPACE tbs_name;

索引

CREATE [UNIQUE] INDEX idx_name ON tab_name (col...);
DROP INDEX idx_name;

註: 索引不可修改,需重建。

視圖

CREATE VIEW view_name AS SELECT ...;
DROP VIEW view_name;

註: 僅能修改引用列範圍;基表刪除導致視圖失效。

DML 核心操作

事務特性: DML 不隱式提交,是否提交視環境設置而定。注意事務日志滿風險。

SELECT 查詢優化關鍵:謂詞與索引匹配

謂詞形式可索引備註
col θ const (θ = >, >=, =, <=, <)Y<> 不可索引
col BETWEEN c1 AND c2Y匹配列必須是索引最後一列
col IN (list)Y單列匹配
col IS NULLY
col LIKE 'xyz%'Y% 在後
col LIKE '%xyz'N% 在前導致掃描
col1 θ col2N同表列間比較
col θ expressionN如 c1*(c1+1)/2
pred1 AND pred2Y同屬同一索引列
pred1 OR pred2N除 (c1=a OR c1=b) 可轉 IN
NOT predN含 NOT IN/BETWEEN/LIKE

多表連接索引策略

  • 嵌套循環 (NLJ): 驅動表需高選擇性索引,被驅動表連接列需索引。
  • 歸並連接 (Merge Join): 兩表連接列均有序(有索引或排序)。
  • 三表以上: 優化器動態選擇,關鍵在統計信息準確與連接列索引覆蓋。

分組、排序、過濾

  • GROUP BY:選擇列除分組列/常量外必須用聚合函數;可用 MIN/MAX 等繞過限制。
  • HAVING:分組後過濾。
  • ORDER BY:指定返回行排序。

DELETE / INSERT / UPDATE

DELETE FROM table WHERE condition;
INSERT INTO table (col1,col2) VALUES (v1,v2), (v1,v2)...;  -- 多行值
UPDATE table SET col1=v1, col2=v2 WHERE condition;  -- 較慢,相關列建索引

註: INSERT 不等待、不鎖定;UPDATE 較慢需索引支持。

DCL 權限控制

GRANT [ALL PRIVILEGES | priv,...] ON table|view TO [PUBLIC | user,...];
REVOKE [ALL PRIVILEGES | priv,...] ON table|view FROM [PUBLIC | user,...];
COMMIT [WORK];
ROLLBACK [WORK];

註: 實例級用戶 (SYSADM/DBADM) 權限來自組成員身份,非 GRANT 授予,REVOKE 無效。

高級 SQL 快速入門

集合運算

  • UNION [ALL]:合併結果,ALL 保留重複行。
  • EXCEPT [ALL]:差集 (T1 - T2)。
  • INTERSECT [ALL]:交集。前提:參與查詢列數、類型一致。

外連接

  • LEFT OUTER JOIN:左表全保留 + 匹配行。
  • RIGHT OUTER JOIN:右表全保留 + 匹配行。
  • FULL OUTER JOIN:雙表全保留 + 匹配行。
  • 複合外連接按左到右順序執行,左側結果集作為下一步左輸入。

超級分組與窗口函數

  • GROUPING SETS (col1, col2):單查詢多級分組。
  • ROLLUP (col1, col2):層次化分組,順序敏感不可交換。
  • CUBE (col1, col2):全組合分組。
  • OVER (ORDER BY col ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING):移動窗口分析 (如移動平均)。

常用內建函數速查

類型轉換

DECIMAL、DOUBLE、INTEGER、SMALLINT、REAL → 數字;HEX(arg) → 16進制;CHAR、VARCHAR → 字符串;DIGITS(arg) → DECIMAL 字符串表示;DATE、TIME、TIMESTAMP → 日期時間。

日期時間提取

YEAR、QUARTER、MONTH、WEEK、DAY、HOUR、MINUTE、SECOND;DAYOFYEAR、DAYOFWEEK、DAYS(從 0001-01-01 起算天數)、MIDNIGHT_SECONDS、MONTHNAME、DAYNAME。

字符串處理

LENGTH、LCASE、UCASE、LTRIM、RTRIM;COALESCE(arg1,arg2...) 首個非 NULL;CONCAT、INSERT、LEFT、LOCATE、POSSTR、REPEAT、REPLACE、RIGHT、SPACE、SUBSTR。

數學函數

ABS、COUNT、MAX、MIN、SUM;CEIL、FLOOR、MOD、RAND、POWER、ROUND、SIGN、TRUNCATE。

其他

NULLIF(arg1,arg2):相等返回 NULL,否則返回 arg1。

總結

掌握 DDL/DML/DCL 三大語句族、數據類型邊界、索引匹配規則、高級分組窗口、核心函數庫,即具備 DB2 開發運維的「內功心法」。實戰中配合 EXPLAIN、RUNSTATS、db2batch 持續優化,方臻化境。

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