自考数据库系统原理(第5章)(代码:4735)练习题5

更新时间:2023-11-04 20:38:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

练习5

对于关系代数和关系演算中的投影,选择和笛卡儿积导出的连接操作。 πA1,A2,?,An(σF(R1×?×Rm))

这里R1×?×Rm为关系,F是公式,A1,A2,?,An为属性。

针对上述表达式,SQL为此设计了SELECT—FROM—WHERE查询块来完成。 SELECT A1,A2,?,An

FROM R1×?×Rm WHERE F

SQL支持关系数据库的三级模式结构,其中外模式对应于视图,模式对应于基本表,内模式对应于存基本表和视图都是表。基本表实际上是存储在数据库中的表。视图是虚表,它是从基本表或其它视图储文件。

中导出的表。数据库中只存放视图的定义而不存放视图的数据,这些数据仍存放在导出视图的基本表中。

数据查询是数据库的核心操作。SQL的数据查询仅有一条SELECT语句,其功能极强。 SELECT [ALL|DISTINCT]<目标列表达式>[,<目标列表达式>]?

FROM <基本表名或视图名>[,<基本表名或视图名>]? [WHERE <行条件表达式>]

[GROUP BY <列名1>[HAVING <组条件表达式>]] [ORDER BY <列名2>[ASC|DESC]]

整个语句的执行过程如下: 1) 2) 3) 4) 5) ? ? ? ? ? ?

读取FROM子句中的基本表、视图的数据,执行迪卡儿积操作。 选取满足WHERE子句中给出的条件表达式的元祖。

按GROUP子句中指定列的值分组,同时提取满足HAVING子句中组条件表达式的那些组。 按SELECT子句中给出的列名或列表达式求值输出。

ORDER子句对输出的目标表进行排序,按附加说明ASC升序排序,或按DESC降序排序。 SELECT子句提供要查询的列,目标列表达式可以是表中所定义的列,也可以是若干列运算的算术表达式,或者是字符串常数、函数等; FROM子句指定要查询的基本表或视图;

WHERE子句称为“行条件子句”,其中的行条件表达式决定查询的行; GROUP BY子句称为“分组子句”,其中的列名决定所分的组元祖; HAVING子句称为“组条件子句”,其中的组条件表达式决定查询的组; ORDER BY子句称为“排序子句”

查询语句共有六个子句

5.1 名词解释

1.基本表(P116中)

基本表是实际存储在数据库中的表,对应一个关系。 2.视图(P116中)

视图是从若干基本表和(或)其他视图构造出来的表。 3.实表(P116中下)

基本表被称为“实表”,它是实际存放在数据库中的表。 4.虚表(P138中下)

视图被称为“虚表”,创建一个视图时,只把视图的定义存储在数据词典中,而不存储视图所对应的5.相关子查询(P124中上)

在嵌套查询中出现的符合以下特征的子查询:子查询中查询条件依赖于外层查询中的某个值, 所以6.单表查询

单表查询基于单表,FROM子句后只需指定一个表名。单表查询即查询单表中若干列或若干行。 7.连接查询(P123中下)

连接查询是一种涉及多表的查询,和单表查询的区别是: ? ? ?

连接查询中的FROM子句后要指定查询涉及的多个表名; WHERE子句中必须指定多表两两相连的连接条件;

在引用表中同名列时,要在列名前加表名,形如“表名.列名”,以示区别。

数据。在用户使用视图时才去求对应的数据。因此,视图被称为“虚表”。

子查询的处理不只一次,要反复求值,以供外层查询使用。

查询时先对表进行笛卡尔积操作,然后再做等值联接、选择、投影等操作。 联接查询的效率比嵌套查询低。

8.嵌套查询(P123下)

嵌套查询是一个SELECT—FROM—WHERE查询块嵌入在另一个SELECT—FROM—WHERE查询块WHERE子句

中的查询。这也是涉及多表的查询,其中外层查询块称为父查询,内层查询块称为子查询。子查询中还可以嵌套其它子查询,即允许多层嵌套查询,但子查询中不允许使用ORDER BY子句。

在外层WHERE子句中嵌有一个SELECT语句,SQL允许多层嵌套。这里嵌套的子查询在外层查询处理之前执行。

导出表的使用:

SQL2允许在FROM子句中使用子查询。如果在FROM子句中使用了子查询,那么要给子查询的结构起个9.导出表(P116中)

表有三种类型:基本表、视图和导出表。基本表是实际存储在数据库中的表,视图是由若干基本表或SELECT S#,SNAME

FROM S

WHERE S# IN (SELECT S#

FROM SC

WHERE C#=‘C2’);

即先在基本表SC中求出选修课程C2的S#值,然后再在表S中据S#值求出SNAME值。 SELECT S#,SNAME

FROM S

WHERE S# IN (SELECT S#

FROM SC

WHERE C#=‘C2’);

其他视图构成的表的定义,而导出表是执行了查询时产生的表。

表名和相应的列名。

【例5.20】在基本表SC中检索平均成绩最高的学号。

方法一:(使用嵌套) SELECT S#

FROM SC

GROUP BY S#

