数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

SQL数据操作基础(中级)8


发布日期:2018年12月29日
 
SQL数据操作基础(中级)8

更新记录

要修改表中已经存在的一条或多条记录应使用SQL UPDATE语句同DELETE语句一样UPDATE语句可以使用WHERE子句来选择更新特定的记录请看这个例子

UPDATE mytable SET first_column=Updated! WHERE second_column=Update Me!

这个UPDATE 语句更新所有second_column字段的值为Update Me!的记录对所有被选中的记录字段first_column的值被置为Updated!

下面是UPDATE语句的完整句法

UPDATE {table_name|view_name} SET [{table_name|view_name}]

{column_list|variable_list|variable_and_column_list}

[{column_list|variable_list|variable_and_column_list}…

[{column_listN|variable_listN|variable_and_column_listN}]]

[WHERE clause]

注意

你可以对文本型字段使用UPDATE语句但是如果你需要更新很长的字符串应使用UPDATETEXT语句这部分内容对本书来说太高级了因此不加讨论要了解更多的信息请参考Microsoft SQL Sever 的文档

如果你不提供WHERE子句表中的所有记录都将被更新有时这是有用的例如如果你想把表titles中的所有书的价格加倍你可以使用如下的UPDATE 语句

你也可以同时更新多个字段例如下面的UPDATE语句同时更新first_columnsecond_column和third_column这三个字段

UPDATE mytable SET first_column=Updated!

Second_column=Updated!

Third_column=Updated!

WHERE first_column=Update Me

技巧

SQL忽略语句中多余的空格你可以把SQL语句写成任何你最容易读的格式

用SELECT 创建记录和表

你也许已经注意到INSERT 语句与DELETE语句和UPDATE语句有一点不同它一次只操作一个记录然而有一个方法可以使INSERT 语句一次添加多个记录要作到这一点你需要把INSERT 语句与SELECT 语句结合起来象这样

INSERT mytable (first_columnsecond_column)

SELECT another_firstanother_second

FROM anothertable

WHERE another_first=Copy Me!

这个语句从anothertable拷贝记录到mytable只有表anothertable中字段another_first的值为Copy Me!的记录才被拷贝

当为一个表中的记录建立备份时这种形式的INSERT 语句是非常有用的在删除一个表中的记录之前你可以先用这种方法把它们拷贝到另一个表中

如果你需要拷贝整个表你可以使用SELECT INTO 语句例如下面的语句创建了一个名为newtable的新表该表包含表mytable的所有数据

SELECT * INTO newtable FROM mytable

你也可以指定只有特定的字段被用来创建这个新表要做到这一点只需在字段列表中指定你想要拷贝的字段另外你可以使用WHERE 子句来限制拷贝到新表中的记录下面的例子只拷贝字段second_columnd的值等于Copy Me!的记录的first_column字段

SELECT first_column INTO newtable

FROM mytable

WHERE second_column=Copy Me!

使用SQL修改已经建立的表是很困难的例如如果你向一个表中添加了一个字段没有容易的办法来去除它另外如果你不小心把一个字段的数据类型给错了你将没有办法改变它但是使用本节中讲述的SQL语句你可以绕过这两个问题

例如假设你想从一个表中删除一个字段使用SELECT INTO 语句你可以创建该表的一个拷贝但不包含要删除的字段这使你既删除了该字段又保留了不想删除的数据

如果你想改变一个字段的数据类型你可以创建一个包含正确数据类型字段的新表创建好该表后你就可以结合使用UPDATE语句和SELECT 语句把原来表中的所有数据拷贝到新表中通过这种方法你既可以修改表的结构又能保存原有的数据

集合函数

到现在为止你只学习了如何根据特定的条件从表中取出一条或多条记录但是假如你想对一个表中的记录进行数据统计例如如果你想统计存储在表中的一次民意测验的投票结果或者你想知道一个访问者在你的站点上平均花费了多少时间要对表中的任何类型的数据进行统计都需要使用集合函数

Microsoft SQL 支持五种类型的集合函数你可以统计记录数目平均值最小值最大值或者求和当你使用一个集合函数时它只返回一个数该数值代表这几个统计值之一

注意

要在你的ASP网页中使用集合函数的返回值你需要给该值起一个名字要作到这一点你可以在SELECT语句中在集合函数后面紧跟一个字段名如下例所示

