void

Using SQL 之 Data Manipulation Language (DML)

1. Types of MDL statements

SELECT Retrieves rows from one or more tables. 从一个或多个表中取得若干列

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 表名;

如果表名或列名中有空格,要用方括号[]括起来。

1 使用SMO有条件地SELECT

SELECT加上限制条件,使用WHERE

SELECT something FROM somewhere WHERE 列名 SMO某个值;

Here, SMO means SQL Mathematical Operators

操作符

意义

=

等于

<> 或 !=

不等于

<

小于

>

大于

<=

小于等于

>=

大于等于

(2) LIKE - 按样式SELECT

SELECT something FROM somewhere WHERE 列名 LIKE某个值(带通配符);

LIKE 中可以使用的通配符

通配符

意义

_ (下划线)

表示作一个任意字符

%

表示任意任意字符

[ ]

表示与括号中任意一个字符相匹配的字符

[^ ]

表示与任意一个不在括号中的字符匹配的字符

[ - ]

与括号中从左到右的范围中字符匹配

#

表示一个任意数字

例:

‘Cha_’ 可以是 ‘Chaa’、’Chay’、’Cha4’、’Cha.’、’Cha@’……

‘Cha%’ 可以是’‘Chaaasf’、’Chay’、’Chaqq4a4’、’Cha.ert’、’Cha@qawe’……

‘[AIO]%’ 表示以’A’、’I’或’O’开头,以任意字符结尾的字符串

‘[AIO]%’ 表示以’A’、’I’或’O’之外的字符开头,以任意字符结尾的字符串

‘[A-O]%’ 表示以从’A到’O’之间的字符开头,以任意字符结尾的字符串

(2) IN - 指定选择范围

SELECT something FROM somewhere WHERE 列名 IN(列出范围);

列出的范围可以是显式地指定出来,也可以用其它方法限制,如用另一个SELECT语句选择得到的结果。

例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) 使用逻辑运算符限定多个选择条件

使用 AND, OR, NOT

(7) ORDER BY - 对取得的行进行排序

SELECT something FROM somewhere ORDER BY 列名 (ASC / DESC);

可以用ASCDESC指定是按升序或降序排列。

可以同时使用两个排序条件:

ORDER BY 1 (ASC / DESC), 2 (ASC / DESC);

意为先按列1排列,在此基础上再按列2排列。

(8) TOP - 取得最前面的N

SELECT TOP N something…

(9) DISTINCT 忽略某列值重复的行

SELECT DISTINCT something FROM somewhere…

只取得something指定列中唯一的项。

(10) UNION 合并SELECT得到的结果

SELECT something FROM somewhere…

UNION

SELECT something_else FROM somewhere_else…

(11) GROUP BY – 把得到的结果分组

SELECT something FROM somewhere…GROUP BY something2;

SELECT something COUNT(*) FROM somewhere…GROUP BY something2;

按照something2把得到的结果中相同的项合并为一项,即按something2进行分组。可以用COUNT(*)计算每组中的个数。

(12) 限制得到的分组

SELECT something FROM somewhere…GROUP BY something2 HAVING COUNT(*) > N;

HAVING限制只得到包括个体数目大于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…;

为方便、简略,把表名用别名代替。

(14) 对列中的值进行计算

SELECT something (+, -, *, /, … something) FROM somewhere…;

对选择的列按其类型(数值、字符、字符串)进行相应的计算,以及在列之间进行计算,得到计算结果。

(15) 从多个表中进行选择

SELECT something, something2, … FROM (table1, table2…);

table1table2必须JOIN起来。

如果有选择的列名同时在两个表中出现,必须明确表示出来,如:table1.something

表的JOIN可以用标准的SQL形式:table1.something=table2.something;也可以用更加“显式”的形式,直接用JOIN关键字:

SELECT something, something2, … FROM table1

JOIN table2 ON table1.something=table2.something AND (other conditions)…

上两种JOIN方法存在明显的不足:如果某行中列的值为NULL则不能得到结果,即不能针对存在NULL值的列进行JOIN。外部JOIN可以解决这一问题。

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);

可以同时修改行中多列的值:SET column = (something), column2 = (something2), …

5. DELETE – 删除一行

DELETE FROM table WHERE (condition);

6. 保持数库的完整一致性

1.主键的独一无二性

2.子表中的Foreign Key指向父表中的有效值

如:不能修改或删除一个作为Foreign Key被引用的值

7. TRANSACTION

通过把多条语句集合为一个“Transaction”(业务、记录?),以及业务的执行与回滚实现。

BEGIN TRANSACTION;

Do something;

COMMIT; / ROLLBACK;

在决定是COMMIT还是ROLLBACK之前,应该检查业务中有没有错误发生。如果没有则执行,否则就回滚。用@@ERROR的值判断是否发生错误,0代表没有。

BEGIN TRANSACTION MyTransaction;

Do something;

IF @@ERROR = 0

COMMIT TRANSACTION MyTransaction;

ELSE

ROLLBACK TRANSACTION MyTransaction;

posted on 2008-07-19 11:23 void 阅读(188) 评论(0)  编辑  收藏 所属分类: SQL


只有注册用户登录后才能发表评论。


网站导航: