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

DB2 SQL 語法完整參考指南:DDL、資料型別與 DML 操作

     編輯:DB2 教學

一、資料定義語言 (DDL)

1. 建立資料表

CREATE TABLE table_name (
  column1 datatype [NOT NULL] [PRIMARY KEY],
  column2 datatype [NOT NULL],
  ...
);
  • datatype:資料型別 (詳見下表)。
  • NOT NULL:禁止空值。
  • PRIMARY KEY:定義主鍵。

2. 修改資料表

-- 新增欄位
ALTER TABLE table_name ADD COLUMN column_name datatype;

-- 設定主鍵
ALTER TABLE table_name ADD PRIMARY KEY (column_name);

-- 移除主鍵
ALTER TABLE table_name DROP PRIMARY KEY;

注意:DB2 不支援直接 DROP COLUMN,需重建表或使用遷移工具。

3. 建立索引

CREATE INDEX index_name ON table_name (column_name);

4. 刪除物件

DROP TABLE table_name;
DROP INDEX index_name;

二、DB2 資料型別對照表

型別說明範圍/限制
SMALLINT16 位元整數-32,768 ~ 32,767
INTEGER32 位元整數-2,147,483,648 ~ 2,147,483,647
DECIMAL(p,s)精確十進位p=總位數(預設5), s=小數位(預設0)
FLOAT / REAL32 位元浮點數單精度
DOUBLE64 位元浮點數雙精度
CHAR(n)固定長度字串n ≤ 254
VARCHAR(n)變動長度字串n ≤ 4,000
GRAPHIC(n)固定長度雙位元組字串n ≤ 127 (適合中文)
VARGRAPHIC(n)變動長度雙位元組字串n ≤ 2,000
DATE年月日YYYY-MM-DD
TIME時分秒HH:MM:SS
TIMESTAMP日期時間+微秒YYYY-MM-DD-HH.MM.SS.ffffff

三、資料操作語言 (DML)

1. 新增資料 (INSERT)

-- 指定欄位
INSERT INTO table_name (col1, col2, ...) VALUES (val1, val2, ...);

-- 從子查詢新增
INSERT INTO table_name (col1, col2, ...)
SELECT colx, coly, ... FROM another_table;

2. 查詢資料 (SELECT)

基本查詢

SELECT col1, col2 FROM table_name;
SELECT * FROM table_name WHERE col1 = 'xxx' AND col2 > 100;
SELECT col1, col2 FROM table_name ORDER BY col2 DESC;

聯結查詢

SELECT * FROM table1, table2 WHERE table1.col1 = table2.col1;
-- 建議使用 ANSI JOIN 語法
SELECT * FROM table1 INNER JOIN table2 ON table1.col1 = table2.col1;

彙總查詢

SELECT COUNT(*) FROM table_name WHERE col = 'xxx';
SELECT SUM(col1), AVG(col2), MAX(col3), MIN(col4) FROM table_name;
SELECT col1, AVG(col2) FROM table_name GROUP BY col1 HAVING AVG(col2) > 50;

子查詢與集合運算

-- EXISTS
SELECT * FROM t1 WHERE EXISTS (SELECT * FROM t2 WHERE condition);

-- IN 子查詢
SELECT * FROM t1 WHERE col1 IN (SELECT col1 FROM t2 WHERE condition);

-- 模糊比對
SELECT * FROM t1 WHERE col1 LIKE 'prefix%';
SELECT * FROM t1 WHERE col1 LIKE '%keyword%';

-- 範圍
SELECT * FROM t1 WHERE col1 BETWEEN 10 AND 20;
SELECT * FROM t1 WHERE col1 IN ('A', 'B', 'C');

3. 更新資料 (UPDATE)

UPDATE table_name SET col1 = 'new_val' WHERE condition;
-- 省略 WHERE 將更新全表,謹慎使用!

4. 刪除資料 (DELETE)

DELETE FROM table_name WHERE condition;

四、日期時間比較的跨資料庫寫法差異

資料庫語法範例
AccessWHERE mydate > #2000-01-01#
OracleWHERE mydate > CAST('2000-01-01' AS DATE) 或 TO_DATE('2000-01-01','YYYY-MM-DD')
DB2WHERE mydate > '2000-01-01' (支援 ISO 格式字串隱含轉換)
日期時間WHERE mydatetime > TIMESTAMP('2000-01-01-10.00.01')

五、實務建議

  • 慣用 VARCHAR 而非 CHAR 節省空間。
  • 大量文字建議使用 CLOB / DBCLOB (DB2 專用大物件型別)。
  • 主鍵、外鍵、索引設計直接影響查詢效能,務必依存取模式規劃。
  • 參數化查詢 (PreparedStatement) 可防 SQL Injection 並重用執行計畫。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved