第六章 数据库层次结构
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第2节 数据查询
一、SELECT语句的语法 SELECT命令的常用格式如下: SELECT-FROM-WHEREBYBYSELECT-FROM-WHERE-GROUP BY-ORDER BY-INTO SELECT子句: SELECT子句:说明要查询的数据,对应于【查询设计器】中的 子句 【字段】选项卡。 FROM 子句 :说明要查询的数据来自哪个表或哪些表,对应于 【查询设计器】中【添加表或视图】操作。 WHERE 子句 :说明查询条件,对应于【查询设计器】中的【筛 选】选项卡。 GROUP BY 子句 :用于对查询结果进行分组,对应于【查询设计 器】中的【分组】选项卡。
第2节 数据查询
【例6-15】查找信息系欠费金额最高的学生学号、姓名及所 欠金额。 命令: select 学生.学号,姓名,欠交金额 from 学生,交费; where 学生.学号=交费.学号 AND 系="信息系" AND 欠交 金额=; (select MAX(欠交金额)from 学生,交费where 学生.学号=交 费.学号 AND 系="信息系") MIN()函数 【例6-16】查找学费最低的专业。 命令:select 专业简称 ,学费 from 专业 where 学费=(select MIN(学费) from 专业)
第2节 数据查询
六、分组与计算查询
有时需要对查询结果进行分类统计,这就要用到GROUP BY 子 句。 GROUP BY子句可对数据进行分组,若要限定分组的条件, 则需启用HAVING子句。 【例6-17】统计各系欠费学生的人数,并按欠费人数降序排序。 命令:select 系 AS 系部名称, COUNT(*) AS 欠费人数 from 学生 group by 系; where 学号 IN (select 学号 from 交费 where 欠交金额 >0) ; ORDER BY 欠费人数
第2节 数据查询
SUM()函数 【例6-12】计算学生所欠的总金额数。 命令:select sum(欠交金额) from 交费 AVG()函数 【例6-13】计算信息系和经贸系学生所欠的金额数。 命令:select sum(欠交金额) from 交费 where 学号 IN; (select 学号 from 学生 where 系="信息系" OR 系=" 经贸系") 【例6-14】计算人均欠费金额。 命令:select AVG(欠交金额) from 交费 MAX()函数
本章内容
第1节 第2节 第3节 第4节 SQL 概述 数据查询 数据操纵 数据定义
第1节 SQL 概述
一、SQL语言简介 SQL(Structured Query Language)--结构化查询语言, 其主要功能是同各种数据库建立联系,进行沟通。目前,绝大 多数流行的关系型数据库管理系统,如Oracle,Sybase, Microsoft SQL Server,Access等都采用了SQL语言标准。 Server Access SQL 二、SQL语言的特点: (1)是一种一体化的语言,包括数据定义、数据查询、数 据操纵和数据控制功能。 (2)是一种高度非过程化的语言; SQL语言非常简洁 。 (3) SQL既是自含式语言,又是嵌入式语言,可以用同一 种语法结构提供两种使用方式。 。 (4) SQL语言采用面向集合的操作方式;核心是查询。
这个检索命令由两个select子句构成即内层查询子查询和外层查询子查询查到的结果是欠费学生的学号外层查询在利用这个学号在学生表中查找欠费学生所在的系因为查询的结果有重复而我们只对欠费的系感兴趣所以用distinct关键词去掉了重复值
国家级“十一五”规划教材配套电子教案
第6章
关系数据库标准语言SQL 关系数据库标准语言SQL
第2节 数据查询
七、排序
为了方便浏览,常常要把查询结果按一定的标准排序,在 SQL语言中,可以用ORDER BY子句按一列或多列对查询结果 进行升序(ASC)或降序(DESC)排列。
【例6-19】按学费从低到高的顺序列出全部专业信息。 命令:select * from 专业 order by 学费 说明:如省略ASC|DESC关键字,查询结果默认按升序 (ASC)进行排列
第2节 数据查询
一、SELECT语句的语法(续) 查询结果输出选项 :来指定查询结果的输出去向,对应于 【查询设计器】中【查询去向】对话框。 查询结果显示选项 :[ALL|DISTINCT] [TOP n[PERCENT]]关键 词用来控制查询结果的显示情况,对应于【查询设计器】中的 【杂项】选项卡。
第2节 数据查询
八、查询结果的显示和输出
【例6-23】列出84年以后出生的学生信息,只显示其中50%的 记录即可。 命令:select * TOP 50 percent from 学生; where 出生日期>{^1983-12-31}order by 出生日期 2.将查询结果存放到永久表文件(DBF|TABLE)中 在SELECT语句中使用短语 INTO DBF|TABLE <表名> ,可将 查询结果存放到永久表。例如:将【例6-21】的查询结果按降序 排列存放到“各系学生欠费金额一览表”中,命令为: select 学生.学号,姓名,系,班级,欠交金额 from 学生,交费; where 学生.学号=交费.学号 AND 学生.学号 IN; (select 学号 from 交费 where 欠交金额>0); order by 系,欠交金额 DESC; into table 各系学生欠费金额一览表
第2节 数据查询
三、简单的联接查询 【例6-5】检索欠费学生的基本情况和所欠金额。 分析:查询需要输出的信息:学生情况和欠费金额,分别来 源于学生表和交费表,分析得知两表之间存在一对一的联系, 可通过公共字段“学号”建立。这样的查询一般用联接查询来 实现。 命令:select 学生.* ,欠交金额 from 学生,交费; where 学生.学号=交费.学号 AND 欠交金额>0 说明:“学生.*” 代表学生表中所有的字段;当from 之后有 多个表时,含有公共字段的表达式,必须用表名前缀直接指明 公共字段所属的表,如“学生.学号=交费.学号”,而非公共字 段则可省略表前缀,如“欠交金额”。
第2节 数据查询
六、分组与计算查询
【例6-18】列出欠费学生人数超过2人的系部。 命令:select 系 AS 系部名称, COUNT(*) AS 人数 from 学生; group by 系 having (COUNT(*)>2) ; where 学号 IN; (select 学号 from 交费 where 欠交金额>0) 说明:HAVING子句总是跟在GROUP BY子句之后,不可以单 独使用,也不可以在其后使用子查询
第2节 数据查询
二、简单查询
【例6-4】检索出经贸系和信息系贫困学生的学号、姓名和所在班级。 命令:select 学号,姓名,班级 from 学生; where 家庭情况="贫困" AND (系="经贸系" OR 系="信息系") 说明:这个SQL语句较长,分为两行来写,“;”为续行符;这 个查询的条件很简单,但初学者很容易出错,往往把查询要求 中的“和”理解成逻辑运算符中的“AND”,最后的查询条件 写为“where 系="信息系" AND 系="经贸系"”,从而查不到符 合条件的记录。
第2节 数据查询
第2节 数据查询
二、简单查询 【例6-1】检索公寓表中的所有记录。 命令:select * from 公寓 说明:通配符“*”来设定返回表中的所有 列 【例6-2】从学生表中检索所有系。 命令1:select 系 from 学生 命令2:select DISTINCT 系 AS 系部名称 from 学生 说明:DISTINCT关键词的作用是去掉重复值,AS指定了输 出字段的标题。 【例6-3】检索学费不低于4000元的专业简称及其收费情况。 命令:select 专业简称,学费 from 专业 where 学费>=4000
第2节 数据查询
四、嵌套查询
【例6-8】检索和会计学专业收费相同的专业。 命令:select 专业简称 from 专业; where 专业简称 !="会本" AND 学费=; (select 学费 from 专业 where 专业简称="会本") 说明:命令用专业简称 !=“会本” 条件来去掉“会计学”专业 本身
第2节 数据查询
五、简单的计算查询
【例6-11】计算所有学生的人数。 命令1:select COUNT(*) from 学生 命令2: select COUNT(*) AS 总人数 from 学生 说明:第二条命令修改了查询结果的列名,这样方便于对查 询结果的浏览。
COUNT()函数的使用要点: 如要对表中记录个数进行计数,一般用COUNT(*), 而对其他字段的统计则用COUNT(DISTINCT 列名)。
第2节 数据查询
五、简单的计算查询
在查询中,还可以加入运算符,如算术运算符和函数运算 符,对原始表中的数据进行计算。常用的统计函数有:计数 函数COUNT()、求和函数SUM()、求平均值函数AVG ()、求最大值函数MAX()、求最小值函数MIN()。 【例6-9】输出每个学生的学号,姓名和年龄。 分析:表中并没有年龄字段,需要根据出生日期计算 每个人的年龄。 命令:select 学号,姓名,YEAR(DATE())-YEAR(出生日 期) AS 年龄 from 学生 【例6-10】算出生源所在地的数目。 命令:select COUNT(DISTINCT 籍贯) from 学生
第2节 数据查询
四、嵌套查询 所谓嵌套查询就是,查询所输出的信息来自一个表,而 查询的条件却涉及到一个或多个表ect DISTINCT 系 from 学生 where 学号 IN; (select 学号 from 交费 where 欠交金额>0) 说明:这个检索命令由两个SELECT子句构成,即内层查 询(子查询)和外层查询,子查询查到的结果是欠费学生的学 号,外层查询在利用这个学号在学生表中查找欠费学生所在的 系,因为查询的结果有重复,而我们只对欠费的系感兴趣,所 以,用DISTINCT关键词去掉了重复值。 注意:子查询用一对圆括号括起来,且子查询不能嵌套。
第2节 数据查询
三、简单的联接查询
【例6-6】检索每个学生所在专业与应交的学费,所住公寓与住 宿费的情况。 命令:select 学号,姓名,专业.专业简称,学费,公寓.公寓类别,住宿 费; from 学生,专业,公寓; where 学生.专业=专业.专业简称 AND 学生.公寓类别=公 寓.公寓类别
第2节 数据查询
【例6-20】输出学生的学号,姓名,性别,籍贯,班级信息,查 询结果按籍贯排 序,籍贯相同的再按性别排序。 命令:select 学号,姓名,性别,班级,籍贯 from 学生 order by 5,3 说明:排序关键字可以是一个字段或字段表达式,也可以是一个 数值表达式,这个数值是表或查询结果中列的位置,其中最左边的 列的编号为1。 【例6-21】按系列出欠费学生的学号,姓名,系,班级,欠 交金额,同一个系的按欠交金额降序排列。 命令:select 学生.学号,姓名,系,班级,欠交金额from 学生,交 费where 学生.学号=交费.学号 AND 学生.学号 IN; (select 学号 from 交费 where 欠交金额>0); order by 系,欠交金额 DESC
第2节 数据查询
八、查询结果的显示和输出
1.显示部分查询结果(TOP n[Percent]) 使用TOP n [PERCENT]短语限制返回的记录行数,TOP n说明 返回n行,而TOP n PERCENT时,说明n是一个百分数,指定返回 的行数等于总行数的百分之几。 【例6-22】显示学费最高的前5个专业的信息。 命令1: select * TOP 5 from 专业 order by 学费 DESC,专业简称 说明:如果排序关键字存在重复值,则TOP关键字将失效,记 录并没有按指定的数目显示。为了避免这种情况出现,可以在其后 加入一个没有重复值的主键字段。