数据库原理及应用
(第三版)
钱雪忠 等主编
北京邮电大学出版社
2010.05
一、选择题
1、A
2、A
3、A
4、A
5、B
6、C
7、C
8、A
9、A
10、C
1、( )是位于用户与操作系统之间的一层数据管理软件。数据库在建立、使用和维护时由其统一管理、统一控制。
A.DBMS B.DB C.DBS D.DBA
2、文字、图形、图像、声音、学生的档案记录、货物的运输情况等,这些都是( )
A.DATA B.DBS C.DB D.其他
3、目前( )数据库系统已逐渐淘汰了网状数据库和层次数据库,成为当今最为流行的商用数据库系统。
A.关系 B.面向对象 C.分布 D.对象-关系
4、( )是刻画一个数据模型性质最重要的方面。因此在数据库系统中,人们通常按它的类型来命名数据模型。
A.数据结构 B.数据操纵 C.完整性约束 D.数据联系
5、( )属于信息世界的模型,实际上是现实世界到机器世界的一个中间层次。
A.数据模型 B.概念模型 C.非关系模型 D.关系模型
6、当数据库的( )改变了,由数据库管理员对( )映象作相应改变,可以使( )保持不变,从而保证了数据的物理独立性。
(1)模式 (2) 存储结构 (3)外模式/模式 (4)用户模式 (5)模式/内模式
A.(1)和(3)和(4) B.(1)和(5)和(3)
C.(2)和(5)和(1) D.(1)和(2)和(4)
7、数据库的三级体系结构即子模式、模式与内模式是对( )的三个抽象级别。
A.信息世界 B.数据库系统 C.数据 D.数据库管理系统
8、英文缩写DBA代表( )
A.数据库管理员 B.数据库管理系统 C.数据定义语言 D.数据操纵语言
9、模式和内模式( )。
A.只能各有一个 B.最多只能有一个 C.至少两个 D.可以有多个
10、在数据库中存储的是( )。
A.数据 B.信息 C.数据和数据之间的联系 D.数据模型的定义
二、填空题
1、数据库就是长期储存在计算机内_有组织的__、_可共享__的数据集合。
2、数据管理技术已经历了人工管理阶段、_文件系统阶段_和_数据库系统阶段_三个发展阶段。
3、数据模型通常都是由_数据结构_、_数据操作_和_数据完整性约束_三个要素组成。
4、数据库系统的主要特点:_数据整体结构化_、数据冗余度小、具有较高的数据程序独立性、具有统一的数据控制功能等。
5、用二维表结构表示实体以及实体间联系的数据模型称为__关系__数据模型。
6、在数据库的三级模式体系结构中,外模式与模式之间的映象,实现了数据库的__ _____数据逻辑__独立性。
7、数据库系统是以_数据库或数据库中的数据___为中心的系统。
8、E-R图表示的概念模型比_DBMS支持的数据模型_更一般、更抽象、更接近现实世界。
9、外模式,亦称为子模式或用户模式,是_局部用户__能够看到和使用的局部数据的逻辑结构和特征的描述。
10、数据库系统的软件主要包括支持_DBMS_运行的操作系统以及__DBMS_本身。
三、简答题
1、简述计算机数据管理技术发展的三个阶段。
解:
数据管理技术已经历了人工管理、文件系统及数据库系统三个发展阶段。这三个阶段的特点及其比较如下表1.1所示。
表1.1 数据管理三个阶段的比较
比较项目 | 人工管理阶段 | 文件系统阶段 | 数据库系统阶段 | |
| 应用背景 | 科学计算 | 科学计算、管理 | 大规模管理 |
背
| 硬件背景 | 无直接存取存储设备 | 磁盘、磁鼓 | 大容量磁盘 |
景 | 软件背景 | 没有操作系统 | 有文件系统 | 有数据库管理系统 |
| 处理方式 | 批处理 | 联机实时处理、批处理 | 联机实时处理、分布处理、批处理 |
| 数据的管理者 | 用户(程序员) | 文件系统 | 数据库管理系统 |
| 数据面向的对象 | 某一应用程序 | 某一应用 | 现实世界 |
特
| 数据的共享程度 | 无共享,冗余度极大 | 共享性差,冗余度大 | 共享性高,冗余度小 |
数据的独立性 | 不独立,完全依赖于程序 | 独立性差 | 具有高度的物理独立性和一定的逻辑独立性 | |
点
| 数据的结构化 | 无结构 | 记录内有结构、整体无结构 | 整体结构化,用数据模型描述 |
| 数据控制能力 | 应用程序自己控制 | 应用程序自己控制 | 由数据库管理系统提供数据安全性、完整性、并发控制和恢复能力 |
(1)人工管理阶段:20世纪50年代中期以前,计算机主要用于科学计算。硬件设施方面:外存只有纸带、卡片、磁带,没有磁盘等直接存取设备;软件方面:没有操作系统和管理数据的软件;数据处理方式是批处理。人工管理数据具有以下几个特点:1)数据不保存;2)应用程序管理数据;3)数据不共享;4)数据不具有独立性。
(2)文件系统阶段:20世纪50年代后期到60年代中期,这时计算机已大量用于数据的管理。硬件方面:有了磁盘、磁鼓等直接存取存储设备;软件方面:操作系统中已经有了专门的管理软件,一般称为文件系统;处理方式有批处理、联机实时处理。特点如下:1)数据长期保存;2)文件系统管理数据;3)数据共享性差,冗余度大;4)数据独立性差;
(3)数据库系统阶段:20世纪60年代后期以来,计算机用于管理的规模更为庞大,数据量急剧增长,硬件已有大容量磁盘,硬件价格下降;软件则价格上升,使得编制、维护软件及应用程序成本相对增加;处理方式上,联机实时处理要求更多,分布处理也在考虑之中。介于这种情况,文件系统的数据管理满足不了应用的需求,为解决共享数据的需求,随之从文件系统中分离出了专门软件系统——数据库管理系统,用来统一管理数据。
数据库系统阶段具有如下优于文件系统的特点:1)数据结构化;2)数据的共享性高,冗余度低,易扩充;3)数据独立性高;4)数据由DBMS统一管理和控制。
2、常用的三种数据模型的数据结构各有什么特点?
解:
常用的三种数据模型是层次模型、网状模型和关系模型。它们的数据结构及特点分别介绍如下:
1)层次模型的数据结构——树型结构
在数据库中,对满足以下两个条件的基本层次联系的集合称为层次模型。
(1)有且仅有一个节点无双亲,这个节点称为“根节点”。
(2)其他节点有且仅有一个双亲。
所谓基本层次联系是指两个记录类型以及它们之间的一对多的联系。
在层次模型中,每个结点表示一个记录类型,记录之间的联系用结点之间的连线表示,这种联系是父子之间的一对多的联系。这就使得数据库系统只能处理一对多的实体联系。
每个记录类型可包含若干个字段,这里,记录类型描述的是实体,字段描述的是实体的属性。各个记录类型及其字段都必须命名,并且名称要求唯一。每个记录类型可以定义一个排序字段,也称为码字段,如果定义该排序字段的值是唯一的,则它能唯一标识一个记录值。若用图来表示,层次模型是一棵倒立的树。节点层次(Level)从根开始定义,根为第一层,根的子女称为第二层,根称为其子女的双亲,同一双亲的子女称为兄弟。
2)网状模型的数据结构——网状结构图
在数据库中,把满足以下两个条件的基本层次联系集合称为网状模型:
(1)允许一个以上的结点无双亲;
(2)一个结点可以有多于一个的双亲。
网状模型是一种比层次模型更具有普遍性的结构,它去掉了层次模型的两个限制,允许多个结点没有双亲结点,允许结点有多个双亲结点,此外它还允许两个结点之间有多种联系。因此网状模型可以更直接地去描述现实世界。而层次模型实际上是网状模型的一个特例。与层次模型一样,网状模型中的每个结点表示一个记录类型,每个记录类型可包含若干个字段,结点间的连线表示记录类型之间的一对多的父子联系。
从定义可看出,层次模型中子女结点与双亲结点的联系是唯一的,而在网状模型中这种联系可以不唯一的。
3)关系模型——二维表
关系模型与层次模型和网状模型不同,关系模型中数据的逻辑结构是一张二维表,它由行和列组成。每一行称为一个元组,每一列称为一个属性(或字段)。下面是关系模型中的涉及到的相关的术语:
关系:一个关系对应一张二维表,如一张教师登记表。
元组:二维表中的一行称为一个元组。
属性:二维表中的一列称为一个属性,对应每一个属性的名字称为属性名。
主码:如果二维表中的某个属性或是属性组可以唯一确定一个元组,则称为主码,也称为关系键。
域:属性的取值范围称为域,如人的年龄一般在1-120岁之间,大学生的年龄属性的域是14-38,性别的域是男和女等。
分量:元组中的一个属性值。例如,教师号对应的值001、002、003都是分量。
关系模式:表现为关系名和属性的集合,是对关系的具体描述。一般表示为:
关系名(属性1,属性2,…,属性N)。如教师关系模式为:教师(教师号,姓名,年龄,职称)
在关系模型中,实体以及实体间的联系都是用关系来表示。
关系模型要求关系必须是规范化的,即要求关系必须满足一定规范条件,这些规范条件中最基本的一条就是,关系的每一个分量必须是一个不可分的数据项,也就是说,不允许表中还有子表或子列。
3、试述数据库系统的特点。
解:
数据库系统阶段具有如下优于文件系统的主要特点:1)数据结构化;2)数据的共享性高,冗余度低,易扩充;3)数据独立性高;4)数据由DBMS统一管理和控制。
1)数据结构化:数据库系统实现整体数据的结构化,是数据库的主要特征之一,也是数据库系统与文件系统的本质区别。在数据库系统中,数据不再针对某一应用,而是面向全组织,是整体结构化的。不仅数据是结构化的,而且存取数据的方式也是很灵活的,可以存取数据库中的某一个数据项(或字段)、一组数据项、一个记录或是一组记录。
2)数据的共享性高,冗余度低,易扩充:数据库系统从整体角度看待和描述数据,数据不再面向某个应用而是面向整个系统,因此数据可以被多个用户、多个应用共享使用。数据共享可以大大的减少数据冗余,节约存储空间。数据共享还能够避免数据之间的不相容性与不一致性。由于数据面向整个系统,是有结构的数据,不仅可以被多个应用共享使用,而且容易增加新的应用,这就使得数据系统弹性大,易于扩充,可以适应各种用户的要求。可以取整体数据的各种子集用于不同的应用系统,当应用需求改变或增加时,只要重新选取不同的子集或加上一部分数据便可以满足新的需求。
3)数据独立性高:数据独立性包括了数据的物理独立性和数据的逻辑独立性两方面。
物理独立性是指用户的应用程序与存储在磁盘上的数据库中数据是相互独立的。也就是说,数据在磁盘上的数据库中怎样存储是由DBMS管理的,用户程序不需要了解,应用程序要处理的只是数据的逻辑结构,这样当数据的物理存储改变时,应用程序不用改变。
逻辑独立性是指用户的应用程序与数据库的整体逻辑结构是相互独立的,也就是说,数据的整体逻辑结构改变了,用户程序也可以不需修改的。数据独立性是由DBMS的三级模式结构与二级映象功能来保证的。
4)数据由DBMS统一管理和控制:DBMS为保证共享数据的安全、正确、可靠等提供以下几方面的数据控制功能:(1)数据的安全性控制;(2)数据的完整性约束;(3)并发控制;(4)数据库恢复。
4、试述数据模型的概念、数据模型的作用和数据模型的三要素。
解:
1)数据模型的概念:数据模型是模型中的一种,是现实世界数据特征的抽象,它描述了系统的三个方面:静态特性、动态特性和完整性约束条件。
2)数据模型的作用:数据模型应满足三方面的要求:一是能比较真实地模拟现实世界;二是容易为人所理解;三是便于在计算机上实现。
不同的数据模型实际上是提供给我们模型化数据和信息的不同工具。根据模型应用的不同目的,可以将这些模型粗分为两类,他们分属于两个不同的层次。
第一类模型是概念模型,也称信息模型,它是按用户的观点来对数据和信息建模的,主要用于数据库设计。
另一类模型是数据模型,主要包括层次模型、网状模型、关系模型、面向对象模型等,它是按计算机系统对数据建模,主要用于在DBMS中对数据的存储、操纵、控制等的实现。
为了把现实世界中的具体事物抽象、组织为某一DBMS支持的数据模型,人们常常首先将现实世界抽象为信息世界,然后将信息世界转换(或数据化)为机器世界。也就是说,首先把现实世界中的客观对象抽象为某一种信息结构,这种信息结构并不依赖于具体的计算机系统,不是某一个DBMS支持的数据模型,而是概念级的模型;然后再把概念模型转换为计算机上某一DBMS支持的数据模型。
数据模型是数据库系统的核心和基础,各种机器上实现的DBMS软件都是基于某种数据模型的。可以说没有数据模型就没有数据库及其系统,其重要性不言而喻。
3)数据模型的三要素:
数据模型一般由数据结构、数据操作和数据完整性约束三部分组成(俗称三要素),是严格定义的一组概念的集合。
(1)数据结构:数据结构用于描述系统的静态特性,是所研究的对象类型的集合。数据模型按其数据结构分为层次模型、网状模型、关系模型和面向对象模型。其所研究的对象是数据库的组成部分,它们包括两类,一类是与数据类型、内容、性质有关的对象,例如网状模型中的数据项、记录,关系模型中的域、属性、实体关系等;一类是与数据之间联系有关的对象,例如网状模型中的系型、关系模型中反映联系的关系等。
数据模型的三要素示意图
(2)数据操作:数据操作用于描述系统的动态特性,是指对数据库中各种对象及对象的实例允许执行的操作的集合,包括对象的创建、修改和删除,对对象实例的检索和更新(例如插入、删除和修改)两大类操作及其它有关的操作等。数据模型必须定义这些操作的确切含义、操作符号、操作规则(如优先级)以及实现操作的语言等。
(3)数据完整性约束:数据的完整性约束是一组完整性约束规则的集合。完整性约束规则是给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定符合数据模型的数据库状态以及状态的变化,以保证数据的正确、有效、相容。
数据模型的三要素紧密依赖相互作用形成一个整体(如图示意),如此才能全面正确地抽象、描述来反映现实世界数据的特征。
5、试述概念模型的作用。
解:
数据模型应满足三方面的要求:一是能比较真实地模拟现实世界;二是容易为人所理解;三是便于在计算机上实现。
概念模型,也称信息模型,它是按用户的观点来对数据和信息建模的,主要用于数据库设计。
为了把现实世界中的具体事物抽象、组织为某一DBMS支持的数据模型,人们常常首先将现实世界抽象为信息世界,然后将信息世界转换(或数据化)为机器世界。也就是说,首先把现实世界中的客观对象抽象为某一种信息结构,这种信息结构并不依赖于具体的计算机系统,不是某一个DBMS支持的数据模型,而是概念级的模型。
概念模型提供给我们从现实世界到信息世界模型化数据和信息手段与工具。若没有概念模型现实世界的问题很难转化到机器世界的数据库系统中来处理。
6、定义并理解概念模型中的以下术语:
实体、实体型、实体集、属性、码、实体联系图(E-R图)、三种联系类型
解:
(1)实体:实体是指客观存在并可以相互区别的事物。实体可以是具体的人、事、物。例如,一个学生,一位老师,一门课程,一个部门;也可以是抽象的概念或联系,把它看作为实体。例如,学生的选课,老师的授课等等都是实体。
(2)实体型:具有相同属性的实体必然具有共同的特征和性质。用实体名及其属性名集合组成的形式,称为实体型。例如,教师(教师号,姓名,职称,年龄)就是一个教师实体型。
(3)实体集:实体集是指同型实体的集合。例如,全体教师就是一个实体集。即教师实体集={'张三','李四',……}
(4)属性:属性是指实体所具有的某一特性。例如教师实体可以由教师号、姓名、年龄、职称等属性组成。
(5)码:码是指唯一标识实体的属性集。例如教师号在教师实体中就是码。
(6)联系:联系是指实体型与实体型之间、实体集内实体与实体之间以及组成实体的各属性间的关系。两个实体型之间的联系有以下三种:
1)一对一联系:如果实体集A中的每一个实体,至多有一个实体集B的实体与之对应。反之,实体集B中的每一个实体,也至多有一个实体集A的实体与之对应,则称实体集A与实体集B具有一对一联系,记作1:1。
例如,在学校里,一个系只有一个系主任,而一个系主任只在某一个系中任职,则系型与系主任型之间(或说系与系主任之间)具有一对一联系。
2)一对多联系:如果实体集A中的每一个实体,实体集B中的N个实体与之相对应,反之,如果实体集B中的每一个实体,实体集A中至多只有一个实体与之相对应,则称实体集A与实体集B具有一对多联系,记作1:N。
例如,一个系中有若干名教师,而每个教师只在一个系中任教,则系与教师之间具有一对多联系。
3)多对多联系:如果实体集A中的每一个实体,实体集B中有n个实体与之相对应,反之,如果实体集B中的每一个实体,实体集A也有m(m≥0)个实体与之相对应,则称实体集A与实体集B具有多对多的联系,记作m:n。
例如,一门课程同时有若干个教师讲授,而一个教师可以同时讲授多门课程,则课程与教师之间具有多对多联系。
单个或多个实体型之间也有类似于两个实体型之间的三种联系类型。具体略。
(7)实体联系图(E-R图)
实体联系图(E-R图)又称实体-联系方法。该方法用直观图形来描述现实世界抽象出的信息。E-R图提供了表示实体型、属性和联系的方法。
E-R图是体现实体型、属性和联系的之间关系的图形表示形式。具体表示方法为:
实体型:用矩形表示,矩形框内写明实体名。
属性:用椭圆表示,椭圆形内写明属性名。并用无向边将其与相应的实体连接起来。
联系:用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型(1:1、1:n或m:n)。
举例说明略。
7、学校有若干个系,每个系有若干班级和教研室,每个教研室有若干教师,每个教师只教一门课,每门课可由多个教师教;每个班有若干学生,每个学生选修若干课程,每门课程可由若干学生选修。请用E-R图画出该学校的概念模型,注明联系类型。
解:
8、每种工厂生产的产品由不同的零件组成,有的零件可用于不同的产品。这些零件由不同的原材料制成,不同的零件所用的材料可以相同。一个仓库存放多种产品,一种产品存放在一个仓库中。零件按所属的不同产品分别放在仓库中,原材料按照类别放在若干仓库中(不跨仓库存放)。请用E-R图画出此关于产品,零件,材料,仓库的概念模型,注明联系类型。
解:
9、分别给出一个层次、网状和关系模型的实例。
解:
1)层次模型的实例
图1.17给出了一个系的层次模型。
图1.17 一个层次模型的示例
图1.18是图1.17的具体化,成为一个教师-学生层次数据库。该层次数据库有四个记录型。记录型系是根结点,由系编号、系名、办公地三个字段组成。它有两个子女结点教研室和学生。记录型教研室是系的子女结点,同时又是教师的双亲结点,它是教研室编号、教研室名两个字段组成。记录类型学生由学号、姓名、年龄三个字段组成。记录教师由教师号、姓名、研究方向三个字段组成。学生与教师是叶结点,它们没有子女结点。由系到教研室、教研室到教师、系到学生均是一对多的联系。
图1.18 教师-学生数据库模型
图1.19是图1.18数据库模型的一个值。
图1.19 教师-学生数据库的一个值
2)网状模型的实例
下面以教师授课为例,教师授课数据库可包含三个记录:教师、课程和授课。
每个教师可以讲授多门课程,显然对教师记录中的一个值,授课记录中可以有多个值与之联系,而授课记录中的一个值,只能与教师记录中的一个值联系。教师与授课之间联系是一对多的联系联系名为T-TC。同样,课程与授课之间的联系也是一对多的联系,联系名为C-TC。图1.24为教师授课数据库的网状数据库模式。
图1.24 教师、课程、授课的网状数据库模式
教师授课数据库的实例如图1.25所示。
图1.25 教师/授课/课程的网状数据库实例
3)关系模型的实例
学号 SNO | 课程号 CNO | 成绩 SCORE |
200401 | C1 | 85 |
200401 | C2 | 92 |
200401 | C3 | 84 |
200402 | C2 | 94 |
200403 | C3 | 83 |
SC选课表
10、试述层次、网状和关系数据库的优缺点。
解:
1)层次模型的优缺点
层次模型的优点:
(1)层次模型本身比较简单。
(2)对于实体间联系是固定的,且预先定义好的应用系统,采用层次模型来实现,其性能较优。
(3)层次模型提供了良好的完整性支持。
层次模型的缺点主要有:
(1)现实世界中很多联系是非层次性的,如多对多联系,一个结点具有多个双亲等,层次模型表示这类联系的方法很笨拙,只能通过引入冗余数据或创建非自然的数据组织来解决。
(2)对插入和删除操作的限制太多,影响太大。
(3)查询子女结点必须通过双亲结点,缺乏快速定位机制。
(4)由于结构严密,层次命令趋于程序化。
2)网状模型的优缺点
网状模型的优点主要有:
(1)能够更为直接地描述现实世界,如一个结点可以有多个双亲。
(2)具有良好的性能,存取效率较高。
网状模型的缺点主要有:
(1)结构比较复杂,而且随着应用环境的扩大,数据库的结构就变得越来越复杂,不利于最终用户掌握。
(2)其DDL、DML语言复杂,用户不容易使用。
由于记录之间联系是通过存取路径实现的,应用程序在访问数据时必须选择适当的存取路径,因此,用户必须了解系统结构的细节,加重了编写程序的负担。
3)关系模型的优缺点
关系模型具有下列优点:
(1)关系模型与非关系模型不同,它有较强的数学理论基础。
(2)数据结构简单、清晰,用户易懂易用,不仅用关系描述实体,而且用关系描述实体间的联系。
(3)关系模型的存取路径对用户透明,从而具有更高的数据独立性、更好的安全保密性,也简化了程序员的工作和数据库开发和建立的工作。
关系模型具有查询效率不如非关系模型效率高的缺点。因此,为了提高性能,必须对用户的查询进行优化,增加了开发数据库管理系统的负担。
11、定义并理解关系模型中的以下术语:
关系、元组、属性、主码、域、分量、关系模式
解:
关系:一个关系对应一张二维表,如一张教师登记表称为教师关系。
元组:二维表中的一行称为一个元组。
属性:二维表中的一列称为一个属性,对应每一个属性的名字称为属性名。
主码:如果二维表中的某个属性或是属性组可以唯一确定一个元组,则称为主码,也称为关系键,如教师号,可以唯一确定一个教师,也就成为教师关系的主码。
域:属性的取值范围称为域,如人的年龄一般在1-120岁之间,大学生的年龄属性的域是14-38,性别的域是男和女等等。
分量:元组中的一个属性值。例如,教师号对应的值001、002、003都是分量。
关系模式:表现为关系名和属性的集合,是对关系的具体描述。一般表示为:
关系名(属性1,属性2,…,属性N)
例如教师关系可描述为:教师(教师号,姓名,年龄,职称)
12、数据库系统的三级模式结构是什么?为什么要采用这样的结构?
解:
1)从数据库管理系统内部系统结构看,数据库系统通常采用三级模式结构。
数据库系统的三级模式结构是指外模式、模式和内模式。如图1.28所示。
图1.28 数据库系统的三级模式结构
(1)外模式(External Schema):外模式也称子模式(SubSchema)或用户模式,是三级模式的最外层,它是数据库用户能够看到和使用的局部数据的逻辑结构和特征的描述。数据库管理系统(DBMS)提供子模式描述语言(子模式DDL)来定义子模式。
(2)模式(Schema):模式又称概念模式,也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图,是数据视图的全部。它是数据库系统模式结构的中间层,既不涉及数据的物理存储细节和硬件环境,也与具体的应用程序,与所使用的应用开发工具及高级程序设计语言等无关。
概念模式实际上是数据库数据在逻辑级上的视图。一个数据库只有一个模式。DBMS提供模式描述语言(模式DDL)来定义模式。
(3)内模式(Internal Schema):内模式也称为存储模式,一个数据库只有一个内模式。它是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式。DBMS提供内模式描述语言(内模式DDL)来严格地定义内模式。
为了能够在内部实现这三个抽象层次的联系和转换,数据库管理系统在这三级模式之间提供了两层映象:外模式/模式映象,模式/内模式映象。
2)数据库管理系统内部采用这样的结构是因为:
这种结构能较好地保证数据库系统的数据具有较高的逻辑独立性和物理独立性。数据库的二级映象保证了数据库外模式的稳定性,从而根本上保证了应用程序的稳定性,使得数据库系统具有较高的数据与程序的独立性。数据库的三级模式与二级映象使得数据的定义和描述可以从应用程序中分离出去。又由于数据的存取由DBMS管理,用户不必考虑存取路径等细节,从而简化了应用程序的编制,大大减少了应用程序的维护和修改。
13、数据独立性包括哪两个方面,含义分别是什么?
解:
数据独立性分为数据逻辑独立性与数据物理独立性两个方面。
1)数据逻辑独立性
当模式改变时,由数据库管理员对各个外模式/模式映象作相应改变,可以使外模式保持不变。应用程序是依据数据的外模式编写的,从而应用程序不必修改,保证了数据与程序的逻辑独立性,简称为数据逻辑独立性。
2)数据物理独立性
当数据库的存储结构等内模式改变了,由数据库管理员对模式/内模式映象作相应改变,可以使模式保持不变,从而应用程序也不必改变。保证了数据与程序的物理独立性,简称为数据物理独立性。
14、数据库管理系统有哪些主要功能?
解:
数据库管理系统是数据库系统的核心组成部分,是对数据进行管理的大型系统软件,用户在数据库系统中的一些操作,例如:数据定义、数据操纵、数据查询和数据控制,这些操作都是由数据库管理系统来实现的。
数据库管理系统主要包括以下几个功能:
(1)数据定义:DBMS提供数据定义语言(Data Definition Language,简称DDL),用户通过它可以方便地对数据库中的数据对象(包括表、视图、索引、存储过程等)进行定义。定义相关的数据库系统的结构和有关的约束条件。
(2)数据操纵:DBMS提供数据操纵语言(Data Manipulation Language,简称DML),通过DML操纵数据实现对数据库的一些基本操作,如查询,插入,删除和修改等等。其中,国际标准数据库操作语言——SQL语言,就是DML的一种。
(3)数据库的运行管理:这一功能是数据库管理系统的核心所在。DBMS通过对数据库在建立、运用和维护时提供统一管理和控制,以保证数据安全、正确、有效的正常运行。DBMS主要通过数据的安全性控制、完整性控制、多用户应用环境的并发性控制和数据库数据的系统备份与恢复四个方面来实现对数据库的统一控制功能的。
(4)数据库的建立和维护功能:数据库的建立和维护功能包括数据库初始数据的输入、转换功能、数据库的转储、恢复功能、重组织功能和性能监视、分析功能等。
15、数据库系统通常由哪几部分组成?
解:
数据库系统是指计算机系统中引入数据库后的整个人机系统。为此,数据库系统应由计算机硬件、数据库、计算机软件及各类人员组成。
1)硬件平台:要有足够大的内存支持OS与DBMS的运行;要有足够大而快速的磁盘等直接存储设备存放数据库,有足够的磁盘空间做数据备份。要求系统有较高的通道能力,以支持数据较高的传送率。
2)数据库:数据库是存放数据的地方,是存储在计算机内有组织的大量可共享的数据集合。数据库这里主要是指物理存储设备中有效组织的数据集合。
3)软件:数据库系统的软件主要包括:
(1)支持DBMS运行的操作系统;
(2)DBMS:DBMS可以通过操作系统对数据库的数据进行存取、管理和维护;
(3)具有与数据库接口的高级语言及其编译系统;
(4)以DBMS为核心的应用开发工具,为特定应用环境开发的数据库应用系统。
4)用户:用户主要有以下几种:用于进行管理和维护数据库系统的人员——数据库管理员;用于数据库应用系统分析设计的人员——系统分析员和数据库设计人员;用于具体开发数据库系统的人员——数据库应用程序员;用于使用数据库系统的人员——最终用户。
这里的最终用户,又可以分为三类:偶然用户、简单用户、复杂用户等。
16、设学生含有学号、姓名、性别、系别、选修课程、平均成绩(是经计算得到的)等信息,若把选修课程、平均成绩也作为学生的属性,请用E-R图表示学生信息。
17、请用扩展E-R图来表示客户的相关信息。客户含有姓名(由姓和名两部分组成)、客户号、电话(客户一般有多个电话)、出生日期、年龄、地址(含省、市、街道名、街道号、楼道号、房号与邮政编码)。
18、请用扩展E-R图中的实体角色的表示方法来分别表示:学生与学生间的班长关系与课程之间的先修关系等。
19、请用扩展E-R图的表示方法来表示公司生产特有产品的关系,其中公司含有公司名、地址、联系电话等信息,产品含有产品名与价格等信息。
20、请用扩展E-R图的表示方法来表示如下信息:人有姓名、所在城市等信息;人可分成客户(含购买金额)和雇员(有雇员号、薪水信息等)两类;雇员可再分为办公人员(有累计办公天数信息)、车间职员(有累计产生产品数量信息)、销售人员(有累计销售数量与销售金额信息)等三类。
21、请用扩展E-R图的聚集表示方法来表示如下信息:制造商有名称与地址信息、批发商有名称与地址信息、产品有产品名与价格信息。制造商与批发商联营产品的销售有个具体的时间,共同联营的产品才共同负责发送。
22、设要为医院的核心主题建立概念模型E-R图,包括病人、医生及病人的病历。其中医生有姓名与专长信息;病人有姓名、身份证号、保险号等信息;病历有门诊日期、诊断病症、治疗方法及治疗结果等信息。病人找医生治疗有个具体的时间。
保险号 |
医生 |
专长 |
姓名 |
病人 |
身份证号 |
m |
治疗方法 |
诊治 |
n |
姓名 |
治疗时间 |
门诊日期 |
治疗结果 |
一、单项选择题
1、A
2、C
3、B
4、C
5、A
6、B
7、B
8、B
9、C
10、C
1、设关系R和S的属性个数分别为r和s,则(R×S)操作结果的属性个数为( )
A. r+s B. r-s C. r×s D. max(r,s)
2、在基本的关系中,下列说法正确的是( )
A. 行列顺序有关 B. 属性名允许重名
C. 任意两个元组不允许重复 D. 列是非同质的
3、有关系R和S,R∩S的运算等价于( )
A.S-(R-S) B.R-(R-S) C.(R-S)∪S D.R∪(R-S)
4、设关系R(A,B,C)和S(A,D),与自然连接R ∞ S等价的关系代数表达式是( )
1=1 |
A. σR.A=S.A(R×S) B. R S
C. ∏B,C,S.A,D(σR.A=S.A(R×S)) D. ∏R.A,B,C(R×S)
5、五种基本关系代数运算是( )
A. ∪、-、×、π和σ B. ∪、-、 、∏和σ
C. ∪、∩、×、π和σ D. ∪、∩、 、π和σ
6、关系代数中的θ联接操作由( )操作组合而成。
A.σ和π B.σ和× C.π、σ和× D.π和×
7、在关系数据模型中,把( )称为关系模式。
A.记录 B.记录类型 C.元组 D.元组集
8、对一个关系做投影操作后,新关系的基数个数( )原来关系的基数个数。
A.小于 B.小于或等于 C.等于 D.大于
9、有关系:R(A,B,C)主键=A,S(D,A)主键=D,外键=A,参照R的属性A,系R和S的元组如下:指出关系S中违反关系完整性规则的元组是( )。
R: A B C S: D A
1 2 3 1 2
2 1 3 2 null
3 3
4 1
A. (1,2) B. (2,null) C. (3,3) D. (4,1)
10、关系运算中花费时间可能最长的运算是( )。
A.投影 B.选择 C.广义笛卡儿积 D.并
二、填 空
1、关系中主码的取值必须惟一且非空,这条规则是_实体_完整性规则。
2、关系代数中专门的关系运算包括:选择、投影、连接和除法,主要实现_查询_类操作。
3、关系数据库的关系演算语言是以_谓词演算_为基础的DML语言。
4、关系数据库中,关系称为_表__,元组亦称为__行__,属性亦称为_列__。
5、数据库描述语言的作用是_定义数据库_。
6、一个关系模式可以形式化地表示为_R(U,D,dom,F)_。
7、关系数据库操作的特点是__一次一集合_式操作。
8.数据库的所有关系模式的集合构成_关系数据库模型_,所有的关系集合构成_关系数据库_。
9、在关系数据模型中,两个关系R1与R2之间存在1:m的联系,可以通过在一个关系R2中的_外键或外码或外部关键字_在相关联的另一个关系R1中检索相对应的记录。
10、将两个关系中满足一定条件的元组连接到一起构成新表的操作称为_θ-连接_操作。
三、简单、计算或查询
1、试述关系模型的三要素内容。
解:
1)关系模型的数据结构——关系
关系模型的数据结构:非常单一,在用户看来,关系模型中数据的逻辑结构是一张二维表。但关系模型的这种简单的数据结构能够表达丰富的语义,描述出现实世界的实体以及实体间的各种联系。
2)关系模型的关系操作:关系模型给出了关系操作的能力,它利用基于数学的方法来表达关系操作,关系模型给出的关系操作往往不针对具体的RDBMS语言来表述。
关系模型中常用的关系操作包括:选择(select)、投影(project)、连接(join)、除(divide)、并(union)、交(intersection)、差(difference)等查询(query)操作和添加(insert)、删除(delete)、修改(update)等更新操作两大部分。查询的表达能力是其中最主要的部分。
早期的关系操作能力通常用代数方式或逻辑方式来表示,分别称为关系代数和关系演算。关系代数是用对关系的运算(即元组的集合运行)来表达查询要求的方式。关系演算是用谓词来表达查询要求的方式。关系演算又可按谓词变元的基本对象是元组变量还是域变量分为元组关系演算和域关系演算。关系代数、元组关系演算和域关系演算三种语言在表达功能上是等价的。
另外还有一种介于关系代数和关系演算之间的语言SQL(Structured Query Language)。SQL不但具有丰富的查询功能,而且具有数据定义、数据操纵和数据控制功能,是集查询、DDL、DML、DCL于一体的关系数据语言。它充分体现了关系数据语言的特点和优点,是关系数据库的国际标准语言。因此,关系数据语言可以分成三类:
(1) 关系代数:用对关系的集合运算表达查询要求,例如 ISBL。
(2) 关系演算:用谓词表达查询要求,可分为两类:①元组关系演算:谓词变元的基本对象是元组变量,例如 APLHA、QUEL;②域关系演算:谓词变元的基本对象是域变量,例如QBE。
(3) 关系数据语言,例如SQL。
这些关系数据语言的共同特点是:语言具有完备的表达能力,是非过程化的集合操作语言,功能强,能够嵌入到高级语言中使用。
3)关系模型的三类完整性约束:关系模型提供了丰富的完整性控制机制,允许定义三类完整性:实体完整性、参照完整性和用户自定义的完整性。其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件,应该由关系系统自动支持。用户自定义的完整性是应用领域特殊要求而需要遵循的约束条件,体现了具体领域中的语义约束。
2、试述关系数据库语言的特点和分类。
解:见上题“2)关系模型的关系操作”。
3、定义并理解下列概念,说明它们间的联系与区别:
(1)域、笛卡尔积、关系、元组、属性
(2)主码、候选码、外码
(3)关系模式、关系、关系数据库
解:
(1)域、笛卡尔积、关系、元组、属性
1)域:域是一组具有相同数据类型的值的集合。
2)笛卡尔积:给定一组域D 、D 、…、D (这些域中可以包含相同的元素,即可以完全不同,也可以部分或全部相同), D 、D 、…、D 的笛卡尔积为
D ×D ×…×D ={(d ,d ,…,d)|d ∈D ,i=1,2,…,n}
3)关系(Relation):D ×D ×…×D 的任一子集叫作在域D ,D ,…D 上的关系,用 R(D ,D ,…D )表示。
关系是笛卡尔积的子集,反过来说,看到某关系,也要看到该关系背后存在的其所属于的笛卡尔积,关系内容无论如何变都变化不出其所属于的笛卡尔积的,这是笛卡尔积概念的意义所在。
4)表的每行对应一个元组。
5)表的每列起一个唯一的名字,称为属性。
联系:
关系是笛卡尔积的子集,所以关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域。由于域可以相同,为了加以区分,必须对每列起一个唯一的名字,称为属性。
(2)主码、候选码、外码
1)候选码:若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码(Candidate key),关系至少含有一个候选码。
2)主码:一个关系至少有一个候选码,则选定其中一个为主控使用者,称为主码(Primary key)。
3)外码:设F是基本关系R的一个或一组属性,但不是关系R的码,如果F与基本关系S的主码Ks相对应,则称F是基本关系R的外码(Foreign key)。
联系:
关系的候选码中选定一个称为主码,主码即是候选码;而外码是与另一关系的主码相对应的属性组。
(3)关系模式、关系、关系数据库
关系数据库中,关系模式是型,关系是值。关系模式是对关系的描述,一个关系模式应当是一个5元组。
1)关系模式:关系的描述称为关系模式(Relation Schema)。一个关系模式应当是一个五元组。它可以形式化地表示为:R(U, D, dom, F)。其中R为关系名,U为组成该关系的属性名集合,D为属性组U中属性所来自的域的集合,dom为属性向域的映象集合,F为属性间数据的依赖关系集合。
2)关系:关系实际上就是关系模式在某一时刻的状态或内容。也就是说,关系模式是型,关系是它的值。
3)关系数据库:在关系模型中,实体以及实体间的联系都是用关系来表示。在一个给定的现实世界领域中,所有实体及实体之间的联系的关系的集合构成一个关系数据库。
联系:
关系模式是静态的、稳定的,而关系是动态的、随时间不断变化的,因为关系操作在不断地更新着数据库中的数据。但在实际使用中,常常把关系模式和关系统称为关系,读者可以从上下文中加以区别。
关系的集合构成一个关系数据库,关系数据库也有型和值之分。关系数据库的型也称为关系数据库模式,是对关系数据库的描述,是关系模式的集合。关系数据库的值也称为关系数据库,是关系的集合。关系数据库模式与关系数据库通常统称为关系数据库。
4、关系数据库的完整性规则有哪些?试举例说明。
解:
1)关系模型的完整性规则是对关系的某种约束条件。关系模型中可以有三类完整性约束:实体完整性、参照完整性和用户定义的完整性。
2)
(1)实体完整性:若属性组(或属性)K是基本关系R的主码(或称主关键字),则所有元组K的取值唯一,并且K中属性不能全部或部分取空值。
例如:在课程关系T中,若“课程名”属性为主码,则“课程名”属性不能取空值,并且课程名要唯一。
(2)参照完整性:若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S可能是相同的关系),则对于R中每个元组在F上的值必须为:或者取空值(F的每个属性值均为空值);或者等于S中某个元组的主码值。
例如,对于“学生(学号,姓名,性别,年龄,系别号)、系别(系别号,系名)”两关系,“系别号”为学生关系的外码。它要满足参照完整性。对于学生关系中的每个元组的“系别号”属性只能取下面两类值:空值,表示尚未给该学生分配系别;非空值,则该值必须是系别关系中某个元组的“系别号”的值,表示该学生不可能分配到一个不存在的系中,即被参照关系“系别”中一定存在一个元组,它的主码值等于该参照关系“学生”中的外码值。
(3)用户定义的完整性:用户定义的完整性就是针对某一具体应用的关系数据库所制定的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。
例如,对于学生关系中的年龄,我们可以按需要定义“年龄>8并且年龄<45”的自定义规则。
5、关系代数运算有哪两大类,试说明每种运算的操作含义。
解:
1)关系代数的运算按运算符的不同主要分为传统的集合运算和专门的关系运算两类。
(1)传统的集合运算:包括并、交、差、广义笛卡尔积四种运算。
(2)专门的关系运算:包括选择、投影、连接、除等。
2)各运算的操作含义
(1)并:设关系R和关系S具有相同的目n,且相应的属性取自同一个域,则关系R与关系S的并由属于R或属于S的所有元组组成。记作:R∪S={t|t R∨t S}
(2)差:设关系R和关系S具有相同的目n,且相应的属性取自同一个域,则关系R与关系S的差由属于R而不属于S的所有元组组成。记作:R-S={t| t R∧t S }
(3)交:设关系R和关系S具有相同的目n,且相应的属性取自同一个域,则关系R与关系S的交由既属于R又属于S的所有元组组成。记作:R∩S={t| t R∧t S}
(4)广义笛卡尔积:
︵ |
两个分别为n目和m目的关系R和S的广义笛卡尔积是一个(n+m)列的元组的集合。元组的前n列是关系R的一个元组,后m列是关系S的一个元组。若R有k1个元组,S有k2个元组,则关系R和关系S的广义笛卡尔积有k1×k2个元组。记作:
R×S={t t | t R∧t S}
(5)选择:选择又称为限制(Restriction)。它是在关系R中选择满足给定条件的诸元组,记作:
(R) = {t|t∈R∧F(t)=“真”}
(6)投影:关系R上的投影是从R中选择出若干属性列组成新的关系。记作:
∏(R) = { t[A] | t R }
(7)连接:
︵ |
连接也称为θ连接。它是从两个关系的广义笛卡尔积中选取属性间满足一定条件的元组。记作: ={ t t |t ∈R∧t ∈S∧t [A]θt [B] }
︵ |
θ为”=”的连接运算称为等值连接。它是从关系R与S的广义笛卡尔积中选取A、B属性值相等的那些元组。等值连接表示为:
={ t t | ∈R∧t ∈S∧t [A]=t [B]}。为此: = A=B(R×S)
- |
- |
︵ |
自然连接(Natural join)是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且要在结果中把重复的属性去掉。即若R和S具有相同的属性组B,则自然连接可记作:
R∞S={ tr ts[B]|tr∈R∧ts∈S∧tr[B]=ts[B]}。为此:R∞S=∏ ( R.B=S.B(R×S))
(8)除:给定关系R(X,Y)和S(Y,Z),其中X,Y,Z为属性组。R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域。R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在X属性列上的投影:元组在X上分量值x的象集Yx包含S在Y上投影的集合。记作:P=R÷S ={tr[X]|tr∈R∧Yx?∏Y(S)},其中Yx为x在R中的象集,x=tr[X]。
6、关系代数的基本运算有哪些?请用基本运算表示非基本运算。
解:
1)8种关系代数运算中并、差、广义笛卡尔积、投影和选择5种运算为基本的关系代数运算。
2)另外3种运算,即交、连接和除为非基本运算,均可以用这5种基本运算来表达。表达如下:
(1)R∩S=R-(R-S) 或 R∩S=S-(S-R)
(2)
= AθB(R×S)
- |
= A=B(R×S)
R∞S=∏ ( R.B=S.B(R×S))
(3)
R÷S =∏X(R)-∏X(∏X(R)×∏Y(S)-R)
7、举例说明等值连接与自然连接的区别与联系。
解:
︵ |
θ为”=”的连接运算称为等值连接。它是从关系R与S的广义笛卡尔积中选取A、B属性值相等的那些元组。等值连接表示为:
={ t t | ∈R∧t ∈S∧t [A]=t [B]}。为此: = A=B(R×S)
- |
- |
︵ |
自然连接(Natural join)是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且要在结果中把重复的属性去掉。即若R和S具有相同的属性组B,则自然连接可记作:
R∞S={ tr ts[B]|tr∈R∧ts∈S∧tr[B]=ts[B]}。为此:R∞S=∏ ( R.B=S.B(R×S))
一般的连接操作是从行的角度进行运算。但自然连接还需要取消重复列,所以是同时从行和列的角度进行运算。
举例: 设图2.10(a)和图2.10(b)分别为关系R和关系S,
R.B=S.B |
图2.10(d)为等值连接R∞S的结果,图2.10(e)为自然连接R∞S的结果。从中能明显看出其列数的不同。
R S
A | B | C |
a1 | b1 | 5 |
a1 | b2 | 6 |
a2 | b3 | 8 |
a2 | b4 | 12 |
B | E |
b1 | 3 |
b2 | 7 |
b3 | 10 |
b3 | 2 |
b5 | 2 |
(a) (b)
R.B=S.B |
R ∞S R∞S
A | B | C | E |
a1 | b1 | 5 | 3 |
a1 | b2 | 6 | 7 |
a2 | b3 | 8 | 10 |
a2 | b3 | 8 | 2 |
A | R.B | C | S.B | E |
a1 | b1 | 5 | b1 | 3 |
a1 | b2 | 6 | b2 | 7 |
a2 | b3 | 8 | b3 | 10 |
a2 | b3 | 8 | b3 | 2 |
(d) (e)
图2.10 连接运算举例
8、设有关系R、S(如下表所示),计算:
R S
A B C C D E
3 6 7 3 4 5
4 5 7 6 2 3
6 2 3
5 4 3
2<2 |
(1) R1 =R S (2) R2=R S
(3) R3 = B=D(R×S)
解:
(1)
A B C D E
6 2 3 4 5
5 4 3 4 5
(2) A B R.C S.C D E
6 2 3 3 4 5
(3) 结果同(2)
9、请用抽象的元组关系演算表达式表达第8题中的R1、R2与R3关系。
解:
(1)R1= {t|($u)($v)( R(u)∧S(v)∧t[1]= u[1]∧t[2]= u[2]∧t[3]= u[3]∧t[4]= v[2]∧t[5]=v[3]∧u[3]= v[1])}
(2)R2= {t|($u)($v)( R(u)∧S(v)∧t[1]= u[1]∧t[2]= u[2]∧t[3]= u[3]∧t[4]= v[1]∧t[5]= v[2]∧t[6]=v[3]∧u[2]= v[2])}
(3)同(2)
10、设有学生-课程关系数据库,它由三个关系组成,它们的模式是:学生S(学号SNO,姓名SN,所在系DEPT,年龄AGE)、课程C(课程号CNO,课程名CN,先修课号CPNO)、SC(学号SNO,课程号CNO,成绩SCORE)。
请用关系代数与ALPHA语言分别写出下列查询:
(1) 检索学生的所有情况。
(2) 检索学生年龄大于等于20岁的学生姓名。
(3) 检索先修课号为C2的课程号。
(4) 检索选修了课程号C1成绩为A的所有学生姓名。
(5) 检索学号为S1的学生修读的所有课程名及先修课号。
(6) 检索年龄为23岁的学生所修读的课程名。
(7) 检索至少修读了学号为S5的学生修读的一门课的学生的姓名。
(8) 检索修读了学号为S4的学生所修读的所有课程的学生的姓名。
(9) 检索选修所有课程的学生的学号。
(10) 检索不选修任何课程的学生的学号。
(11) 在关系C中增添一门新课(新课信息自定)
(12) 学号为S17的学生因故退学请在S与SC中将其除名。
(13) 将关系S中学生S6的年龄改为22岁(只需ALPHA操作)。
(14) 将关系S中学生的年龄均增加1岁(只需ALPHA操作)。
解:
写出关系代数表达方式:
(1) 检索学生的所有情况。
S 或 S SC C
(2) 检索学生年龄大于等于20岁的学生姓名。
πSN(σAGE>=20(S))
(3) 检索先修课号为C2的课程号。
πCNO(σCPNO=’C2’(C))
(4) 检索选修了课程号C1成绩为A的所有学生姓名。
πSN(σCNO=’C1’∧SCORE=’A’(SC S))
(5) 检索学号为S1的学生修读的所有课程名及先修课号。
πCN,CPNO (σSNO=’S1’(SC C))
(6) 检索年龄为23岁的学生所修读的课程名。
πCN (σAGE=23(S SC C))
(7) 检索至少修读了学号为S5的学生修读的一门课的学生的姓名。
πSN (S SC πCNO (σSNO=’S5’(SC)))
(8) 检索修读了学号为S4的学生所修读的所有课程的学生的姓名。
πSN (S (πSNO,CNO (SC)÷πCNO (σSNO=’S4’(SC))))
(9) 检索选修所有课程的学生的学号。
πSNO,CNO (SC)÷πCNO (C)
(10) 检索不选修任何课程的学生的学号。
πSNO (S) -πSNO (SC)
写出ALPHA 命令:
(1) 检索学生的所有情况。S S SCC
GET W(S)
GET W(S,SC,C): S.SNO=SC.SNO ∧ SC.CNO =C.CNO
(2) 检索学生年龄大于等于20岁的学生姓名。πSN(σAGE>=20(S))
GET W(S.SN): (S.AGE>=20)
(3) 检索先修课号为C2的课程号。πCNO(σCPNO=’C2’(C))
GET W(C.CNO): (C.CPNO=’C2’)
(4) 检索选修了课程号C1成绩为A的所有学生姓名。
πSN(σCNO=’C1’∧SCORE=’A’(SC C))
RANGE SC SCX
GET W(S.SN): SCX (SCX.SNO=S.SNO ∧ SCX.CNO=’C1’ ∧ SCX.SCORE=’A’)
(5) 检索学号为S1的学生修读的所有课程名及先修课号。
πCN,CPNO (σSNO=’S1’(SC S))
RANGE SC SCX
GET W(C.CN,C.CPNO): SCX (SCX.CNO=C.CNO ∧ SCX.SNO=’S1’)
(6) 检索年龄为23岁的学生所修读的课程名。
πCN (σAGE=23(S SC C))
RANGE S SX
SC SCX
GET W(C.CN): SX SCX (SX.SNO=SCX.SNO ∧ SCX.CNO=C.CNO∧ SX.AGE=23)
(7) 检索至少修读了学号为S5的学生修读的一门课的学生的姓名。
πSN (S SC πCNO (σSNO=’S5’(SC)))
RANGE SC SCX
SC SCY
GET W(S.SN): SCX SCY (SCX.SNO=’S5’ ∧ SCY.SNO=S.SNO∧ SCY.CNO=SCX.CNO)
或
RANGE C CX
SC SCX
SC SCY
GET W(S.SNO): CX( SCX (SCX.SNO=’S5’ ∧ CX.CNO=SCX.CNO)-> SCY (SCY.SNO=S.SNO ∧ CX.CNO=SCY.CNO))
(8) 检索修读了学号为S4的学生所修读的所有课程的学生的姓名。
πSN (S (πSNO,CNO (SC)÷πCNO (σSNO=’S4’(SC))))
RANGE C CX
SC SCX
SC SCY
GET W(S.SNO): CX( SCX (SCX.SNO=’S4’ ∧ CX.CNO=SCX.CNO)-> SCY (SCY.SNO=S.SNO ∧ CX.CNO=SCY.CNO))
也可以变换( A -> B ≡ ﹁ A ∨ B X(A) ≡ ﹁ X(﹁ A ))
真值表 A B A -> B ≡ ﹁ A ∨ B
T T T T
T F F F
F T T T
F F T T
RANGE C CX
SC SCX
SC SCY
GET W(S.SNO): CX( SCX (SCX.SNO=’S4’ ∧ CX.CNO=SCX.CNO)-> SCY (SCY.SNO=S.SNO ∧ CX.CNO=SCY.CNO))
GET W(S.SNO): CX(﹁( SCX (SCX.SNO=’S4’ ∧ CX.CNO=SCX.CNO))∨( SCY (SCY.SNO=S.SNO ∧ CX.CNO=SCY.CNO)))
GET W(S.SNO):﹁ CX(﹁(﹁( SCX (SCX.SNO=’S4’ ∧ CX.CNO=SCX.CNO))∨( SCY (SCY.SNO=S.SNO ∧ CX.CNO=SCY.CNO))))
GET W(S.SNO):﹁ CX((( SCX (SCX.SNO=’S4’ ∧ CX.CNO=SCX.CNO))∧
﹁( SCY (SCY.SNO=S.SNO ∧ CX.CNO=SCY.CNO))))
(9) 检索选修所有课程的学生的学号。πSNO,CNO (SC)÷πCNO (C)
RANGE C CX
SC SCX
GET W(S.SNO): CX SCX (SCX.CNO=CX.CNO ∧ S.SNO=SCX.SNO)
全称改存在为:
RANGE C CX
SC SCX
GET W(S.SNO):﹁ CX(﹁ SCX (SCX.CNO=CX.CNO ∧ S.SNO=SCX.SNO))
(10) 检索不选修任何课程的学生的学号。πSNO (S) -πSNO (SC)
RANGE SC SCX
GET W(S.SNO): SCX(﹁(SCX.SNO=SNO))
即:
RANGE SC SCX
GET W(S.SNO): SCX(SCX.SNO≠SNO)
或
全称改存在为:
GET W(S.SNO):﹁ SCX(﹁(﹁(SCX.SNO=SNO)) )
即:
GET W(S.SNO):﹁ SCX(SCX.SNO=SNO))
或
(你们的做法)
RANGE SC SCX
C CX
GET W(S.SNO): CX﹁( SCX(SCX.SNO=SNO∧CX.CNO=SCX.CNO))
即:
RANGE SC SCX
GET W(S.SNO): CX SCX (SCX.SNO≠SNO ∨ SCX.CNO≠CX.CNO)
全称改存在为:
RANGE SC SCX
C CX
GET W(S.SNO): CX﹁( SCX(SCX.SNO=SNO∧CX.CNO=SCX.CNO))
GET W(S.SNO):﹁ CX﹁(﹁( SCX(SCX.SNO=SNO∧CX.CNO=SCX.CNO)))
GET W(S.SNO):﹁ CX( SCX(SCX.SNO=SNO∧CX.CNO=SCX.CNO))
SQL命令见后
(11) 在关系C中增添一门新课
MOVE 'C9' TO W.CNO
MOVE '计算机系统结构' TO W.CN
MOVE 'C4' TO W.CPNO
PUT W(C)
(12) 学号为S17的学生因故退学请在S与SC中将其除名。
Hold W(SC):SNO=’S17’
DELETE W
Hold W(S):SNO=’S17’
DELETE W
(13) 将关系S中学生S6的年龄改为22岁(只需ALPHA操作)。
Hold W(SNO,AGE):SNO=’S6’
MOVE 22 TO W.AGE
UPDATE W
(14) 将关系S中学生的年龄均增加1岁(只需ALPHA操作)。
Hold W(SNO,AGE)
MOVE W.AGE+1 TO W.AGE
UPDATE W
写出SQL 命令(非本章要求):
9、设有学生-课程关系数据库,它由三个关系组成,它们的模式是:学生S(学号SNO,姓名SN,所在系DEPT,年龄AGE)、课程C(课程号CNO,课程名CN,先修课号CPNO)、SC(学号SNO,课程号CNO,成绩G)。
请用关系代数与ALPHA语言分别写出下列查询:
(1) 检索学生的所有情况。
S S SCC
GET W(S)
GET W(S,SC,C): S.SNO=SC.SNO ∧ SC.CNO =C.CNO
SELECT *
FROM S
(2) 检索学生年龄大于等于20岁的学生姓名。
πSN(σAGE>=20(S))
GET W(S.SN): (S.AGE>=20)
SELECT SN
FROM S
WHERE S.AGE>=20
(3) 检索先修课号为C2的课程号。
πCNO(σCPNO=’C2’(C))
GET W(C.CNO): (C.CPNO=’C2’)
SELECT CNO
FROM C
WHERE C.CPNO=’C2’
(4) 检索选修了课程号C1成绩为A的所有学生姓名。
πSN(σCNO=’C1’∧SCORE=’A’(SC C))
RANGE SC SCX
GET W(S.SN): SCX (SCX.SNO=S.SNO ∧ SCX.CNO=’C1’ ∧ SCX.SCORE=’A’)
SELECT SN
FROM S,SC
WHERE S.SNO=SC.SNO AND SC.CNO=’C1’ AND SC.SCORE=’A’
(5) 检索学号为S1的学生修读的所有课程名及先修课号。
πCN,CPNO (σSNO=’S1’(SC S))
RANGE SC SCX
GET W(C.CN,C.CPNO): SCX (SCX.CNO=C.CNO ∧ SCX.SNO=’S1’)
SELECT C.CN,C.CPNO
FROM C,SC
WHERE C.CNO=SC.CNO AND SC.SNO=’S1’
(6) 检索年龄为23岁的学生所修读的课程名。
πCN (σAGE=23(S SC C))
RANGE S SX
SC SCX
GET W(C.CN): SX SCX (SX.SNO=SCX.SNO ∧ SCX.CNO=C.CNO∧ SX.AGE=23)
SELECT C.CN
FROM S,SC,C
WHERE S.SNO=SC.SNO AND SC.CNO=C.CNO AND S.AGE=23
(7) 检索至少修读了学号为S5的学生修读的一门课的学生的姓名。
πSN (S SC πCNO (σSNO=’S5’(SC)))
RANGE SC SCX
SC SCY
GET W(S.SN): SCX SCY (SCX.SNO=’S5’ ∧ SCY.SNO=S.SNO∧ SCY.CNO=SCX.CNO)
或
RANGE C CX
SC SCX
SC SCY
GET W(S.SNO): CX( SCX (SCX.SNO=’S5’ ∧ CX.CNO=SCX.CNO)-> SCY (SCY.SNO=S.SNO ∧ CX.CNO=SCY.CNO))
SELECT S.SNO
FROM S,SC X,SC Y
WHERE S.SNO=Y.SNO AND X.CNO=Y.CNO AND X.SNO=’S5’
(8) 检索修读了学号为S4的学生所修读的所有课程的学生的姓名。
πSN (S (πSNO,CNO (SC)÷πCNO (σSNO=’S4’(SC))))
RANGE C CX
SC SCX
SC SCY
GET W(S.SNO): CX( SCX (SCX.SNO=’S4’ ∧ CX.CNO=SCX.CNO)-> SCY (SCY.SNO=S.SNO ∧ CX.CNO=SCY.CNO))
也可以变换
RANGE C CX
SC SCX
SC SCY
GET W(S.SNO): CX( SCX (SCX.SNO=’S4’ ∧ CX.CNO=SCX.CNO)-> SCY (SCY.SNO=S.SNO ∧ CX.CNO=SCY.CNO))
GET W(S.SNO): CX(﹁( SCX (SCX.SNO=’S4’ ∧ CX.CNO=SCX.CNO))∨( SCY (SCY.SNO=S.SNO ∧ CX.CNO=SCY.CNO)))
GET W(S.SNO):﹁ CX(﹁(﹁( SCX (SCX.SNO=’S4’ ∧ CX.CNO=SCX.CNO))∨( SCY (SCY.SNO=S.SNO ∧ CX.CNO=SCY.CNO))))
GET W(S.SNO):﹁ CX((( SCX (SCX.SNO=’S4’ ∧ CX.CNO=SCX.CNO))∧
﹁( SCY (SCY.SNO=S.SNO ∧ CX.CNO=SCY.CNO))))
SELECT S.SNO
FROM S
WHERE NOT EXISTS
(SELECT *
FROM SC X
WHERE X.SNO=’S4’ AND
NOT EXISTS
(SELECT *
FROM SC Y
WHERE S.SNO=Y.SNO AND Y.CNO=X.CNO))
(9) 检索选修所有课程的学生的学号。
πSNO,CNO (SC)÷πCNO (C)
RANGE C CX
SC SCX
GET W(S.SNO): CX SCX (SCX.CNO=CX.CNO ∧ S.SNO=SCX.SNO)
全称改存在为:
RANGE C CX
SC SCX
GET W(S.SNO):﹁ CX(﹁ SCX (SCX.CNO=CX.CNO ∧ S.SNO=SCX.SNO))
SELECT S.SNO
FROM S
WHERE NOT EXISTS
(SELECT *
FROM C CX
WHERE NOT EXISTS
(SELECT *
FROM SC SCX
WHERE S.SNO=SCX.SNO AND SCX.CNO=CX.CNO))
(10) 检索不选修任何课程的学生的学号。
πSNO (S) -πSNO (SC)
RANGE SC SCX
GET W(S.SNO): SCX(﹁(SCX.SNO=SNO))
即:
RANGE SC SCX
GET W(S.SNO): SCX(SCX.SNO≠SNO)
或
全称改存在为:
GET W(S.SNO):﹁ SCX(﹁(﹁(SCX.SNO=SNO)) )
即:
GET W(S.SNO):﹁ SCX(SCX.SNO=SNO))
或
(你们的做法)
RANGE SC SCX
C CX
GET W(S.SNO): CX﹁( SCX(SCX.SNO=SNO∧CX.CNO=SCX.CNO))
即:
RANGE SC SCX
GET W(S.SNO): CX SCX (SCX.SNO≠SNO ∨ SCX.CNO≠CX.CNO)
全称改存在为:
RANGE SC SCX
C CX
GET W(S.SNO): CX﹁( SCX(SCX.SNO=SNO∧CX.CNO=SCX.CNO))
GET W(S.SNO):﹁ CX﹁(﹁( SCX(SCX.SNO=SNO∧CX.CNO=SCX.CNO)))
GET W(S.SNO):﹁ CX( SCX(SCX.SNO=SNO∧CX.CNO=SCX.CNO))
SELECT SNO
FROM S
MINUS -- EXCEPT (sql server 2005)
SELECT DISTINCT SNO
FROM SC
或
SELECT SNO
FROM S
WHERE SNO NOT IN
( SELECT DISTINCT SNO
FROM SC )
一、选择题
1、C
2、B
3、D
4、C
5、A
6、A
7、D
8、C
9、C
10、D
1、在SQL语言中授权的操作是通过________语句实现的。
A、CREATE B、REVOKE C、GRANT D、INSERT
2、SQL语言的一体化特点是主要同( )相比较而言的。
A.操作系统命令 B.非关系模型的数据语言
C.高级语言 D.关系模型语言
3、在嵌入式SQL语言中使用游标的目的在于________。
A、区分SQL与宿主语言 B、与数据库通信
C、处理错误信息 D、处理多行记录
4、设有关系R=(A,B,C)。与SQL语句SELECT DISTINCT A FROM R WHERE B=17等价的关系代数表达式是________。
A. ∏A(R) B. σB=17(R)
C. ∏A(σB=17(R)) D. σB=17(∏A(R))
5、两个子查询的结果( )时,可以执行并、交、差操作。
A. 结构完全一致 B.结构完全不一致
C. 结构部分一致 C.主键一致
6、在SQL查询语句中,用于测试子查询是否为空的谓词是( )。
A.Exists B.Unique C.Some D.All
7、使用SQL语句进行查询操作时,若希望查询结果中不出现重复元组,应在Select子句中使用()保留字。
A.Unique B.All C.Except D.Distinct
8、在视图上不可能完成的操作是( )
A.更新视图 B.查询
C.在视图上定义新的基本表 D.在视图上定义新视图
9、SQL中涉及属性Age是否是空值的比较操作,写法( )是错误的。
A. Age Is Null B. Not(Age Is Null)
C. Age=Null D.Age Is Not Null
10、假定学生关系是S(S#,Sname,Sex,Age),课程关系是C(C#,CName,TEACHER),学生选课关系是SC(S#,C#,Grade)。要查找选修“数据库系统概论”课程的“男”学生学号,将涉及到关系( )。
A.S B.SC,C C.S,SC D.S,SC,C
二、填空题
1、SQL操作命令CREATE、DROP、ALTER主要完成的是数据的_定义_功能。
2、__SQL___为关系数据库语言国际标准语言。
3、SQL中文含义是_结构化查询语言_,它集查询、操纵、定义和控制等多种功能。
4、视图是从_基本表或视图_导出的表。它相当于三级结构中的外模式。
5、视图是虚表,它一经定义就可以和基本表一样被查询,但_更新__操作将有一定限制。
6、SQL的数据更新功能主要包括__INSERT__、__UPDATE_和_DELETE_三个语句。
7、在字符匹配查询中,通配符“%”代表_任意多个字符_,“_”代表__任意单个字符_。
8、SQL语句具有__交互式__和__嵌入式__两种使用方式。
9、SQL语言中,实现数据检索的语句是_SELECT_。
10、在SQL中如果希望将查询结果排序,应在Select语句中使用_ORDER BY_子句。
三、简答与SQL操作表达
1、简述SQL的定义功能。
解:
SQL语言使用数据定义语言(Data Definition Language,DDL)实现其数据定义功能,可对数据库基本表、视图和索引等进行定义、修改和撤消(删除)等操作。
具体对基本表、视图和索引的定义(创建)、修改和撤消(删除)等操作命令的使用此略。见书P73-79
2、简述SQL语言支持的三级逻辑结构。
解:
SQL语言支持关系数据库三级模式结构,如图3.1所示。其中外模式对应于视图(View)和部分基本表(Base Table),模式对应于基本表,内模式对应于存储文件。
图3.1数据库三级模式结构
基本表是本身独立存在的表,在SQL中一个关系就对应一个表。一些基本表对应一个存储文件,一个表可以有若干索引,索引也存放在存储文件中。
图3.2 关系数据库三级模式结构示意图
视图是从基本表或其他视图中导出的表,它本身不独立存储在数据库中,也就是说数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中,因此视图是一个虚表。
存储文件的物理结构及存储方式等组成了关系数据库的内模式。对于不同数据库管理系统,其存储文件的物理结构及存储方式等往往是不同的,一般也是不公开的。
视图和基本表是SQL语言的主要操作对象,用户可以用SQL语言对视图和基本表进行各种操作。在用户眼中,视图和基本表都是关系表,而存储文件对用户是透明的。
关系数据库三级模式结构直观示意图如图3.2所示。
3、解释本章所涉及的有关基本概念的定义:基本表、导出表、视图、索引、聚集、系统特权、对象特权、角色,并说明视图、索引、聚集、角色的作用。
解:
1)
基本表:基本表是本身独立存在的表,在SQL中一个关系就对应一个表。
导出表:在若基本表上定义的查询表。
视图:视图是从一个或几个基本表(或视图)导出的表,它与基本表不同,是一个虚表。
索引:在现实生活中我们经常借用索引的手段实现快速查找,例如图书目录、词典索引等。同样道理,数据库中的索引是为了加速对表中元组(或记录)的检索而创建的一种分散存储结构(如B+树数据结构),它实际上是记录的关键字与其相应地址的对应表。索引是对表或视图而建立的,由索引页面组成。
聚集:按照索引记录的存放位置可分为聚集索引与非聚集索引两类。聚集索引是指索引项的顺序与表中记录的物理顺序一致的索引组织;非聚集索引按照索引的字段排列记录,但是排列的结果并不会与表记录顺序一致,而是另外组织存储。在检索记录时,聚集索引会比非聚集索引速度快,一个表中只能有一个聚集索引,而非聚集索引可以有多个。
系统特权:即系统权限,是指数据库系统级的权限,而不是依附于某数据库对象的权限。如创建数据库表的权限:CREATE TABLE。
对象特权:数据库管理员拥有系统权限,而作为数据库的普通用户,只对自己建的基本表、视图等数据库对象拥有对象权限。所谓对象权限即是指依附于数据库对象如表、视图等的权限。如对某表的添加记录、删除记录、修改记录、查询记录等的权限。
角色:角色是对多种权限的集合的一种命名。当要为某一用户同时授予或收回多项权限时,则可以把这些权限定义为一个角色,如此可对此角色内的所有权限进行整体操作。这样就避免了许多重复性的工作,简化了管理数据库用户权限的人的工作。可以把角色授予用户或其它角色。
2)以下简单说明视图、索引、聚集、角色的作用。
视图:在关系数据库系统中,视图为用户提供了多种看待数据库数据的方法与途径,是关系数据库系统中的一种重要对象。其作用有:(1)视图能够简化用户的操作;(2)视图使用户能以多种角度看待同一数据;(3)增加了数据的安全性;(4)视图对重构数据库提供了一定程度的逻辑独立性。
索引:系统将自动使用索引进行查询优化,能明显加快对表数据的查询速度。
聚集:聚集是一种数据组织方法,聚集索引是一类索引,由于索引信息与表记录的物理组织存放顺序一致,从而能减少定位索引信息的时间,能更快速地索引查找记录数据。
角色:简化了数据库系统管理对权限的管理工作。
4、在对数据库进行操作的过程中,设置视图机制有什么优点?它与数据表之间有什么区别?
解:
1)在关系数据库系统中,视图为用户提供了多种看待数据库数据的方法与途径,是关系数据库系统中的一种重要对象。其优点有:(1)视图能够简化用户的操作;(2)视图使用户能以多种角度看待同一数据;(3)增加了数据的安全性;(4)视图对重构数据库提供了一定程度的逻辑独立性。
2)视图在概念上与基本表等同,一经定义,就可以和基本表一样被查询、被删除,我们也可以在一个视图上再定义新的视图,但对视图的更新(插入、删除、修改)操作相对于数据表来说,则有一定的限制。即有些视图逻辑上是肯定不能修改的。
5、设有四个关系(只示意性给出一条记录):
S SPJ
SNO SNAME ADDRESS TEL SNO PNO JNO QTY
Sl SN1 上海南京路 68564345 S1 Pl J1 200
P J
PNO PNAME SPEC CITY COLOR JNO JNAME LEADER BG
P1 PNl 8X8 无锡 红 J1 JN1 王总 10
S(SNO,SNAME, ADDRESS,TEL)其中,SNO:供应商代码 SNAME:姓名 ADDRESS:地址 TEL:电话;
J(JNO,JNAME,LEADER,BG)其中,JNO:工程代码 JNAME:工程名 LEADER:负责人 BG:预算;
P(PNO,PNAME,SPEC,CITY,COLOR)其中,PNO:零件代码 PNAME:零件名 SPEC:规格 CITY:产地 COLOR:颜色;
SPJ(SNO,JNO,PNO,QTY)其中,SNO:供应商代码 JNO:工程代码 PNO:零件代码 QTY:数量;
(1)为每个关系建立相应的表结构,添加若干记录。
(2)完成如下查询:
1)找出所有供应商的姓名和地址、电话。
2)找出所有零件的名称、规格、产地。
3)找出使用供应商代码为S1供应零件的工程号。
4)找出工程代码为J2的工程使用的所有零件名称、数量。
5)找出产地为上海的所有零件代码和规格。
6)找出使用上海产的零件的工程名称。
7)找出没有使用天津产的零件的工程号。
8)求没有使用天津产的红色零件的工程号。
9)取出为工程J1和J2提供零件的供应商代号。
10)找出使用供应商S2供应的全部零件的工程号。
(3)完成如下更新操作:
1)把全部红色零件的颜色改成蓝色;
2)由S10供给J4的零件P6改为由S8供应,请作必要的修改。
3)从供应商关系中删除S2的记录,并从供应零件关系中删除相应的记录。
4)请将 (S2, J8, P4, 200) 插入供应零件关系。
5)将工程J2的预算改为40万元。
6)删除工程J8订购的S4的零件。
(4)请将“零件”和“供应零件”关系的连接定义一个视图,完成下列查询:
1)找出工程代码为J2的工程使用的所有零件名称、数量。
2)找出使用上海产的零件的工程号。
解:
(1)
CREATE TABLE S(SNO VARCHAR(5) NOT NULL PRIMARY KEY,
SNAME VARCHAR(20) NOT NULL,
ADDRESS NVARCHAR(30),
TEL VARCHAR(20))
INSERT INTO S VALUES(‘S1’,’SN1’,’ 上海南京路’,’68564345’)
……
CREATE TABLE P(PNO VARCHAR(5) NOT NULL PRIMARY KEY,
PNAME VARCHAR(20) NOT NULL,
SPEC VARCHAR(20),
CITY NVARCHAR(20);
COLOR NVARCHAR(2))
INSERT INTO P VALUES(‘P1’,’PN1’,’8x8’,’无锡’,’红’)
……
CREATE TABLE J(JNO VARCHAR(5) NOT NULL PRIMARY KEY,
JNAME VARCHAR(20) NOT NULL,
LEADER VARCHAR(10),
BG INT)
INSERT INTO J VALUES(‘J1’,’JN1’,’王总’,10)
……
CREATE TABLE SPJ(SNO VARCHAR(5) NOT NULL,
PNO VARCHAR(5) NOT NULL,
JNO VARCHAR(5) NOT NULL,
QTY INT,
CONSTRAINT PR_SPJ PRIMARY KEY(SNO,SPNO,JNO))
INSERT INTO SPJ VALUES(‘S1’,’P1’,’J1’,200)
……
(2)
1)找出所有供应商的姓名和地址、电话。
SELECT SNAME,ADDRESS,TEL FROM S
2)找出所有零件的名称、规格、产地。
SELECT ONAME,SPEC,CITY FROM P
3)找出使用供应商代码为S1供应零件的工程号。
SELECT DISTINCT JNO FROM SPJ WHERE SNO=’S1’
4)找出工程代码为J2的工程使用的所有零件名称、数量。
SELECT PNAME,QTY
FROM SPJ,P
WHERE SPJ.PNO=P.PNO AND JNO=’J2’
5)找出产地为上海的所有零件代码和规格。
SELECT PNO,SPEC FROM P WHERE CITY=’上海’
6)找出使用上海产的零件的工程名称。
SELECT JNO FROM FROM P,SPJ,J
WHERE P.CITY=’上海’AND P.PNO=SPJ.PNO AND SPJ.JNO=J.JNO
7)找出没有使用天津产的零件的工程号。
SELECT JNO
FROM J
WHERE JNO NOT IN
(SELECT JNO
FROM SPJ,P
WHERE SPJ.PNO=P.PNO AND P.CITY=’天津’)
8)求没有使用天津产的红色零件的工程号。
SELECT JNO
FROM J
WHERE JNO NOT IN
(SELECT JNO
FROM SPJ,P
WHERE SPJ.PNO=P.PNO AND P.CITY=’天津’ AND P.COLOR=’红’)
9)取出为工程J1和J2提供零件的供应商代号。
SELECT SNO
FROM SPJ
WHERE JNO=’J1’OR JNO=’J2’
10)找出使用供应商S2供应的全部零件的工程号。
SELECT JNO
FROM J
WHERE NOT EXISTS
(SELECT *
FROM SPJ X
WHERE X.SNO=’S1’AND NOT EXISTS
(SELECT *
FROM SPJ Y
WHERE Y.JNO=J.JNO AND Y.PNO=X.PNO))
(3)
1)把全部红色零件的颜色改成蓝色;
UPDATE P SET COLOR=’蓝’ WHERE COLOR=’红’
2)由S10供给J4的零件P6改为由S8供应,请作必要的修改。
UPDATE SPJ SET SNO=’S8’WHERE SNO=’S10’AND PNO=’P6’AND JNO=’J4’
若不能直接修改主码,则可如下操作:先添加新记录,再删除老记录
Insert into spj
select ’S8’,jno,pno,qty
from spj
where SNO=’S10’AND PNO=’P6’AND JNO=’J4’
delete from spj where SNO=’S10’AND PNO=’P6’AND JNO=’J4’
3)从供应商关系中删除S2的记录,并从供应零件关系中删除相应的记录。
Delete from spj where sno=’s2’
Delete from s where sno=’s2’
4)请将 (S2, J8, P4, 200) 插入供应零件关系。
Insert into spj values(’S2’,’J8’,’P4’,200)
5)将工程J2的预算改为40万元。
Update J SET BG=40 WHERE JNO=’J2’
6)删除工程J8订购的S4的零件。题意为:删除工程J8订购的S4提供零件的供应关系记录。
DELETE FROM SPJ WHERE JNO=’J8’AND SNO=’S4’
(4)
CREATE VIEW P_SPJ_VIEW AS SELECT P.*,SPJ.SNO,SPJ.JNO,QTY
FROM P,SPJ
WHERE P.PNO=SPJ.PNO
1)找出工程代码为J2的工程使用的所有零件名称、数量。
SELECT PNAME,QTY FROM P_SPJ_VIEW WHERE JNO=’J2’
2)找出使用上海产的零件的工程号。
SELECT JNO
FROM P_SPJ_VIEW
WHERE CITY=’上海’
6、在嵌入式SQL中如何区分SQL语句和主语句的?举例说明。
解:
在嵌入式SQL中,为了能够区分SQL语句与主语言语句,所有SQL语句都必须加前缀EXEC SQL。SQL语句的结束标志则随主语言的不同而不同,例如在PL/1和C中以分号(;)结束,在COBOL中以END-EXEC结束。这样,以C或PL/1作为主语言的嵌入式SQL语句的一般形式为:EXEC SQL <SQL语句>;
举例:如下一条交互形式的SQL语句:DROP TABLE S
嵌入到C程序中,应写作:EXEC SQL DROP TABLE S
7、在嵌入式SQL中如何解决数据库工作单元与程序工作单元之间沟通的?
解:
嵌入式SQL语句中可以使用主语言的程序变量来输入或输出数据。把SQL语句中使用的主语言程序变量称为主变量(Host Variable),主变量在数据库工作单元与程序工作单元之间起相互信息或数据沟通作用。主变量在宿主语言程序与数据库之间的作用可参阅图3.5。
图3.5 主变量的通信与传递数据的作用示意图
主变量根据其作用的不同,分为输入主变量、输出主变量和指示主变量。输入主变量由应用程序对其赋值,SQL语句引用;输出主变量由SQL语句对其赋值或设置状态信息,返回给应用程序;一个主变量可以附带一个任选的指示主变量,指示主变量是一个整型变量,用来“指示”所指主变量的值的情况,指示主变量可以指示输入主变量是否希望设置为空值,可以检测输出主变量是否是空值(指示主变量为负值指示所指主变量为空值)。一个主变量可能既是输入主变量又是输出主变量。在SQL语句中使用这些变量时,需在主变量名前加冒号“:”作为标记,以区别于表中的字段(或属性)名。
SQL语句在应用程序中执行后,系统要反馈给应用程序若干信息,这些信息送到SQL的通信区SQLCA(SQL Communication Area)。SQLCA用语句EXEC SQL INCLUDE加以定义。SQLCA是一个数据结构(即SQLCA结构中含有能反映不同执行后状况的多个状态变量如:SQLCODE、SQLERRD1、SQLERRMC、SQLWARN、SQLERRM等),SQLCA中有一个存放每次执行SQL语句后返回代码的状态变量SQLCODE。当SQLCODE为零时,表示SQL语句执行成功,否则返回一个错误代码(负值)或警告信息(正值),一般程序员应该在每个SQL语句之后测试SQLCODE的值。以便根据当前SQL命令执行情况决定后续的处理。
8、SQL的集合处理方式与宿主语言的单记录处理方式之间如何协调?
解:
我们知道一个SQL语句一般能处理一组记录,而主语言一次只能处理一个记录,为此必须协调两种处理方式,使它们相互协调地处理。嵌入式SQL中是引入游标(Cursor)机制来解决这个问题的。
游标是系统为用户开设的一个数据内存缓冲区,用来存放SQL语句的执行结果,每个游标区都有一个名字。用户可以通过游标逐一获取记录,并赋给主变量,再由主语言程序作进一步处理。与游标有关的SQL语句有下列4个:
(1)游标定义语句DECLARE。游标是与某个查询结果相联系的符号名,用SQL的DECLARE语句定义,它是说明性语句,定义时游标定义中的SELECT语句并不马上执行。(情况与视图的定义相似)
(2)游标打开语句OPEN。此时执行游标定义中的SELECT语句,同时游标缓冲区中含有SELECT语句执行后对应的所有记录,游标也处于活动状态。游标指针指向游标中记录结果第一行之前。
(3)游标推进语句FETCH。此时执行游标向前推进一行。并把游标指针指向的当前记录读出,放到FETCH语句中指定的对应主变量中。FETCH语句常置于主语言程序的循环结构中,通过循环逐一处理游标中的一个个记录。
(4)游标关闭语句CLOSE。关闭游标,使它不再和原来的查询结果相联系,同时释放游标占用的资源。关闭的游标可以再次打开、得到新的游标记录后再使用游标、再关闭。
在游标处于活动状态时,可以修改和删除游标指针指向的当前记录。
9、对于简易教学管理数据库有如下3个基本表:S(SNO,SN,AGE,SEX)、SC(SNO,CNO,SCORE)、C(CNO,CN,TH),其含义为SNO(学号),SN(姓名),AGE(年龄),SEX(性别),SCORE(成绩),CNO(课程号),CN(课程名),TH(教师名)。试用SQL语言表达如下查询及操作:
(1)检索年龄大于16岁的女学生的学号和姓名。
(2)检索姓刘的学生选修的所有课程名与教师名。
(3)检索没有选修数据库课程的学生的学号与姓名。
(4)检索至少选修两门课程的学生的学号与姓名。
(5)检索选修课程包含姓张老师所授全部课程的学生的学号与姓名。
(6)把王非同学的学生信息及其选课情况等全部删除。
(7)在课程表中添加一门新课程,其信息为:('C8','信息系统概论','孙力')。
(8)在选修关系表SC中添加所有学生对'C8'课程的选修关系记录,成绩暂定为60,请用一条命令完成本批量添加任务。
(9)把选“信息系统概论”课程的男学生的成绩暂全部初始化重新设置为0。
(1) SELECT SNO,SN
FROM S
WHERE AGE>16 AND SEX='女';
(2) 方法一(联接查询方式):
SELECT CN,TH
FROM S,SC,C
WHERE S.SNO=SC.SNO AND SC.CNO=C.CNO AND SN like '刘%';
方法二(嵌套查询方式):
SELECT CN,TH
FROM C
WHERE CNO IN
(SELECT CNO
FROM SC
WHERE SNO IN
(SELECT SNO
FROM S
WHERE SN like '刘%'));
(3) SELECT SNO,SN
FROM S
WHERE SNO NOT IN
(SELECT SNO
FROM S
WHERE SNO IN
(SELECT SNO
FROM SC
WHERE CNO IN
(SELECT CNO
FROM C
WHERE CN='数据库')));
或
SELECT SNO,SN
FROM S
WHERE SNO NOT IN
(SELECT SNO FROM S,SC,C WHERE S.SNO=SC.SNO AND SC.CNO=C.CNO AND CN='数据库');
(4) 方法一:SELECT DISTINCT X.SNO
FROM SC X
WHERE SNO IN
(SELECT SNO
FROM SC Y
WHERE X.SNO=Y.SNO AND X.CNO<>Y.CNO);
方法二:SELECT DISTINCT X.SNO
FROM SC X,SC Y
WHERE X.SNO=Y.SNO AND X.CNO<>Y.CNO);
方法三:SELECT SNO
FROM SC
GROUP BY SNO HAVING COUNT(*)>=2;
(5)SELECT DISTINCT SX.SNO,SN
FROM SC X,S SX
WHERE NOT EXISTS
(SELECT *
FROM C
WHERE TH LIKE '张%'
AND NOT EXISTS
(SELECT *
FROM SC Y
WHERE X.SNO=Y.SNO AND C.CNO=Y.CNO)) AND X.SNO=SX.SNO ;
或
SELECT DISTINCT X.SNO,X.SN
FROM S X
WHERE NOT EXISTS
(SELECT *
FROM C
WHERE TH LIKE '张%' AND NOT EXISTS
(SELECT *
FROM SC Y
WHERE X.SNO=Y.SNO AND C.CNO=Y.CNO));
(6) DELETE FROM SC
WHERE SNO =
(SELECT SNO
FROM S
WHERE SN='王非');
DELETE FROM S WHERE SN='王非';
(7) INSERT INTO C VALUES('C8','信息系统概论','孙力')
(8) INSERT INTO SC(SNO,CNO,SCORE) SELECT SNO,'C8',60 FROM S
(9) UPDATE SC
SET SCORE=0
WHERE CNO='C8' AND SNO IN
(SELECT SNO
FROM S
WHERE SEX= '男')
或
UPDATE SC
SET SCORE=0
WHERE CNO='C8' AND '男'=
(SELECT SEX
FROM S
WHERE SNO=SC.SNO)
或
-- 最好为如下表示
UPDATE SC
SET SCORE=0
WHERE SNO IN
(SELECT SNO
FROM S
WHERE SEX= '男') AND CNO IN
(SELECT CNO
FROM C
WHERE CN= '数据库')
或
UPDATE SC
SET SCORE=0
WHERE '男'=
(SELECT SEX
FROM S
WHERE SNO=SC.SNO) AND '数据库'=
(SELECT CN
FROM C
WHERE CNO=SC.CNO)
一、选择题
1、C
2、B
3、C
4、C
5、A
6、B
7、A
8、B
9、D
10、B
1、关系模式中数据依赖问题的存在,可能会导致库中数据插入异常,这是指( )。
A.插入了不该插入的数据 B.数据插入后导致数据库处于不一致状态
C.该插入的数据不能实现插入 D.以上都不对
2、若属性X函数依赖于属性Y时,则属性X与属性Y之间具有( )的联系。
A.一对一 B.一对多 C.多对一 D.多对多
3、关系模式中的候选键( )。
联系客服