原创 Using SQL 之Data Manipulation Language (DML)

2008-3-21 09:40 3064 5 4 分类: 软件与OS

3288.jpg?c3odx4HBkwl28Hgu


Using SQL



Data Manipulation Language (DML)



SQL pronounced “sequel”.



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



2SELECT 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;

文章评论0条评论)

登录后参与讨论
我要评论
0
5
关闭 站长推荐上一条 /2 下一条