HAVING AVG(SCORE)>=ALL(SELECT AVG(SCORE)

FROM SC GROUP BY S#);

5.2 试叙述SELECT语句的关系代数和元祖演算特点

1.SELECT语句的来历

在关系代数中最常用的式子是下列表达式:

πA1,A2,?,An(σF(R1×?×Rm))

这里R1、?、Rm为关系,F是公式,A1、?、An为属性。

针对上述表达式,SQL为此设计了SELECT—FROM—WHERE句型:

SELECT A1,A2,?,An FROM R1×?×Rm

11.交互式SQL(P140上)

在终端交互方式下使用的SQL语言称为交互式SQL。 12.嵌入式SQL(P140上)

嵌入在主语言的程序中使用的SQL语言称为嵌入式SQL。 13.游标(P141下)

游标是与某一查询结果相联系的符号名,用于把集合操作转换成单记录处理方式。 14.卷游标(P144下)

为了克服游标在推进时不能返回的不便,SQL2提供了卷游标技术。 卷游标在推进时不但能沿查询结WITH RESULT(AVG_SCORE)AS SELECT AVG(SCORE) FROM SC GROUP BY S# SELECT S#

FROM SC, RESULT

GROUP BY S# HAVING AVG(SCORE)>=ALL(RESULT. AVG_SCORE) 临时视图的使用

临时视图必须用WITH子句定义一个临时视图(子查询),置于SELECT语句的开始处。而临时视图本方式:

【例5.21】例5.20还可以使用临时视图的形式。也就是把子查询定义成临时视图(RESULT),置于方法二:(使用导出表)

把方法一中的子查询定义为导出表(命名为RESULT),移到外层查询的FROM子句中。 SELECT SC.S#

10.临时视图(P116中)

在SQL执行时临时定义的视图,当SQL执行结束后,该临时定义的视图被删除。

FROM SC,(SELECT AVG(SCORE) FROM SC GROUP BY S#) AS RESULT(AVG_SCORE) GROUP BY SC.S# HAVING AVG(AVG_SCORE)>=ALL(RESULT.AVG_SCORE)

身是用SELECT语句定义的。

SELECT语句的开始处,得如下形式:

果中元组顺序从头到尾一行行推进,也能一行行返回。

WHERE F

这个句型是从关系代数表达式演变来的,但WHERE子句中的条件表达式F要比关系代数中公式更灵活。 2.SELECT语句中出现的基本表名,应理解为基本表中的元组变量,而列名应理解为元组分量。 3.SELECT语句的语义有三种情况,下面以学生表S(S#,SNAME,AGE,SEX)为例说明。

第一种情况:SELECT语句中未使用分组子句,也未使用聚合操作,那么SELECT子句的语义是对查询

的结果执行投影操作。譬如:

SELECT S#,SNAME FROM S

WHERE SEX='M';

第二种情况:SELECT语句中未使用分组子句,但在SELECT子句中使用了聚合操作,此时SELECT子句的语义是对查询结果执行聚合操作。譬如:

SELECT COUNT(*),AVG(AGE) FROM S

WHERE SEX='M';

该语句是求男同学的人数和平均年龄。

第三种情况:SELECT语句使用了分组子句和聚合操作(有分组子句时必有聚合操作),此时SELECT子句的语义是对查询结果的每一分组去做聚合操作。譬如:

SELECT AGE,COUNT(*) FROM S WHERE SEX='M' GROUP BY AGE;

该语句是求男同学每一年龄的人数。

4.SELECT语句中使用分组子句的先决条件是要有聚合操作。但执行聚合操作不一定要用分组子句。譬如求男同学的人数,此时聚合值只有一个,因此不必分组。

但同一个聚合操作的值有多个时,必须使用分组子句。譬如求每一年龄的学生人数。此时聚合值有多个,与年龄有关,因此必须分组。

5.3 对于教学数据库的四个基本表

教师关系T(T#,TNAME,TITLE) 课程关系C(C#,CNAME,T#) 学生关系S(S#,SNAME,AGE,SEX) 选课关系SC(S#,C#,SCORE)

T# T1 T2 T3 T4 T5 T6

C# C1 Tname LI LIU WANG QIAN ZHAO QIAO Cname C语言 Title 讲师 教授 教授 教授 讲师 副教授 T# T1 C2 C3 C4 C5 C6

S# S1 S2 S3 S4 S5 S6 S7 S8 S9 S10 S11 S12 S13 S14 S15 S16 S17 S18 S19 S20 S21 S22 S23 S24 S25 S26 S27 S28 S29 S30 S31 S32 S33 S34 S35

C++ 数据结构 操作系统 数据库系统 英语 Sname LIUYANFE MAYANG QIUYU WANGPENG WUTIAN ZHAOXI XUNJIE CHAOYU CHENBAO GAORONG HANHAN QULING WENBIN WANGSENG XUBIN WANGYAN YANGXIAO YANHUA DONGPING CAIJIE GUOWEI LIUXIN MAOWEN ZHOUYAN SHIMING WANGHAN CAIYUAN CHENXIAO GUOJIE HUYUE LIUBAO LIANGHUI WANGJIE ZHOUWEI HUJIE Age 16 17 16 16 16 19 18 17 19 18 18 17 16 16 16 17 18 19 16 18 19 18 17 16 18 18 16 17 20 21 19 17 18 17 16 T2 T3 T4 T5 T6 Sex F M M M M F M F M M M F M M M F M M M M M F F M F M F M M M M F F M M

本文来源:https://www.bwwdw.com/article/zya2.html

Top