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

DB2 SQL 語法參考手冊:DDL、資料型別、DML 與日期比較跨平台差異

     編輯:關於SqlServer

DB2 SQL 概覽

DB2 採用標準 SQL (ANSI/ISO),語法口語化、易學。核心分三大類:DDL (資料定義)、資料型別、DML (資料操作)。

一、DDL:資料定義語言

1. 建立資料表

CREATE TABLE table_name(
    column1 DATATYPE [NOT NULL] [PRIMARY KEY],
    column2 DATATYPE [NOT NULL],
    ...
);
  • 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 精度 (總位數),s 小數位;預設 p=5, s=0
FLOAT單精度浮點數32 位元
DOUBLE雙精度浮點數64 位元
CHAR(n)固定長度字串n ≤ 254
VARCHAR(n)可變長度字串n ≤ 4000
GRAPHIC(n)固定長度雙位元組字串n ≤ 127 (支援中日韓文字)
VARGRAPHIC(n)可變長度雙位元組字串n ≤ 2000
DATE日期 (年月日)
TIME時間 (時分秒)
TIMESTAMP時間戳記 (年月日時分秒毫秒)

三、DML:資料操作語言

1. 新增資料 (INSERT)

-- 明確欄位
INSERT INTO table_name (col1, col2) VALUES (val1, val2);

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

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 t1, t2 WHERE t1.col1 = t2.col1;

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

-- 子查詢 / EXISTS / IN
SELECT * FROM t1 WHERE EXISTS (SELECT * FROM t2 WHERE t1.id = t2.id);
SELECT * FROM t1 WHERE col1 IN (SELECT col1 FROM t2 WHERE ...);

-- 模糊 / 範圍 / 集合
SELECT * FROM t WHERE col LIKE 'prefix%';
SELECT * FROM t WHERE col IN ('a','b','c');
SELECT * FROM t WHERE col BETWEEN 10 AND 20;

3. 更新資料 (UPDATE)

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

4. 刪除資料 (DELETE)

DELETE FROM table_name WHERE condition;

跨平台日期比較語法差異 (關鍵遷移知識)

資料庫日期字面值語法範例
Access#YYYY-MM-DD#WHERE mydate > #2000-01-01#
OracleDATE 'YYYY-MM-DD' 或 TO_DATEWHERE mydate > DATE '2000-01-01'
WHERE mydate > TO_DATE('2000-01-01','YYYY-MM-DD')
SQL Server'YYYY-MM-DD' (隱含轉換)WHERE mydate > '2000-01-01'
DB2DATE 'YYYY-MM-DD'WHERE mydate > DATE '2000-01-01'
PostgreSQLDATE 'YYYY-MM-DD'WHERE mydate > DATE '2000-01-01'
MySQL'YYYY-MM-DD'WHERE mydate > '2000-01-01'

日期時間比較

-- Oracle
WHERE mydt > TO_TIMESTAMP('2000-01-01 10:00:01','YYYY-MM-DD HH24:MI:SS')

-- DB2
WHERE mydt > TIMESTAMP('2000-01-01 10:00:01')

-- SQL Server
WHERE mydt > '2000-01-01 10:00:01'

Delphi 參數化查詢範例

theDate := '2000-01-01';
Query1.SQL.Add('SELECT * FROM abc WHERE mydate > CAST(' + QuotedStr(theDate) + ' AS DATE)');
-- 或 Oracle
Query1.SQL.Add('SELECT * FROM abc WHERE mydate > TO_DATE(' + QuotedStr(theDate) + ', ''YYYY-MM-DD'')');

結語

DB2 SQL 高度符合 ANSI 標準,遷移至 PostgreSQL/Oracle 相對平滑。重點注意:不支援 DROP COLUMN、GRAPHIC/VARGRAPHIC 雙位元組型別、日期字面值標準化為 DATE '...'。建立跨平台 SQL 範本庫,集中管理方言差異,降低遷移風險。

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