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

DB2 關聯式資料庫查詢語句基礎語法完整手冊

     編輯:DB2 教學

SQL 語言簡介

DB2 提供關聯式資料庫查詢語言 SQL (Structured Query Language),語法口語化、易學易懂。幾乎每個資料庫系統必須提供,用於表示關聯式操作,包含資料定義 (DDL) 與資料操作 (DML)。SQL 原拼為 SEQUEL,原型以「系統 R」之名在 IBM 聖荷西實驗室完成,經內部與外部使用性效率測試結果滿意,決定以系統 R 技術基礎發展 IBM 產品。ANSI 與 ISO 1987 年遵循幾乎以 IBM SQL 為基礎的標準關聯式資料語言定義。

一、資料定義語言 (DDL)

定義資料格式與形態,建立資料庫首要面對的工作:資料分哪些表格關係、表格欄位主鍵、表格間相互參考關係等,皆須規劃妥當。

1. 建立資料表

CREATE TABLE table_name(
    column1 datatype [NOT NULL] [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 (column_name);

刪除主鍵定義。

3. 建立索引

CREATE INDEX index_name ON table_name (column_name);

對表格欄位建立索引提升查詢速度。

4. 刪除物件

DROP TABLE table_name;
DROP INDEX index_name;

二、資料型態

  • SMALLINT:16 位元整數
  • INTEGER:32 位元整數
  • DECIMAL(p,s):p 精確值、s 大小的十進位整數。p 為全部位數,s 為小數點後位數。未指定預設 p=5, s=0
  • FLOAT:32 位元實數
  • DOUBLE:64 位元實數
  • CHAR(n):n 長度字串,n ≤ 254
  • VARCHAR(n):不固定長度最大 n 字串,n ≤ 4000
  • GRAPHIC(n):同 CHAR(n) 但單位為雙位元組,n ≤ 127,支援中文等雙位元組字體
  • VARGRAPHIC(n):可變長度雙位元組字串,n ≤ 2000
  • DATE:含年、月、日
  • TIME:含時、分、秒
  • TIMESTAMP:含年、月、日、時、分、秒、千分之一秒

三、資料操作語言 (DML)

資料定義後進行操作:新增 (INSERT)、查詢 (QUERY)、更改 (UPDATE)、刪除 (DELETE)。

1. 新增資料

INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);

未指定 column 依表格欄位順序填入;欄位型態與填入資料必須吻合;table_name 可為 view_name。也可透過子查詢填入:

INSERT INTO table_name (column1, column2, ...)
SELECT columnx, columny, ... FROM another_table;

2. 查詢資料

基本查詢

SELECT column1, column2, ... FROM table_name;

列出特定欄位所有資料。

SELECT * FROM table_name WHERE column1 = xxx [AND column2 > yyy] [OR column3 <> zzz];

* 表示所有欄位;WHERE 後接條件式列出符合資料。

SELECT column1, column2 FROM table_name ORDER BY column2 [DESC];

ORDER BY 指定排序欄位,DESC 為大到小,未指定為小到大。

組合查詢(多表聯結)

SELECT * FROM table1, table2 WHERE table1.column1 = table2.column1;

查詢兩表中 column1 值相同資料;比較欄位資料型態必須相同;複雜查詢可能涉及多個表格。

彙總查詢

SELECT COUNT(*) FROM table_name WHERE column_name = xxx;

查詢符合條件資料筆數。

SELECT SUM(column1) FROM table_name;

計算總和,欄位必須為可數數字型態。其他:AVG() 平均、MAX()/MIN() 最大最小值。

SELECT column1, AVG(column2) FROM table_name GROUP BY column1 HAVING AVG(column2) > xxx;

GROUP BY:以 column1 為群組計算 column2 平均,必須搭配 AVG/SUM 等彙總關鍵字。HAVING:必須搭配 GROUP BY 作為彙總限制。

複合查詢(子查詢)

SELECT * FROM table_name1 WHERE EXISTS (
    SELECT * FROM table_name2 WHERE conditions
);

WHERE 條件可為另一查詢;EXISTS 表示存在與否。

SELECT * FROM table_name1 WHERE column1 IN (
    SELECT column1 FROM table_name2 WHERE conditions
);

IN 後接集合,表示 column1 存在集合中;SELECT 出來資料型態必須符合 column1。

其他查詢

SELECT * FROM table_name1 WHERE column1 LIKE 'x%';

LIKE 搭配 'x%' 表示以 x 開頭字串。

SELECT * FROM table_name1 WHERE column1 IN ('xxx','yyy',...);

IN 後接集合。

SELECT * FROM table_name1 WHERE column1 BETWEEN xx AND yy;

BETWEEN 表示 column1 值介於 xx 與 yy 之間。

3. 更改資料

UPDATE table_name SET column1 = 'xxx' WHERE conditions;

更改欄位設定值;conditions 為符合條件,無 WHERE 則整表該欄位全被更改。

4. 刪除資料

DELETE FROM table_name WHERE conditions;

刪除符合條件資料。

日期時間比較注意事項

不同資料庫日期比較表達式不同:

  • Access:WHERE mydate > #2000-01-01#
  • Oracle:WHERE mydate > CAST('2000-01-01' AS DATE) 或 TO_DATE('2000-01-01','YYYY-MM-DD')
  • Delphi 中:thedate='2000-01-01'; query1.sql.add('select * from abc where mydate > CAST(''''''+thedate+'''''' AS DATE)');
  • 日期時間型:WHERE mydatetime > TO_DATE('2000-01-01 10:00:01','YYYY-MM-DD HH24:MI:SS')
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved