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_list2|variable_list2|variable_and_column_list2}…
[,{column_listN|variable_listN|variable_and_column_listN}]]                 
                                          
[WHERE
clause]                                                                     
                                   

注意:

你可以对文本型字段使用UPDATE语句。但是,如果你需要更新很长的字符串,应使用UP

DATETEXT语句。这部分内容对本书来说太高级了,因此不加讨论。要了解更多的信息,

请参考Microsoft SQL Sever 的文档。

如果你不提供WHERE子句,表中的所有记录都将被更新。有时这是有用的。例如,如果你

想把表titles中的所有书的价格加倍,你可以使用如下的UPDATE 语句:

你也可以同时更新多个字段。例如,下面的UPDATE语句同时更新first_column,second_

column,和third_column这三个字段:

UPDATE mytable SET first_column=’Updated!’
Second_column=’Updated!’
Third_column=’Updated!’
WHERE first_column=’Update Me1’

技巧:

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

用SELECT 创建记录和表

你也许已经注意到,INSERT 语句与DELETE语句和UPDATE语句有一点不同,它一次只操作

一个记录。然而,有一个方法可以使INSERT 语句一次添加多个记录。要作到这一点,你
                                          

需要把INSERT 语句与SELECT 语句结合起来,象这样:

INSERT mytable (first_column,second_column)
SELECT another_first,another_second
FROM
anothertable                                                                
                                     
WHERE another_first=’Copy Me!’

这个语句从anothertable拷贝记录到mytable.只有表anothertable中字段another_firs

t的值为’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中出现了两次

,则次函数的返回值是2。

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

。如下例所示:

SELECT COUNT(DISTINCT au_lname) FROM authors

如果名字’Ringer’出现了不止一次,它将只被计算一次。关键字DISTINCT 决定了只有

互不相同的值才被计算。

通常,当你使用COUNT()时,字段中的空值将被忽略。一般来说,这正是你所希望的。

但是,如果你仅仅想知道表中记录的数目,那么你需要计算表中所有的记录─不管它是

否包含空值。下面是一个如何做到这一点的例子:

SELECT COUNT(*) FROM authors

注意函数COUNT()没有指定任何字段。这个语句计算表中所有记录所数目,包括有空值

的记录。因此,你不需要指定要被计算的特定字段。

函数COUNT()在很多不同情况下是有用的。例如,假设有一个表保存了对你站点的质量



进行民意调查的结果。这个表有一个名为vote的字段,该字段的值要么是0,要么是1。

0表示反对票,1表示赞成票。要确定赞成票的数量,你可以所有下面的SELECT 语句:

SELECT COUNT(vote) FROM opinion_table WHERE vote=1

计算字段的平均值

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

均值。使用函数AVG(),你可以返回一个字段中所有值的平均值。

假如你对你的站点进行一次较为复杂的民意调查。访问者可以在1到10之间投票,表示他

们喜欢你站点的程度。你把投票结果保存在名为vote的INT型字段中。要计算你的用户投

票的平均值,你需要使用函数AVG():

SELECT AVG(vote) FROM opinion

这个SELECT语句的返回值代表用户对你站点的平均喜欢程度。函数AVG()只能对数值型

字段使用。这个函数在计算平均值时也忽略空值。

计算字段值的和

假设你的站点被用来出售卡片,已经运行了两个月,是该计算赚了多少钱的时候了。假

设有一个名为orders的表用来记录所有访问者的定购信息。要计算所有定购量的总和,

你可以使用函数SUM():

SELECT SUM(purchase_amount) FROM orders

函数SUM()的返回值代表字段purchase_amount中所有值的平均值。字段purchase_amo

unt的数据类型也许是MONEY型,但你也可以对其它数值型字段使用函数SUM()。

返回最大值或最小值

再一次假设你有一个表用来保存对你的站点进行民意调查的结果。访问者可以选择从1到

10 的值来表示他们对你站点的评价。如果你想知道访问者对你站点的最高评价,你可以

使用如下的语句:

SELECT MAX(vote) FROM opinion

你也许希望有人对你的站点给予了很高的评价。通过函数MAX(),你可以知道一个数值

型字段的所有值中的最大值。如果有人对你的站点投了数字10,函数MAX()将返回该值



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

例所示:

SELECT MIN(vote) FROM opinion

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

值。

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

这一节将介绍一些其它的SQL技术。你将学习如何从表中取出数据,其某个字段的值处在

一定的范围,你还将学习如何把字段值从一种类型转换成另一种类型,如何操作字符串

和日期时间数据。最后,你将学会一个发送邮件的简单方法。

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

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

的评价在7到10之间的访问者发送书面的感谢信。要得到这些人的名字,你可以使用如下

的SELECT 语句:

SELECT username FROM opinion WHERE vote>6 and vote<11

这个SELECT 语句会实现你的要求。你使用下面的SELECT 语句也可以得到同样的结果:

SELECT username FROM opinion WHERE vote BETWEEN 7 AND 10

这个SELECT 语句与上一个语句是等价的。使用哪一种语句是编程风格的问题,但你会发

现使用表达式BETWEEN 的语句更易读。

现在假设你只想取出对你的站点投了1或者10的访问者的名字。要从表opinion中取出这

些名字,你可以使用如下的SELECT 语句:

这个SELECT语句会返回正确的结果,没有理由不使用它。但是,存在一种等价的方式。

