1. Types of MDL statements
SELECT Retrieves rows from one or more tables. 從一個(gè)或多個(gè)表中取得若干列
INSERT Adds one or more new rows to a table. 向表中添加若干列
UPDATE Modifies one or more rows in a table. 更新表中的若干列
DELETE Removes one or more rows from a table. 從表中刪除若干列
2. SELECT
SELECT 列名, 列名, …, 列名 FROM 表名;
SELECT *(所有列) FROM 表名;
如果表名或列名中有空格,要用方括號(hào)[]括起來(lái)。
(1) 使用SMO有條件地SELECT
為 SELECT加上限制條件,使用WHERE。
SELECT something FROM somewhere WHERE 列名 SMO某個(gè)值;
Here, SMO means SQL Mathematical Operators
操作符
|
意義
|
=
|
等于
|
<> 或 !=
|
不等于
|
<
|
小于
|
>
|
大于
|
<=
|
小于等于
|
>=
|
大于等于
|
(2) LIKE - 按樣式SELECT
SELECT something FROM somewhere WHERE 列名 LIKE某個(gè)值(帶通配符);
LIKE 中可以使用的通配符
通配符
|
意義
|
_ (下劃線)
|
表示作一個(gè)任意字符
|
%
|
表示任意個(gè)任意字符
|
[ ]
|
表示與括號(hào)中任意一個(gè)字符相匹配的字符
|
[^ ]
|
表示與任意一個(gè)不在括號(hào)中的字符匹配的字符
|
[ - ]
|
與括號(hào)中從左到右的范圍中字符匹配
|
#
|
表示一個(gè)任意數(shù)字
|
例:
‘Cha_’ 可以是 ‘Chaa’、’Chay’、’Cha4’、’Cha.’、’Cha@’……
‘Cha%’ 可以是’‘Chaaasf’、’Chay’、’Chaqq4a4’、’Cha.ert’、’Cha@qawe’……
‘[AIO]%’ 表示以’A’、’I’或’O’開(kāi)頭,以任意字符結(jié)尾的字符串
‘[AIO]%’ 表示以’A’、’I’或’O’之外的字符開(kāi)頭,以任意字符結(jié)尾的字符串
‘[A-O]%’ 表示以從’A到’O’之間的字符開(kāi)頭,以任意字符結(jié)尾的字符串
(2) IN - 指定選擇范圍
SELECT something FROM somewhere WHERE 列名 IN(列出范圍);
列出的范圍可以是顯式地指定出來(lái),也可以用其它方法限制,如用另一個(gè)SELECT語(yǔ)句選擇得到的結(jié)果。
例1: SELECT ProductID, ProductName, QuantityPerUnit, UnitPrice FROM Products WHERE ProductID IN (1, 2, 5, 15, 20, 45, 50);
例2:SELECT OrderID FROM Orders WHERE CustomerID IN
( SELECT CustomerID FROM Customers WHERE CompanyName LIKE 'Fu%');
(3) BETWEEN - 指定選擇范圍
SELECT something FROM somewhere WHERE 列名 BETWEEN 起始 AND 終止;
(4) NOT - 取操作符相反的意義
(5) 選擇列值為空的行
SELECT something FROM somewhere WHERE 列名 IS NULL;
(6) 使用邏輯運(yùn)算符限定多個(gè)選擇條件
使用 AND, OR, NOT
(7) ORDER BY - 對(duì)取得的行進(jìn)行排序
SELECT something FROM somewhere ORDER BY 列名 (ASC / DESC);
可以用ASC或DESC指定是按升序或降序排列。
可以同時(shí)使用兩個(gè)排序條件:
ORDER BY 列1 (ASC / DESC), 列2 (ASC / DESC);
意為先按列1排列,在此基礎(chǔ)上再按列2排列。
(8) TOP - 取得最前面的N列
SELECT TOP N something…
(9) DISTINCT – 忽略某列值重復(fù)的行
SELECT DISTINCT something FROM somewhere…
只取得something指定列中唯一的項(xiàng)。
(10) UNION – 合并SELECT得到的結(jié)果
(SELECT something FROM somewhere…)
UNION
(SELECT something_else FROM somewhere_else…)
(11) GROUP BY – 把得到的結(jié)果分組
SELECT something FROM somewhere…GROUP BY something2;
SELECT something COUNT(*) FROM somewhere…GROUP BY something2;
按照something2把得到的結(jié)果中相同的項(xiàng)合并為一項(xiàng),即按something2進(jìn)行分組。可以用COUNT(*)計(jì)算每組中的個(gè)數(shù)。
(12) 限制得到的分組
SELECT something FROM somewhere…GROUP BY something2 HAVING COUNT(*) > N;
用HAVING限制只得到包括個(gè)體數(shù)目大于N的組。
(13) AS - 更改顯示的列名,自定義表名
SELECT something AS something_else, something2 AS something_else2…;
顯示自定義的列名。
SELECT Cust.CustomerID, CompanyName, Address, OrderID, ShipAddress FROM Customers AS Cust, Orders AS Ord WHERE Cust.CustomerID = Ord.CustomerID…;
為方便、簡(jiǎn)略,把表名用別名代替。
(14) 對(duì)列中的值進(jìn)行計(jì)算
SELECT something (+, -, *, /, … something) FROM somewhere…;
對(duì)選擇的列按其類型(數(shù)值、字符、字符串)進(jìn)行相應(yīng)的計(jì)算,以及在列之間進(jìn)行計(jì)算,得到計(jì)算結(jié)果。
(15) 從多個(gè)表中進(jìn)行選擇
SELECT something, something2, … FROM (table1, table2…);
table1和table2必須JOIN起來(lái)。
如果有選擇的列名同時(shí)在兩個(gè)表中出現(xiàn),必須明確表示出來(lái),如:table1.something。
表的JOIN可以用標(biāo)準(zhǔn)的SQL形式:table1.something=table2.something;也可以用更加“顯式”的形式,直接用JOIN關(guān)鍵字:
SELECT something, something2, … FROM table1
JOIN table2 ON table1.something=table2.something AND (other conditions)…
上兩種JOIN方法存在明顯的不足:如果某行中列的值為NULL則不能得到結(jié)果,即不能針對(duì)存在NULL值的列進(jìn)行JOIN。外部JOIN可以解決這一問(wèn)題。
LEFT OUTER JOIN 可以得到左邊含NULL的值
RIGHT OUTER JOIN 可以得到右邊含NULL的值
FULL OUTER JOIN 兩邊含NULL的值都可以取得
(16) 從視圖中選擇行
SELECT something FROM table1 INNER JOIN table2… ON (Condition)…;
取得的View稱為Alphabetical list of something。
3. INSERT - 向表中插入一行
INSERT INTO table (column1, column2, …, column…) VALUES (value1, value2, …, value…);
如果為插入的行的每一列都提供值,則可以忽略列名,只提供值:
INSERT INTO table VALUES (value1, value2, …, value…);
4. UPDATE – 修改表中某一行
UPDATE table
SET column = (something) WHERE (condition);
可以同時(shí)修改行中多列的值:SET column = (something), column2 = (something2), …
5. DELETE – 刪除一行
DELETE FROM table WHERE (condition);
6. 保持?jǐn)?shù)庫(kù)的完整一致性
1.主鍵的獨(dú)一無(wú)二性
2.子表中的Foreign Key指向父表中的有效值
如:不能修改或刪除一個(gè)作為Foreign Key被引用的值
7. TRANSACTION
通過(guò)把多條語(yǔ)句集合為一個(gè)“Transaction”(業(yè)務(wù)、記錄?),以及業(yè)務(wù)的執(zhí)行與回滾實(shí)現(xiàn)。
BEGIN TRANSACTION;
Do something;
COMMIT; / ROLLBACK;
在決定是COMMIT還是ROLLBACK之前,應(yīng)該檢查業(yè)務(wù)中有沒(méi)有錯(cuò)誤發(fā)生。如果沒(méi)有則執(zhí)行,否則就回滾。用@@ERROR的值判斷是否發(fā)生錯(cuò)誤,0代表沒(méi)有。
BEGIN TRANSACTION MyTransaction;
Do something;
IF @@ERROR = 0
COMMIT TRANSACTION MyTransaction;
ELSE
ROLLBACK TRANSACTION MyTransaction;