第4章关系数据库标准语言SQL.ppt
- 文档编号:9285194
- 上传时间:2023-05-17
- 格式:PPT
- 页数:46
- 大小:805.50KB
第4章关系数据库标准语言SQL.ppt
《第4章关系数据库标准语言SQL.ppt》由会员分享,可在线阅读,更多相关《第4章关系数据库标准语言SQL.ppt(46页珍藏版)》请在冰点文库上搜索。
第4章关系数据库标准语言SQL,4.1SQL概述4.2查询功能4.3操作功能4.4定义功能,了解SQL掌握简单查询、连接查询、嵌套查询的方法掌握使用特殊运算符、谓词、量词、空值进行查询的方法掌握查询排序、计算、分组的方法掌握SQL的插入、更新、删除数据的方法掌握SQL表的定义、删除、修改表结构、定义视图的功能了解别名、自连接查询、内外层相互嵌套查询、超链接查询、查询的并运算。
本章知识点与要求:
第4章关系数据库标准语言SQL,4.1SQL概述4.2查询功能4.3操作功能4.4定义功能,4.1SQL语言概述,SQL是StructuredQueryLanguage(结构化查询语言)的缩写,查询是SQL的重要组成部分,但不是全部,SQL还包含数据定义、操纵、控制等功能。
目前,SQL语言已被确定为关系型数据库系统的国际标准,被绝大多数商品化关系型数据库系统采用,如Oracle、Sybase、DB2、Informix、SQLServer这些数据库管理系统都支持SQL语言作为查询语言。
SQL语言特点,综合统一:
有数据定义、查询、操纵、控制等功能,能独立完成数据库的全部操纵。
内容简洁:
虽功能强大,但核心功能只有9个动词;语法简单,接近自然语言。
非过程化:
用户只需了解想做什么,具体怎么做有SQL自动完成使用方式灵活:
命令交互或嵌入程序均可,第4章关系数据库标准语言SQL,4.1SQL概述4.2查询功能4.3操作功能4.4定义功能,SQL数据查询由SELECT命令实现,该命令的基本框架是SELECT-FROM-WHERE查询模块,SELECT命令的语法格式如下:
selectdistincttop别名as,别名as.from数据库名!
aslocal_aliasinner|leftouter|rightouter|fullouterjoin!
aslocal_aliasoninto|tofileadditive|toprinterprompt|toscreenpreferencepreferencenamenoconsoleplainnowaitwhere.groupby.havingunionallorderbyasc|desc.,select后面跟要查询的数据。
from后面跟查询数据的来源(表).,where后面跟查询条件。
groupby:
对查询结果进行分组orderby:
对查询结果进行排序。
下面通过例子说明该命令的使用,本章查询的例子将全部基于一个订货管理数据库,其包含的表有:
例4-1:
从职工表中查询出职工的工资情况,职工,select,工资,from,可以看到查询结果中有重复值,如果要去掉重复值,需要使用distinct短语:
selectdistinct工资from职工,4.2.1简单查询,例4-2:
查询仓库表中的所有数据,仓库,select,仓库号,城市,面积,from,在SQL语句中也可以使用通配符(*)表示所有字段,上句命令等同于:
select*from仓库,例4-3:
列出工资多于1230元的职工号,当需要查询满足某个条件的记录时,可以使用where指定查询条件,where工资1230,select职工号from职工,例4-4:
查询哪些仓库中有工资多于1210的职工,selectdistinct仓库号from职工where工资1210,例4-5:
列出在仓库“WH1”或“WH2”,且工资少于1250元的职工号,select职工号from职工;,where工资1250and(仓库号=WH1or仓库号=WH2),通过上面的例子可以看出,select命令的执行过程是:
先从from指定的表中,找出满足where后指定的条件的记录,然后再显示select后指定的字段的值。
4.2.2简单的连接查询,例4-6:
列出工资多于1230元的职工号和所在的城市,当查询信息分别出自不同表时,就需要用连接查询实现。
select职工号,城市from职工,仓库;,where(工资1230)AND,职工.仓库号=仓库.仓库号,连接条件,例4-7:
列出所有职工的职工号、工资、所在的城市、所完成的订购单号及日期、订购单的供应商名,select职工号,工资,城市,订购单号,订购日期,供应商名;,where(职工.仓库号=仓库.仓库号and;职工.职工号=订购单.职工号and;订购单.供应商号=供应商.供应商号),from职工,仓库,订购单,供应商;,4.2.3嵌套查询,在SQL中,一个select-from-where语句称为一个查询块,将一个查询块(子查询)嵌套在另一个查询块(父查询)的where子句的条件条件中,就称为嵌套查询。
嵌套查询形式如下:
select.from.where(select.from.where),子查询,父查询,在处理嵌套查询时,首先查询出子查询的结果,然后将子查询的结果作为父查询的条件,再进行父查询的查询。
select.from.wherenotin|notexists|any|all|some;(select.from.where),子查询,父查询,在嵌套查询中,常使用in、notin、exists、notexists、any、some、all、比较运算符等连接父查询中已有的条件表达式和子查询。
嵌套查询一般形式如下:
in:
表示在之中,是属于的意思,即外层查询where后的条件属于子查询集合中的元素。
notin则相反,exists:
用来检查在子查询中是否有结果返回。
带有exists的子查询不返回任何实际数据。
当子查询的查询结果集合为非空时,外层的WHERE子句返回”真”,否则返回”假”。
notexists则相反。
比较运算符:
主要有、=、等。
any|some:
子查询的任何一个结果;all:
子查询的全部结果;,select.from.wherenotin|notexists|any|all|some;(select.from.where),例4-8:
列出哪些城市至少有一个仓库的职工的工资为1250。
select城市from仓库where仓库号in;,(select仓库号from职工where工资=1250),select城市from仓库,where,首先,至少有一个职工的工资为1250的仓库都有哪些呢?
selectdistinct仓库号from职工where工资=1250,然后,根据检索出来的仓库号,再从仓库表中检索出所在的城市,仓库号,=?
!
=,集合,单值,在之中,in,故检索语句应该为:
例4-9:
列出至少有一名职工的仓库信息。
(select*from职工where仓库号=仓库.仓库号),select*from仓库whereexists;,例4-10:
列出还没有职工的仓库的信息。
(select*from职工where仓库号=仓库.仓库号),select*from仓库wherenotexists;,select*from仓库where仓库号notin;(select仓库号from职工),例4-11:
列出职工工资为1230的职工所在的城市。
select城市from仓库where仓库号=;,(select仓库号from职工where工资=1230),例4-12:
检索有职工的工资大于等于WH1仓库中任何一名职工的工资的仓库号。
selectdistinct仓库号from职工where工资=any;,(select工资from职工where仓库号=WH1),例4-13:
检索有职工的工资大于等于WH1仓库中所有职工的工资的仓库号。
selectdistinct仓库号from职工where工资=all;,(select工资from职工where仓库号=WH1),4.2.4几个特殊运算符,notbetweenand:
表示不在上下界之间(包括上下界)。
notlike:
表示不与匹配。
isnotnull:
查询某个字段的值是否为空值,例4-14:
列出工资在1220到1240之间的职工信息。
例4-16:
列出供应商表中供应商名为“.公司”的供应商信息。
select*from职工,where工资between1220and1240,这是一个字符串匹配的查询,就可以用like运算符,like后的表达式中可以使用下面两个通配符:
%:
可以代表任意长度的字符串;_:
可以代表任意一个字符。
select*from供应商where供应商名like%公司,例4-15:
列出订单总金额为null的职工号和订单号。
select职工号,订购单号from订购单where总金额isnull,4.2.5排序,在SQL中,select的查询结果是按照表记录的物理顺序给出的,当需要对查询结果排序时,可以使用orderby子句对查询结果按照一个或多个字段排序。
orderbyasc|desc,asc|desc,注意:
orderby子句必须放在其他子句之后,且不可以在子查询中使用,例4-17:
先按仓库号再按工资升序输出全部职工信息。
select*from职工orderby仓库号,工资,当使用orderby子句对查询结果排序时,还可以在select后面使用top子句只显示前几项纪录。
格式为:
topnpercent,说明:
不使用percent选项时,n是1至32767之间的整数,表示前n项;使用percent选项时,n是0.01至99.99之间的实数,表示前n%项;top只有与orderby同时使用才有效。
例4-18:
显示工资最高的3位职工的信息。
例4-19:
显示工资最低的那30%职工的信息。
select*top3from职工orderby工资desc,select*top30percentfrom职工orderby工资asc,例4-20:
找出供应商所在地的数目。
4.2.6简单的计算查询,SQL不但具有强大的查询功能,如果select后面跟avg(),sum(),count(),min(),max()等函数,还可以以字段名为参数进行计算,selectcount(distinct地址)from供应商,例4-21:
求在北京和上海的所有职工工资总和。
selectsum(工资)from职工where仓库号in;(select仓库号from仓库where城市=“北京”or城市=“上海”),例4-22:
求在仓库WH2工作的职工的最高工资。
selectmax(工资)from职工where仓库号=“WH2”,例4-23:
求每个仓库的职工的平均工资。
4.2.7分组与计算查询,本查询中,需要先按仓库号进行分组,再计算查询每个仓库的职工的平均工资。
就需要使用groupby子句来实现。
其格式为:
select仓库号,avg(工资)from职工groupby仓库号,groupby,字段名2having,说明:
groupby子句用来按指定字段对记录进行分组,having是进一步限定分组的条件,having子句总是跟在groupby之后,不能单独使用。
例4-24:
求至少有两个职工的每个仓库的职工数和平均工资。
本查询中,不仅需要先按仓库号进行分组,并且当分组满足一定条件时才检索,然后再计算每个仓库的职工数和平均工资。
就可以用groupby进行分组,再用having子句来限定分组。
select仓库号,COUNT(*),AVG(工资)from职工;,groupby仓库号havingCOUNT(*)=2,例4-25:
查询职工的情况,查询结果按工资升序输出到文本文件。
4.2.8查询结果处理,select语句默认的输出是在“浏览”窗口中显示查询结果,也可以into子句来修改查询结果的去向。
如输出到表、文件、数组、打印机等。
【格式1】intodbf|table查询结果输出到永久表,【格式2】intocursor查询结果输出到临时表,【格式3】intofile查询结果输出到文本文件,【格式4】intoarray查询结果输出到数组,【格式5】intoprinterprompt查询结果输出到打印机,select*from职工intofiletxttestorderby工资asc,第4章关系数据库标准语言SQL,4.1SQL概述4.2查询功能4.3操作功能4.4定义功能,4.3.1插入数据,Insertinto表名(字段名1,字段名2,)values(表达式1,表达式2,.),在表的尾部插入一条新记录,并将指定的值赋值给对应的字段。
当插入一条记录的所有字段时,表名后的各字段名可以省略,若只插入某些字段的数据,则必须列出插入数据对应的字段名。
例:
向订购单中插入一组数据:
职工号为E7,供应商号为S4,订单号为OR01,订购日期为2001/05/25,总金额为100000。
命令为:
insertinto订购单values(“E7”,”S4”,”OR01”,2001-05-25,100000),若只插入职工号、订单号数据,命令为:
insertinto订购单(职工号,订单号)values(“E7”,”OR01”),SQL插入数据的命令是:
4.3.2更新数据,update表名set字段名1=表达式1,字段名2=表达式2where,例:
给仓库WH1的职工的工资增加10%,命令为:
update职工set工资=工资*,?
(1+10%),(1+0.1),SQL更新数据的命令是:
4.3.3删除数据,deletefrom表名where条件,注意:
当没有where子句时,将表中的所有记录。
逻辑删除,例:
将student表中所有男生的记录都逻辑删除,Deletefromstudentwhere性别=男,SQL删除数据的命令是:
第4章关系数据库标准语言SQL,4.1SQL概述4.2查询功能4.3操作功能4.4定义功能,4.4.1新建表,createtable|dbf表名1free(字段名1字段类型(宽度,小数位数)null|notnullcheckerrordefaultprimarykey|uniquereferencestag,字段名2字段类型(宽度,小数位数),),free用在数据库打开的情况下指明创建自由表,设置字段的有效性规则、错误提示、默认值,primarykey子句指定当前字段为主索引关键字;unique子句指定当前字段为候选索引关键字(注意不是惟一索引),references指定的表作为新建表的永久性父表;tag指明父表中的关联字段,若缺省该参数,则默认父表的主索引字段作为关联字段,SQL新建表的命令是:
例:
在学生.dbc中建立一个stuinfo表,所包含的字段及类型、宽度如下表,其中性别字段的取值只能取“男”或“女”两个值,且默认值为“男”。
opendatabase学生createtablestuinfo;(学号C(13),姓名C(10),性别C
(2);default男check(性别=男or性别=女),;出生日期D,班级C(12),联系方式C(20);),:
用字母代号表示的字段的数据类型,字段类型与代号对照表如下:
4.4.2删除表,droptable表名,说明:
直接从磁盘上删除所指定的表文件。
如果指定的表文件是数据库中的表,虽然从磁盘上删除了表文件,但是记录在数据库文件中的信息却没有删除,此后会出现错误提示。
SQL删除表的命令是:
4.4.3修改表结构,在该命令的后面添加add、alter、drop、rename等子句实现增加字段、修改字段、删除字段、修改字段名等功能,SQL语言使用命令,altertable表名,来修改表结构。
例:
stuinfo表增加一个“政治面貌”字段(字符型,宽10),altertablestuinfoadd,1、增加字段,altertableadd(,)null|notnullcheckerrordefaultprimarykey|unique;add,例:
stuinfo表增加一个“政治面貌”字段(字符型,宽10),altertablestuinfoadd政治面貌C(10),altertablealter(,)null|notnull,2、修改字段,例:
把stuinfo表中“政治面貌”字段宽度由10改为15,altertablestuinfoalter政治面貌C(15),altertable表名drop字段名,4、删除字段,例:
把stuinfo表中“政治面貌”字段改为“家庭出身”,altertablestuinforename政治面貌to“家庭出身”,altertable表名rename字段名to字符表达式,3、修改字段名,例:
把stuinfo表中的“家庭出身”字段删除,altertablestuinfodrop家庭出身,4.4.4视图的操作,下一章再讲。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 关系 数据库 标准 语言 SQL
![提示](https://static.bingdoc.com/images/bang_tan.gif)