




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章关系数据库标准语言SQL4.1SQL概述4.2查询功能4.3操作功能4.4定义功能了解SQL掌握简单查询、连接查询、嵌套查询的方法掌握使用特殊运算符、谓词、量词、空值进行查询的方法掌握查询排序、计算、分组的方法掌握SQL的插入、更新、删除数据的方法掌握SQL表的定义、删除、修改表结构、定义视图的功能了解别名、自连接查询、内外层相互嵌套查询、超链接查询、查询的并运算。本章知识点与要求:第4章关系数据库标准语言SQL4.1SQL概述4.2查询功能4.3操作功能4.4定义功能4.1SQL语言概述SQL是StructuredQueryLanguage(结构化查询语言)的缩写,查询是SQL的重要组成部分,但不是全部,SQL还包含数据定义、操纵、控制等功能。目前,SQL语言已被确定为关系型数据库系统的国际标准,被绝大多数商品化关系型数据库系统采用,如Oracle、Sybase、DB2、Informix、SQLServer这些数据库管理系统都支持SQL语言作为查询语言。
SQL语言特点
综合统一:有数据定义、查询、操纵、控制等功能,能独立完成数据库的全部操纵。内容简洁:虽功能强大,但核心功能只有9个动词;语法简单,接近自然语言。
非过程化:
用户只需了解想做什么,具体怎么做有SQL自动完成使用方式灵活:
命令交互或嵌入程序均可SQL功能命令动词数据查询SELECT数据定义CREATE、DROP、ALTER数据操纵INSERT、UPDATE、DELETE数据控制GRANT、REVOKE第4章关系数据库标准语言SQL4.1SQL概述4.2查询功能4.3操作功能4.4定义功能SQL数据查询由SELECT命令实现,该命令的基本框架是SELECT-FROM-WHERE查询模块
SELECT命令的语法格式如下:select
[distinct][top<表达式>][别名]<select表达式>[as<列名>][,[别名]<select表达式>[as<列名>]...]from[数据库名!]<表名>[[as]local_alias][[inner|left[outer]|right[outer]|full[outer]join[<数据库名>!]<表名>[[as]local_alias][on<联接条件>]][into<查询结果>|tofile<文件名>[additive]|toprinter[prompt]|toscreen][preferencepreferencename][noconsole][plain][nowait][where<联接条件1>...][groupby<分组表达式>...][having<筛选条件>][union[all]<select命令>][orderby<关键字表达式>[asc|desc]...]select后面跟要查询的数据。from后面跟查询数据的来源(表).where后面跟查询条件。groupby:对查询结果进行分组orderby:对查询结果进行排序。下面通过例子说明该命令的使用本章查询的例子将全部基于一个订货管理数据库,其包含的表有:例4-1:从职工表中查询出职工的工资情况职工select工资from可以看到查询结果中有重复值,如果要去掉重复值,需要使用distinct短语:
select
distinct
工资from
职工4.2.1简单查询例4-2:查询仓库表中的所有数据仓库select仓库号,城市,面积from在SQL语句中也可以使用通配符(*)表示所有字段,上句命令等同于:select
*
from
仓库例4-3:列出工资多于1230元的职工号当需要查询满足某个条件的记录时,可以使用where
指定查询条件where工资>1230select职工号from职工例4-4:查询哪些仓库中有工资多于1210的职工selectdistinct仓库号from职工where工资>1210例4-5:列出在仓库“WH1”或“WH2”,且工资少于1250元的职工号select职工号from职工;where工资<1250and(仓库号="WH1"or仓库号="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….where…
[not]in|[not]exists|<比较运算符>|[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….where…
[not]in|[not]exists|<比较运算符>|[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几个特殊运算符①[not]
between<上界表达式>
and
<下界表达式>
:
表示[不]在上下界之间(包括上下界)。②[not]
like<字符表达式>:表示[不]与…匹配。③is
[not]
null:查询某个字段的值是否为空值例4-14:列出工资在1220到1240之间的职工信息。例4-16:列出供应商表中供应商名为“..公司”的供应商信息。select*from职工where工资between1220and1240这是一个字符串匹配的查询,就可以用like运算符,like后的表达式中可以使用下面两个通配符:①%:可以代表任意长度的字符串;②_
:可以代表任意一个字符。select*from供应商
where供应商名
like"%公司"例4-15:列出订单总金额为null的职工号和订单号。select职工号,订购单号
from订购单where总金额isnull4.2.5排序在SQL中,select的查询结果是按照表记录的物理顺序给出的,当需要对查询结果排序时,可以使用orderby子句对查询结果按照一个或多个字段排序。orderby<字段名1>[asc|desc][,<字段名2>[asc|desc]…]注意:orderby子句必须放在其他子句之后,且不可以在子查询中使用例4-17:先按仓库号再按工资升序输出全部职工信息。select*from职工orderby
仓库号,工资当使用orderby子句对查询结果排序时,还可以在select后面使用top
子句只显示前几项纪录。格式为:topn[percent]说明:①不使用[percent]选项时,n是1至32767之间的整数,表示前n项;②使用[percent]选项时,n是0.01至99.99之间的实数,表示前n%项;③top只有与orderby同时使用才有效。例4-18:显示工资最高的3位职工的信息。例4-19:显示工资最低的那30%职工的信息。select*top3from职工orderby工资descselect*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<字段名1>[,字段名2…]having<条件>说明: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】intoprinter[prompt]查询结果输出到打印机select*from职工intofiletxttestorderby工资asc第4章关系数据库标准语言SQL4.1SQL概述4.2查询功能4.3操作功能4.4定义功能4.3.1插入数据
Insert
into
表名(字段名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=
表达式2…
where<条件>例:给仓库WH1的职工的工资增加10%,命令为:update
职工set
工资=工资*?(1+10%)(1+0.1)SQL更新数据的命令是:4.3.3删除数据deletefrom
表名where
条件注意:当没有where子句时,将表中的所有记录。逻辑删除例:将student表中所有男生的记录都逻辑删除Deletefromstudentwhere
性别="男"SQL删除数据的命令是:第4章关系数据库标准语言SQL4.1SQL概述4.2查询功能4.3操作功能4.4定义功能4.4.1新建表createtable|dbf表名1[free](
字段名1
字段类型(宽度,小数位数)[null|notnull][check<条件1>[error<文本1>]][default<表达式1>][primarykey|unique][references<表名2>][tag<索引标识1>][,字段名2字段类型(宽度,小数位数)…][,…])free用在数据库打开的情况下指明创建自由表设置字段的有效性规则、错误提示、默认值primarykey子句指定当前字段为主索引关键字;unique子句指定当前字段为候选索引关键字(注意不是惟一索引)references<表名>指定的表作为新建表的永久性父表;tag<标识>指明父表中的关联字段,若缺省该参数,则默认父表的主索引字段作为关联字段SQL新建表的命令是:例:在学生.dbc中建立一个stuinfo表,所包含的字段及类型、宽度如下表,其中性别字段的取值只能取“男”或“女”两个值,且默认值为“男”。
opendatabase学生createtable
stuinfo;
(
学号C(13),姓名C(10),性别C(2);
default"男"check(性别="男"or性别="女"),;
出生日期D,班级C(12),联系方式C(20);
)字段名字段类型字段宽度学号字符型13姓名字符型10性别字符型2出生日期日期型班级字符型12联系方式字符型20<字段类型>:用字母代号表示的字段的数据类型,字段类型与代号对照表如下:字段类型代号字段宽度字符型C1-254数值型N整型I4浮点型F双精度型B8货币型Y8日期型D8日期时间型T8逻辑型L1备注型M4通用型G44.4.2删除表 d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 胃癌患者春节护理常规
- 自然教育大树小班课程体系构建
- 糖尿病足坏疽个案护理
- 医美咨询师接诊技巧培训
- 学习方式训练培训
- 施工测量培训课件
- 餐饮店加盟权转让及接手合同范本
- 邴蕾离婚协议书全面考量子女教育与财产分配方案
- 桉树种植基地土地流转与种植合同
- 股票市场动态分析及投资策略咨询协议
- 天津工业大学2023级本科学生转专业名额及条件等相关情况一
- 新护士五年规范化培训手册
- 医学免疫学和病原生物学理论知识考核试题及答案
- 胜保养操作手册江铃驭
- 疫苗及其制备技术课件
- 阿里巴巴公司价值观实施细则
- 安全防范系统设计方案
- 人教版PEP初中八年级下册英语全册课件
- 《人卫版第九版内科学心力衰竭》课件PPT
- 中国监察制度史
- 竣工验收证书(模板)
评论
0/150
提交评论