使用如下的SELECT可以得到相同的结果:

SELECT username FROM opinion WHERE vote IN (1,10)



注意表达式IN 的使用。这个SELECT 语句只取出vote的值等于括号中的值之一的记录。

你也可以使用IN来匹配字符数据。例如,假设你只想取出Bill Gates或President Clin

ton的投票值。你可以使用如下的SELECT 语句:

SELECT vote FROM opinion WHERE username IN (‘Bill Gates’,’President
Clinton’)

最后,你可以在使用BETWEEN或IN的同时使用表达式NOT。例如,要取出那些投票值不在

7到10之间的人的名字,你可以使用如下的SELECT 语句:

SELECT username FROM opinion WHERE vote NOT BETWEEN 7 and 10

要选取那些某个字段的值不在一列值之中的记录,你可以同时使用NOT 和IN,如下例所

示:

SELECT vote FROM opinion

WHERE username NOT IN (‘Bill Gates’,’President Clinton’)

你不是必须在SQL语句中使用BETWEEN或IN,但是,要使你的查询更接近自然语言,这两

个表达式是有帮助的。

SELECT username FROM opinion WHERE vote=1 or vote
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SQL语言快速入门之二   创建表格 SQL语言的create table语句被用来建立新的数据库表格。Create table语句的使用格式如下: create table tablename (column1 data type, column2 data type, column3 data type); 如果用户希望在建立新表格时规定列的限制条件,可以使用可选的条件选项: create table tablename (column1 data type [constraint], column2 data type [constraint], column3 data type [constraint]); 举例如下: create table employee (firstname varchar(15), lastname varchar(20), age number(3), address varchar(30), city varchar(20)); 简单来说,创建新表格时,在关键词create table后面加入所要建立的表格的名称,然后在括号内顺次设定各列的名称,数据类型,以及可选的限制条件等。注意,所有的SQL语句在结尾处都要使用“;”符号。 使用SQL语句创建的数据库表格和表格列的名称必须以字母开头,后面可以使用字母,数字或下划线,名称的长度不能超过30个字符。注意,用户在选择表格名称时不要使用SQL语言的保留关键词,如select, create, insert等,作为表格或列的名称。 数据类型用来设定某一个具体列数据的类型。例如,在姓名列只能采用varchar或char的数据类型,而不能使用number的数据类型。 SQL语言较为常用的数据类型为: char(size):固定长度字符串,其括号的size用来设定字符串的最大长度。Char类型的最大长度为255字节。 varchar(size):可变长度字符串,最大长度由size设定。 number(size):数字类型,其数字的最大位数由size设定。 Date:日期类型。 number(size,d):数字类型,size决定该数字总的最大位数,而d则用于设定该数字在小数点后的位数。 最后,在创建新表格时需要注意的一点就是表格列的限制条件。所谓限制条件就是当向特定列输入数据时所必须遵守的规则。例如,unique这一限制条件要求某一列不能存在两个值相同的记录,所有记录的值都必须是唯一的。除unique之外,较为常用的列的限制条件还包括not null和primary key等。Not null用来规定表格某一列的值不能为空。Primary key则为表格的所有记录规定了唯一的标识符。 向表格插入数据 SQL语言使用insert语句向数据库表格插入或添加新的数据行。Insert语句的使用格式如下: insert into tablename (first_column,...last_column) values (first_value,...last_value); 例如: insert into employee (firstname, lastname, age, address, city) values (‘Li’, ‘Ming’, 45, ‘No.77 Changan Road’, ‘Beijing”); 简单来说,当向数据库表格添加新记录时,在关键词insert into后面输入所要添加的表格名称,然后在括号列出将要添加新值的列的名称。最后,在关键词values的后面按照前面输入的列的顺序对应的输入所有要添加的记录值。 更新记录 SQL语言使用update语句更新或修改满足规定条件的现有记录。Update语句的格式为: update tablename set columnname = newvalue [, nextcolumn = newvalue2...] where columnname OPERATOR value [and|or column OPERATOR value]; 例如: update employee set age = age+1 where first_name= ‘Mary’and last_name= ‘Williams’; 使用update语句时,关键一点就是要设定好用于进行判断的where条件从句。 删除记录 SQL语言使用delete语句删除数据库表格的行或记录Delete语句的格式为: delete from tablename where columnname OPERATOR value [and|or column OPERATOR value]; 例如: delete from employee where lastname = May; 简单来说,当需要删除某一行或某个记录时,在delete from关键词之后输入表格名称,然后在where从句设定删除记录的判断条件。注意,如果用户在使用delete语句时不设定where从句,则表格的所有记录将全部被删除。 删除数据库表格 在SQL语言使用drop table命令删除某个表格以及该表格的所有记录。Drop table命令的使用格式为: drop table tablename; 例如: drop table employee; 如果用户希望将某个数据库表格完全删除,只需要在drop table命令后输入希望删除的表格名称即可。Drop table命令的作用与删除表格的所有记录不同。删除表格的全部记录之后,该表格仍然存在,而且表格列的信息不会改变。而使用drop table命令则会将整个数据库表格的所有信息全部删除。 以上,我们对SQL语言主要的命令和语句进行了较为详细的介绍。应该说SQL语句的语法结构和风格还是相当简单和直观的,只要用户结合实践多加练习,一定会在短期内迅速掌握。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值