DB2 提供關聯式資料庫查詢語言 SQL (Structured Query Language),語法口語化、易學易懂。幾乎每個資料庫系統必須提供,用於表示關聯式操作,包含資料定義 (DDL) 與資料操作 (DML)。SQL 原拼為 SEQUEL,原型以「系統 R」之名在 IBM 聖荷西實驗室完成,經內部與外部使用性效率測試結果滿意,決定以系統 R 技術基礎發展 IBM 產品。ANSI 與 ISO 1987 年遵循幾乎以 IBM SQL 為基礎的標準關聯式資料語言定義。
定義資料格式與形態,建立資料庫首要面對的工作:資料分哪些表格關係、表格欄位主鍵、表格間相互參考關係等,皆須規劃妥當。
CREATE TABLE table_name(
column1 datatype [NOT NULL] [NOT NULL PRIMARY KEY],
column2 datatype [NOT NULL],
...
);
datatype:資料格式,詳見資料型態表。
NOT NULL:是否允許資料為空(尚未填入)。
PRIMARY KEY:本表主鍵。
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);
刪除主鍵定義。
CREATE INDEX index_name ON table_name (column_name);
對表格欄位建立索引提升查詢速度。
DROP TABLE table_name;
DROP INDEX index_name;
資料定義後進行操作:新增 (INSERT)、查詢 (QUERY)、更改 (UPDATE)、刪除 (DELETE)。
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;
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 之間。
UPDATE table_name SET column1 = 'xxx' WHERE conditions;
更改欄位設定值;conditions 為符合條件,無 WHERE 則整表該欄位全被更改。
DELETE FROM table_name WHERE conditions;
刪除符合條件資料。
不同資料庫日期比較表達式不同:
WHERE mydate > #2000-01-01#WHERE mydate > CAST('2000-01-01' AS DATE) 或 TO_DATE('2000-01-01','YYYY-MM-DD')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')