2010年7月7日 星期三

SQL語言 -DDL,DML

SQL語言
資料定義語言(DDL)
CREATE
建立資料庫
CREATE DATABASE 資料庫名稱;建立資料表格
建議
資料表名稱用複數,欄位名稱用單數
複合名稱以底線連接
欄位名稱一致(在數個資料表中所提到的同一欄位,使用同一名稱較好)
SQL語法
CREATE TABLE [IF NOT EXISTS] 資料表名稱(
欄位名稱1 資料型別 [欄位設定參數] [DEFAULT 預設值] ,
欄位名稱2 資料型別 [欄位設定參數] [DEFAULT 預設值],
欄位名稱3 資料型別 [欄位設定參數] [DEFAULT 預設值],...
[PRIMARY KEY (欄位名稱)]
);參考資料型別
ALTER
變更資料表名稱
ALTER TABLE 原來名稱
RENAME 新名稱;變更欄位
ALTER TABLE 資料表
CHANGE 原來欄位名稱 新(原來)名稱 資料型別 [欄位設定參數] [DEFAULT 預設值];刪除欄位
ALTER TABLE 資料表
DROP 欄位;新增欄位
ALTER TABLE 資料表
ADD 欄位 資料型別 [欄位設定參數] [DEFAULT 預設值];DROP
刪除資料表
DROP TABLE [IF EXISTS] 資料表;資料操作語言(DML)
SELECT(基本)
SELECT 欄位1 [AS 別名1], 欄位2 [AS 別名2], ...
FROM 資料表
[WHERE 條件]
[ORDER BY 欄位 [ASC | DESC | DISTINCT]]
[LIMIT 開始列數, 傳回列數];WHERE - 設定篩選條件
ORDER BY - 排序
ASC - 遞增(預設值)
DESC - 遞減
DISTINCT - 不重複
LIMIT - 選擇傳回資料列
SELECT(進階)
群組化(GROUP BY欄位)
SELECT 欄位2, COUNT(欄位1)
FROM 資料表
GROUP BY 欄位2;
HAVING SUM(欄位3)>50;聚合函數
COUNT()
AVG()
SUM()
MIN() 及 MAX()
聚合函數條件式(HAVING BY)
作用於群組化後的資料
從多個資料表取出資料
INNER JOIN
使用逗號(,)結合,為完全結合,須使用WHERE條件將資料表關聯的欄位相同者取出
SELECT 資料表1.欄位1, 資料表2.欄位2, ...
FROM 資料表1 [AS 別名1], 資料表2 [AS 別名2],...
WHERE 資料表1.欄位3=資料表2.欄位3 [AND 其他條件]LEFT JOIN
包含所有左側資料表的記錄,未關聯的右側資料表部份,會以NULL呈現
多半用在尋找不符合的資料列(包含NULL的關聯)
注意關聯部份「ON」的使用
SELECT 資料表1.欄位1, 資料表2.欄位2, ...
FROM 資料表1 LEFT JOIN 資料表2
ON 資料表1.欄位3=資料表2.欄位3INSERT
INSERT INTO 資料表 [(欄位1, 欄位2, ...)]
VALUES (值1, 值2...);REPLACE的用法相同,但主索引鍵重複時,會強迫將舊的資料覆蓋
UPDATE
UPDATE 資料表
SET 欄位1=值1, 欄位2=值2, ...
[WHERE 條件]
[LIMIT 異動資料列數上限];DELETE
DELETE FROM 資料表
[WHERE 條件]
[LIMIT 異動資料列數上限];常用運算子及函式
比較
=, <>, <, >, ⇐, >=
IS [NOT] NULL - 是否為NULL
BETWEEN A AND B - 是否介於A和B之間
[NOT] IN (值1, 值2...) - 是否在列舉項目內
LIKE %目標字串% - 包含目標字串的字串
萬用字元 - 「%」代表任意個數字元,「?」代表單一字元
邏輯
AND, OR, NOT
算術
+-*/
RAND() - 產生介於0至1.0之間的亂數
MOD(N,M) - 求N/M後的餘數
ROUND(X) - 求四捨五入後的餘數
字串
CONCAT(字串1, 字串2...) - 將字串串接起來
LENGTH(字串) - 求字串長度
LTRIM(字串)及RTRIM(字串) - 去除左(右)方空白
LCASE(字串)及UCASE(字串) - 將字串轉成小(大)寫英文
SPACE(n) - 產生n個空白字元
REPEAT(字串, n) - 產生n個由字串串接的新字串
其他
OPTIMIZE
將已被刪除資料的硬碟空間釋放出來
OPTIMIZE TABLE 資料表COMMIT
ROLLBACK

沒有留言:

張貼留言