SELECT AVG(vote) the_average FROM opinion

在这个例子中vote的平均值被命名为 the_average现在你可以在你的ASP网页的数据库方法中使用这个名字

统计字段值的数目

函数COUNT()也许是最有用的集合函数你可以用这个函数来统计一个表中有多少条记录这里有一个例子

SELECT COUNT(au_lname) FROM authors

这个例子计算表authors中名字(last name)的数目如果相同的名字出现了不止一次该名字将会被计算多次如果你想知道名字为某个特定值的作者有多少个你可以使用WHERE子句如下例所示

SELECT COUNT(au_lname) FROM authors WHERE au_lname=Ringer

这个例子返回名字为Ringer的作者的数目如果这个名字在表authors中出现了两次则次函数的返回值是

假如你想知道有不同名字的作者的数目你可以通过使用关键字DISTINCT来得到该数目如下例所示

SELECT COUNT(DISTINCT au_lname) FROM authors

如果名字Ringer出现了不止一次它将只被计算一次关键字DISTINCT 决定了只有互不相同的值才被计算

通常当你使用COUNT()时字段中的空值将被忽略一般来说这正是你所希望的但是如果你仅仅想知道表中记录的数目那么你需要计算表中所有的记录─不管它是否包含空值下面是一个如何做到这一点的例子

SELECT COUNT(*) FROM authors

注意函数COUNT()没有指定任何字段这个语句计算表中所有记录所数目包括有空值的记录因此你不需要指定要被计算的特定字段

函数COUNT()在很多不同情况下是有用的例如假设有一个表保存了对你站点的质量进行民意调查的结果这个表有一个名为vote的字段该字段的值要么是要么是表示反对票表示赞成票要确定赞成票的数量你可以所有下面的SELECT 语句

SELECT COUNT(vote) FROM opinion_table WHERE vote=

计算字段的平均值

使用函数COUNT()你可以统计一个字段中有多少个值但有时你需要计算这些值的平均值使用函数AVG()你可以返回一个字段中所有值的平均值

假如你对你的站点进行一次较为复杂的民意调查访问者可以在之间投票表示他们喜欢你站点的程度你把投票结果保存在名为vote的INT型字段中要计算你的用户投票的平均值你需要使用函数AVG() SELECT AVG(vote) FROM opinion

这个SELECT语句的返回值代表用户对你站点的平均喜欢程度函数AVG()只能对数值型字段使用这个函数在计算平均值时也忽略空值

计算字段值的和

假设你的站点被用来出售卡片已经运行了两个月是该计算赚了多少钱的时候了假设有一个名为orders的表用来记录所有访问者的定购信息要计算所有定购量的总和你可以使用函数SUM()

SELECT SUM(purchase_amount) FROM orders

函数SUM()的返回值代表字段purchase_amount中所有值的平均值字段purchase_amount的数据类型也许是MONEY型但你也可以对其它数值型字段使用函数SUM()

返回最大值或最小值

再一次假设你有一个表用来保存对你的站点进行民意调查的结果访问者可以选择从 的值来表示他们对你站点的评价如果你想知道访问者对你站点的最高评价你可以使用如下的语句

SELECT MAX(vote) FROM opinion

你也许希望有人对你的站点给予了很高的评价通过函数MAX()你可以知道一个数值型字段的所有值中的最大值如果有人对你的站点投了数字函数MAX()将返回该值

另一方面假如你想知道访问者对你站点的的最低评价你可以使用函数MIN()如下例所示

SELECT MIN(vote) FROM opinion

函数MIN()返回一个字段的所有值中的最小值如果字段是空的函数MIN()返回空值

其它常用的SQL表达式函数和过程

这一节将介绍一些其它的SQL技术你将学习如何从表中取出数据其某个字段的值处在一定的范围你还将学习如何把字段值从一种类型转换成另一种类型如何操作字符串和日期时间数据最后你将学会一个发送邮件的简单方法

通过匹配一定范围的值来取出数据

假设你有一个表用来保存对你的站点进行民意调查的结果现在你想向               

上一篇:SQL高手篇:精典SQL FAQ收藏

下一篇:MS SQL Server 性能调整和优化开发人员指南 第 3 部分:配置 SQL Server