第七章 SQL操作基础.docx
《第七章 SQL操作基础.docx》由会员分享,可在线阅读,更多相关《第七章 SQL操作基础.docx(10页珍藏版)》请在冰豆网上搜索。
第七章SQL操作基础
第七章SQL操作基础
SQL是一种通用的数据库查询语言,利用SQL的数据定义语句,可以实现数据表、字段或索引的创建、修改和删除,利用数据操纵语句,可以实现数据的查询、插入、更新或删除等操作。
ASP存取数据库时,也需要利用sql语句来实现对数据库的相关操作
7.1SQL简介
SQL是StructuredQueryLanguage的缩写,是一种结构化的数据库查询语言。
目前绝大多数数据库均支持该种查询语言,如access、mysql、microsoftsqlserver、oracle、sybase等,利用SQL提供的命令、子句和函数,课实现对数据库的各种操作。
SQL语句不区分大小写,字符串常量用单引号或双引号括起来,字符串比较时要区分大小写。
1.SQL的命令与子句
常用的SQL命令可以分为数据定义和数据操纵两大类。
数据定义类命令主要用于建立和定义新的数据库、表、字段和索引,以及对数据库或表进行修改或删除等操作。
包括的命令有:
CREATE用于建立新的数据库、表或索引
DROP用于删除数据库、表或索引
ALTER用于添加字段或改变对字段的定义
对于数据库或表的创建,通常可用数据库的宿主软件(可创建盖数据库软件)来创建,在ASP中,用的较多的主要是数据的存取,因此,对数据库或表的创建及修改命令,只作简单的介绍。
数据操作类命令主要用于实现对数据的查询、添加、更新或删除等操作。
常用的命令主要有:
SELECT用于检索记录数据
INSERT用于向数据表添加记录数据
UPDATE用于更新指定记录中指定字段的值
DELETE从数据表中删除指定的记录
SQL语句由SQL命令、子句和函数等几个部分构成。
子句常用来指定查询条件、指定数据来源或指定数据的组织排列方式,常用的子句主要有:
FROM用于指定需要从其中选择记录的数据表名
WHERE用于指定查询条件
GROUPBY用于指定将所选择的记录,按什么进行分组
ORDERBY用于指定记录按哪个字段进行排序,排序方式是升序还是降序
例如,若要从名为userdata的数据表中,检索出username字的值为”truename”的记录,并显示该记录的id、username、password、email字段的值。
则实现的SQL语句为:
Selectid,username,password,emailFROMuserdataWHEREusername=’truename’
若要检索出userdata表中所有的记录和所有字段的数据,并按id字段的降序排列,则实现的SQL语句为:
Select*FROMuserdataORDERBYidDESC
SQL语句不能直接执行,在ASP中,可通过ADO的链接对象所提供的execute方法来执行SQL语句。
2.SQL的函数
SQL还提供了大量的函数,利用这些函数,可进一步增强SQL的功能。
比如,利用聚集类函数,可获得表中数据的总结性信息,这类函数常用的主要有:
COUNT返回所选择的记录个数
SUM返回所选择的记录中,指定字段的值的总和
AVG返回所选择的记录中,指定字段的平均值
MAX返回所选择的记录中,指定字段的最大值
MIN返回所选择的记录中,指定字段的最小值
例如,若要获得product数据表中,stopflag字段值为1的记录的个数,则实现的SQL语句为:
Selectcount(*)fromproductwherestopflag=1
若要获得product数据表中的记录总数,则实现的SQL语句为:
Selectcount(*)fromproduct
若要获得product数据表中price字段的最大值,则实现的SQL语句为:
SelectMAX(price)fromproduct
SQL函数比较多,若要进一步学习,可参阅有关讲解sqlserver方面的书籍。
7.2SQL的运算符
1.数学运算符
SQL支持的数学运算符又加(+)、减(-)、乘(*)、处(/)和取模(%)
2.逻辑运算符
SQL的逻辑运算符有AND、OR、和NOT三种,分别代表逻辑与、逻辑或、逻辑非运算。
常用于构成复合条件表达式。
3.比较运算符
SQL支持的比较运算符如下表:
运算符
功能
运算符
功能
<
小于
<>或!
=
不等于
<=
小于或等于
BETWEEN
用于指定字段值得范围
>
大于
LIKE
在模式匹配中在、使用,实现模糊查询
>=
大于或等于
IN
指定字段的可能取值
=
等于
例如,若要在product数据表中,检索出name字段的值中含有”sony”的记录,则实现的SQL语句为:
Select*fromproductwherenamelike‘%sony%’
说明:
%是SQL的通配符,代表任意的多个字符,在SQL中,单字符的通配符为“_”
若要在product数据表中,检索出price字段的值在100到15000之间的记录,则实现的语句为:
Select*fromproductwherepricebetween100and15000
若要在product数据表中,检索出ID字段的值为3,11,17,21或34的记录,则实现的SQL语句为:
Select*fromproductwhereIDin(3,11,17,21,34)
IN运算符可用于实现从题库中随机抽取题目组成试卷。
7.3SQL的数据操纵语句
7.3.1INSERT
1.添加单条记录
该语句用于向指定的数据表中添加记录,其用法为:
Insertinto表名[(字段名列表)]values(值列表)
说明:
表名代表药添加数据的表的名称;字段名列表为可选项,若指定,则对新添加记录的指定字段填写数据,具体的数据由VALUES后面的值列表指定。
若缺省字段名列表,则对新添加记录的每个字段,均要填写数据,填入顺序为数据字段的建立顺序。
例7.1现有名为userdata的数据表,其字段有id(自动递增)、username(字符型)、password(字符型)、email(字符型),试用SQL语句,向该表中添加一条记录,其记录数据为:
ucrk34ycqzuczhoc@
分析:
对于自动递增型的最大,在新添加记录时,系统会自动为其分配值,因此在insert语句中,可以不指定。
实现的语句为:
Insertintouserdata(username,password,email)values(‘ucrk’,’34ycqz’,’uczhoc@’)
在添加记录时,若某个字段没有明确的值,且该字段的值允许为空,则可为其指定一个空值,在values后面的值列表中,用null来表示。
若字段不允许为空,则可指定零长度的空格,对于数值型,要指定为0。
利用该语句,一次只能插入一条记录,若要插入多条记录,只需要重复使用该语句即可。
2.添加多条记录
如果要将一个表中复合条件的记录,添加到另一个表中,此时可使用INSERT的另一个用法来实现,其用法为:
Insertinto表1[(字段名列表)]select字段名列表from表2where条件
语句功能:
从表2中将符合条件的记录,添加到表1中,该语句实质就是将select语句的查询结果,插入到表1中。
例如,若要将userdata数据表中的全部内容,拷贝到tmp_userdata数据表中,则实现的SQL语句为:
Insertintotmp_userdataselect*fromuserdata
若要在product数据表中,将productname字段包含“DV”的记录,添加到tmp_product数据表中,要添加的字段数据有productID、productname、price,则实现的SQL语句为:
Insertintotmp_userdata(productID,productname,price)select(productID,productname,price)fromproductwhereproductnamelike‘%DV%’
7.3SELECT语句
该语句用于从指定的表中检索出记录,这些被检索出的记录就形成了一个集合,简称为记录集,该语句的用法为:
Select[predicate]字段列表|*from表名[where条件][orderby排序字段asc|desc][groupby分组字段]
说明:
predicate:
该项用于限制返回记录的数目,最常用的是TOP,用于指定返回符合条件的记录中,最上面的多少条记录。
该项的默认值为ALL,但ALL通常不表达。
例如,若要返回product数据表中,price小于100的前5条记录,则实现的SQL语句为:
Selecttop5*fromproductwhereprice<100
字段名列表|*:
二者任选其一,*代表当前数据表中的所有字段,若要查询数据表中的部分字段的值,则将这些字段罗列出来即可,各字段间用逗号分隔。
orderby:
用于指定排序字段,查询后,所返回的记录将按此排序,ASC代表升序,为默认值,DESC代表降序。
例如,若要显示product数据表中的全部记录内容,并按price的升序排列,则实现的SQL语句为:
Select*fromproductorderbyprice
GROUPBY:
用于按指定的字段,对返回的记录进行分组。
例7.2试在office数据表中,按team字段分组,并显示各组的平均工资。
在该数据表中,工资字段为salary.
实现的SQL语句为:
selectteam,avg(salary)fromofficegroupbyteam
另外,通过在字段前面使用前缀数据表名,利用SELECT语句,还可以同时从多个数据表中检索出数据。
例7.3在product数据表中有productid、productname、price等字段,在pbook数据表中有productid、press、isbn、author、publishdate等字段,试检索出press字段值为“清华大学出版社”的记录的productid、productname、price、isbn和author字段的值。
实现的语句为:
Selectproduct.productid,product.productname,product.price,pbook.isbn,pbook.authorfromproduct,pbookwhereproduct.productid=pbook.productidandpbook.press=’清华大学出版社’
7.3.3UPDATE语句
该语句用于更新指定记录的数据,其用法为:
Update表名set字段名1=值[,字段名2=值2,…][where条件]
语句功能:
对符合条件的记录,更新修改指定字段的值。
若默认条件,则对所有记录进行更新修改。
例如,在userdata数据表中,将用户名为guest的记录的密码修改为“ky24361”,用户名字段为“username”,密码字段为password.则实现的SQL语句为:
Updateuserdatasetpassword=’ky24361’whereusername=’guest’
在product数据表中,将price字段的值增加3%,实现的SQL语句为:
Updateproductsetprice=price*1.03
7.3.4DELETE语句
该语句用于删除指定的记录,其用法为:
Deletefrom表名WHERE条件
语句功能:
删除符合条件的记录。
若默认条件,则删除指定表中的全部记录。
例如:
若要删除userdata数据表中用户名username为“test”的记录,则实现的sql语句为:
Deletefromuserdatawhereusername=’test’
若要删除userdata数据表中的全部记录内容,则实现的SQL语句为:
Deletefromusername
7.4SQL的数据定义语句
7.4.1.数据库的创建与删除
1.创建数据库
在创建数据库之前,必须保证拥有系统管理员权限,或由系统管理员授予的创建数据库的权限,其创建语句为:
Createdatabase数据库名
例如,若要创建一个名为netbook的数据库,则实现的SQL语句为:
createdatabasenetbook
2.删除数据库
语句用法:
dropdatabase数据库名
语句功能:
删除指定的数据库。
例如:
若要删除netbook数据库,实现的SQL语句为:
Dropdatabasenetbook
7.4.2数据表的创建与删除
1.创建数据库表在一个数据库中,可存储若干个表,数据库的数据,实质是存储在数据表中的。
每一个表,相当于一个二维表格。
语句用法:
Createtable表名(field1datatype[notnull],field2databyte[notnull]…)
语句功能:
创建指定的数据表。
说明:
(1)field:
代表所要创建的字段的名称。
(2)datatype:
为该字段的数据类型。
对于不同类型的数据库,字段所允许定义的数据类型会有所不同。
(3)notnull:
为可选项,若选用,则表示该字段的值不能为空。
例7.4试创建一个名为softcd的数据库表,该数据表的字段名、类型和宽度如下所示:
字段名类型宽度是否允许空值
Productidintnotnull
Developernvarchar50null
Pressnvarchar50null
Downloadnvarchar50null
Pricerealnull
实现的SQL语句为:
Createtablesoftcd(productidintnotnull,developernvarchar(50)null,pressnvarchar(50)null,downloadnvarchar(50)null,pricerealnull)
2.删除数据表
语句用法:
droptable表名
语句功能:
删除指定的表
例如:
若要删除名为tmpsoftcd的表,则实现的SQL语句为:
Droptabletmpsoftcd
7.4.3修改数据表结构
修改数据表的结构,可用altertable语句来实现,利用该语句,可实现在表中添加一个字段,或修改已有的字段的相关信息。
其用法为:
Altertable表名add|modify字段名类型[(宽度)]
语句功能:
在指定的数据表中,添加或修改已有的字段。
说明:
add和modify二者只能选一,若用add,则表示添加字段;若选用MODIFY,则为修改指定的字段。
例如,若要在softcd数据表中添加一个disprice字段,类型为real,允许为空,则实现的SQL语句为:
Altertablesoftcdadddispricerealnull
若要将softcd数据表中press字段的宽度更改为40,实现的SQL语句为:
Altertablesoftcdmodifypressnvarchar(40)