SQL数据库管理与应用习题与答案 下载本文

第一章

习题: 一、填空题

1.数据处理的首要问题是数据管理。数据管理是指如何【1】、【2】、【3】、【4】及【5】数据。 2.在人工管理数据阶段,应用程序完全依赖于数据,需要应用程序规定数据的【1】,分配数据的【2】,决定数据的【3】,因而导致数据变化时,相应需要修改应用程序。 3.文件系统的三大缺陷表现为:【1】、【2】以及【3】。

4.应用程序开发中存在的\数据依赖\问题是指【1】与【2】的存储、存取方式密切相关。 5.【1】年美国IBM公司研制了世界上第一个数据库管理系统,它的英文名是【2】,缩写为IMS。它的数据模型属于【3】模型。

6.面向计算机的数据模型多以【1】为单位构造数据模型。 7.数据库系统的控制功能表现在如下几点,分别是【1】,【2】,【3】和【4】。 8.数据库中数据的最小存取单位是【1】。文件系统的最小存取单位是【2】。 9.目前使用的数据模型基本上可分为两种类型:一种是【1】,另一种是【2】。 10.数据模型一般来说是由三个部分组成,分别是:【1】、【2】和【3】。

11.数据库系统中是按数据结构的类型来组织数据的。由于采用的数据结构类型不同,通常把数据库分为【1】、【2】、【3】和【4】四种。 12.联系通常有两种:一种是【1】,即实体中属性间的联系;另一种是【2】。 13.实体间的联系是错综复杂的,但就二个实体的联系来说,主要有三种:【1】、【2】和【3】。 14.数据库系统的结构,一般划分为三个层次:叫作【1】,分别为【2】、【3】和【4】。 15.数据库系统(Database Systems,简记DBS)是一个实际可运行的系统。通常由【1】、【2】、【3】和【4】4个部分组成。

16.数据库系统的管理、开发和使用人员主要有:【1】、【2】、【3】和【4】。 二、选择题

1. 按照数据模型分类,数据库系统可以分为三种类型:

A. 大型、中型和小型 B. 西文、中文和兼容 C. 层次、网状和关系 D. 数据、图形和多媒体 2. 下列所述不属于数据库的基本特点的是:

A. 数据的共享性 B. 数据的独立性 C. 数据量特别大 D. 数据的完整性 3. 下边关于数据库系统的正确叙述是:

A. 数据库系统减少了数据冗余 B. 数据库系统避免了一切数据冗余

C. 数据库系统中数据的一致性是指数据类型的一致 D. 数据库系统比文件系统管理更多的数据

4.数据库DB、数据库系统DBS及数据库管理系统DBMS三者之间的关系是: A. DBS包含DB和DBMS B. DBMS包含DB和DBS

C. DB包含DBS和DBMS D. DBS就是DB,也就是DBMS

5.数据库系统的核心是:

A. 数据库 B.操作系统 C. 数据库管理系统 D.文件

6.数据库系统与文件系统的主要区别是:

A. 数据库系统复杂,而文件系统简单。

B. 文件系统不能解决数据冗余和数据独立性问题,而数据库系统可以解决。 C. 文件系统只能管理程序文件,而数据库系统能够管理各种类型文件。 D. 文件系统管理的数据量少,而数据库系统可以管理庞大的数据量。

7.数据库系统是由__A__、__B__、__C__和软件支持系统组成,其中__A__是物质基础,软件支持系统中__D__是不可缺少的,__B__体现数据之间的联系,__C__简称DBA。常见的数据模型有多种,目前使用较多的数据模型为__E__模型。

A~D ①计算机硬件 ②C语言 ③CPU ④数据库管理系统 ⑤数据库 ⑥主菜单⑦人 ⑧网络管理系统

E:①层次②网状③关系④拓朴 8.N元关系的性质:

A. 关系相当于一个随机文件。 B. 每个元组可最多有n个属性。 C. 属性名称可不唯一。

D. 不可能存在内容完全一样的元组。 9.关于关系模型,叙述正确的是:

A. 只可以表示实体之间的简单关系。 B. 实体间的联系用人为连线表示。 C. 有严格的数学基础。

D. 允许处理复杂表格,如一栏包括若干行。 10.关系数据库与其它数据库比:

A. 存储的内容不同 B.查询的方式不同 C. 理是过程化的 D.程序与存储联系紧密 11.关于分布式数据库:

A. 对于数据是物理分布的,而处理和应用是不分布的。 B. 尽量减少冗余度是系统目标之一。

C. 除了数据的逻辑独立性与物理独立性外,还有数据分布独立性。 D. 在物理上是分布的,在逻辑上也是分布的。 12.关于DBMS的叙述:

A. DBMS是介于用户和操作系统之间的一组软件。 B. 不具有开放性。

C. DBMS软件由数据定义语言与数据操作语言构成。 D. 数据字典多数要手工进行维护。

三、简答题

1.简单叙述数据管理技术发展的几个阶段。 2.什么是数据库?

3.什么是数据结构?数据字典? 4.数据库有哪些主要特征?

5.试阐述文件系统和数据库系统的区别和联系。 6.叙述数据库中数据的独立性。

7.关系型数据库与其它数据库相比有哪些优点?

8.数据模型包括哪三个部分?它们分别有什么作用?

9.什么是网状模型?网状模型有什么特点?请举出一个网状模型的例子。

10.什么是层次模型?层次模型有什么特点?请举出一个层次模型的例子。 11.什么是关系模型?关系模型有什么特点?请举出一个关系模型的例子。 12.数据库管理员的主要职责是什么? 13.定义并解释以下术语:

实体、实体型、实体集、属性、属性域、键 模式、内模式、外模式 DDL、DML、DBMS

14.什么是数据与程序的物理独立性?什么是数据与程序的逻辑独立性? 15.模式与内模式的映像有什么作用? 16.模式与子模式的映像有什么作用? 四、综合题

1.请按照下述两种情况分别建立银行---储户---存款单之间的数据模型 (1)一个储户只在固定的一个银行存款 (2)一个储户可以在多个银行存款 这两个模型有什么根本区别?

2.分别指出事物间具有一对一、一对多、多对多联系的三个例子。 3.表间关系可以分为哪几类?定义关系的准则是什么?

4.学校中有若干个系,每个系有若干个班级和教研室,每个教研室有若干个教师,其中有的教授和副教授每人各带若干个研究生。每个班有若干个学生,每个学生选若干课程,每门课程可有若干学生选修。用EER图画出该校的概念模型。

5.某工厂中生产若干产品,每种产品由不同的零件组成,有的零件可用在不同的产品上,这些零件由不同的原材料制成,不同零件所用的材料可以相同。这些零件按所属的不同产品分别放在仓库中,原材料按照类别放在若干仓库中,用E-R图画出此工厂产品、零件、材料、仓库的概念模型。

6.收集尽可能多的关于你和你的学院或大学的关系的表格或报表,例如录取信、课程表、成绩单、课程变化表和评分等级。使用E-R模型,建立你和你的学校的关系中的基础实体的数据模型。

参考答案

一、 填空题 1.答案:【1】分类 【2】组织 【3】存储 【4】检索 【5】维护 2.答案:【1】逻辑结构【2】存储空间【3】数据存取方法 3.答案:【1】数据冗余 【2】不一致性 【3】数据联系弱 4.答案:【1】应用程序【2】数据 5.答案:【1】1968年【2】Information Management System【3】层次 6.答案:【1】记录 7.答案:【1】数据的完整性 【2】数据的安全性 【3】并发控制 【4】数据库的恢复 8.答案:【1】数据项 【2】记录 9.答案:【1】概念模型 【2】数据模型 10.答案:【1】数据结构 【2】数据操作 【3】数据的完备性约束条件

11.答案:【1】层次数据库 【2】网状数据库 【3】关系数据库 【4】面向对象的数据库 12.答案:【1】实体内部的联系 【2】实体与实体之间的联系 13.答案:【1】一对一的联系 【2】一对多的联系 【3】多对多的联系 14.答案:【1】三级模式 【2】子模式 【3】模式 【4】存储模式 15.答案:【1】数据库 【2】硬件 【3】软件 【4】数据库管理员(DBA) 16.答案:【1】数据库管理员 【2】系统分析员 【3】应用程序员 【4】用户 17.答案:【1】表 【2】查询 【3】窗体 【4】报表 【5】Web页 【6】宏 【7】模块 18.答案:【1】行 【2】记录 【3】列 【4】字段 19.答案:【1】QBE(Query By Example) 20.答案:【1】它的数据是活数据而不是死数据,即数据是可变的 21. 答案:【1】声明 【2】语句 【3】过程 【4】标准模块 【5】类模块 【6】类模块 二、选择题

1.C 2.C 3.A 4.A 5.C

6.B 7. ①⑤⑦①④⑤⑦③ 8.D 9.C 10.B 11.C 12.A 三、 简答题

1.数据管理技术经历了如下的4个阶段:人工管理阶段、文件系统阶段、数据库系统阶段、高级数据库技术阶段。

2.答案一:数据库是集中、统一地保存和管理某一单位或某一领域内所有有用信息的系统。这个系统根据数据之间的自然联系结构而成,数据较少冗余,且具有较高的数据独立性,能为多种应用服务。

答案二:数据库是以一定的组织方式存储在一起的、能为多个用户共享的、具有尽可能小的冗余度、与应用彼此独立的相互关联的数据集合。

3.数据结构指数据的组织方式,包括物理方式与逻辑方式。数据字典(简称DD)是对系统中数据的详尽描述,是各类数据属性的清单,在RDBMS中数据字典通常采用和普通数据同样的表示方式,DD在需求分析阶段建立,在数据库设计过程中不断修改、充实、完善。 4.(1)数据库中的数据是结构化的;(2)数据库中的数据是面向系统的,不是面向某一应用的,减少数据冗余、实现数据共享;(3)有较高的数据独立性;(4)数据库系统为用户或应用提供较方便的接口;(5)保证数据的完整性、安全性,提供并发控制和数据恢复等功能;(6)数据库中最小的数据单位是数据项。

5.数据库系统与文件系统相比,克服了文件系统的缺陷。数据库中的数据是结构化的。在文件系统中,从整体上来看,数据是无结构的,即不同文件中的记录型之间没有联系,它仅关心数据项之间的联系。数据库系统不仅考虑数据项之间的联系,还要考虑记录型之间的联系,这种联系是通过存储路径来实现的。数据库中的数据是面向系统的,不是面向某个具体应用的,减少了数据冗余,实现了数据共享。数据库系统比文件系统有较高的数据独立性,数据库系统为用户提供了方便的接口。

6.数据库系统的结构分为3级:用户的数据逻辑结构、整体数据的逻辑结构和数据的物理结构。当整体数据的逻辑结构或数据的物理结构发生变化时,应用不变。 7.1)使用简便,处理数据效率高

2)数据独立性高,有较好的一致性和良好的保密性。 3)数据库的存取不必依赖索引,可以优化。

4)可以动态的导出和维护视图。

5)数据结构简单明了,便于用户了解和维护。 6)可以配备多种高级接口。

8.数据模型包括一组目标型的集合(数据结构)、一组算子(数据操作)和一组通用的完整性规则(数据完整性约束条件)。

(1)一组目标型的集合(数据结构)是研究存储在数据库中对象的属性的集合。包括应用所涉及的对象和对象具有的特征,对象间的联系,是对数据静态特性的描述;

(2)一组算子(数据操作)是指对数据库中各种对象实例的操作。包括检索、插入、修改、删除等,反映了数据的动态特性;

(3)一组通用的完整性规则(数据的完整性约束条件)是指在给定的数据模型中,数据及其联系所遵守的一组通用的完整性规则,他保证数据库数据的正确性、一致性,是对数据静态特性和动态特性的限定。

9.在网状模型中,结点间的联系可以是任意的,任何二个结点间都能发生联系。 在网状模型中,允许:

· 一个结点可以有多个双亲结点; · 多个结点无双亲结点。

例:一个供应商可以供应多个零件,一个零件可以由多个供应商供应。 供应商 零件 供应

10.层次模型是较早用于数据库技术的一种数据模型,它是按层次结构来组织数据的。层次结构也叫树形结构,树中的每个结点代表一种实体类型。这些结点满足: · 有且仅有一个结点无双亲,这个结点称为根结点; · 其它结点有且仅有一个双亲结点。

在层次模型中,根结点处在最上层,其它结点都有上一级结点作为其双亲结点,这些结点称为双亲结点的子女结点,同一双亲结点的子女结点称为兄弟结点。没有子女的结点称为叶结点。在双亲结点到子女结点间表示了实体间的一对多的关系。

例如大学行政机构模型,大学是根结点,也是院、处的双亲结点,院、处是兄弟结点,在大学和院、处两个实体之间分别存在一对多的联系。同样,在院和教研室、班级之间也存在着一对多的关系。

11.所谓关系模型,就是将数据及数据间的联系都组织成关系的形式的一种数据模型。在关系模型中,基本数据结构被限制为二维表格。 特点:

①结构单一化是关系模型的一大特点。

②对关系模型的讨论可以在严格的数学理论基础上进行,这是关系模型的又一大特点。 例:图书管理

表1:借书人的统计表 表2:图书资料登记表

姓名 借书证号 单位 编号 分类号 书名 作者 价格 位置

12.①决定数据库的信息内容。数据库中存放什么信息是由DBA决定的。他们确定应用的实体,实体包括的属性及实体间的联系,完成数据库模式的设计,并同应用程序员一起,完成用户子模式的设计工作。

②决定数据库的存储结构和存取策略。确定数据的物理组织,存放方式及数据存取方法。

③定义存取权限和有效性检验。用户对数据库的存取权限、数据的保密级别和数据的约束条件都是由DBA确定的。

④建立数据库。DBA负责原始数据的装入,建立用户数据库。

⑤监督数据库的运行。DBA负责监视数据库的正常运行,当出现软硬件故障时,能及时排除,使数据库恢复到正常状态,并负责数据库的定期转储和日志文件的维护等工作。

⑥重组和改进数据库。DBA通过各种日志和统计数字分析系统性能。当系统性能下降(如存取效率和空间利用率降低)时,对数据库进重新组织,同时根据用户的使用情况,不断改进数据库的设计,以提高系统性能,满足用户需要。 13.实体(Entity):实体是客观存在并可相互区分的事物。例如人、部门、雇员等都是实体。实体可以指实际的对象,也可以指抽象的对象。

实体型:某些属性的集合所表征的实体的类型。 实体集:具有相同属性(或特性)的实体的集合为实体集。例如全体教师是一个实体集,全体学生也是一个实体集。

属性(Attribute):属性是实体所具有的特性,每一特性都称为实体的属性。例如学生的学号、班级、姓名、性别、出生年月等都为学生的属性。属性是描述实体的特征,每一属性都有一个值域。值域的类型可以是整数型、实数型或字符串型等,如学生的年龄是整数型,姓名是字符串型。 属性域:属性的取值范围。

键(key):键是能唯一标识一个实体的属性及属性值,键也可称为关键字。例如学号是学生实体的键。

模式:也称为概念模式或逻辑模式。它是数据库的总框,是对数据库中全体数据的逻 辑结构和特性的描述。在模式中,有对所有记录类型及其联系的描述,还包括对数据的安全性、完整性等方面的定义。 内模式:也称为存储模式,是对数据库在物理存储器上具体实现的描述。它规定数据在介质上的物理组织形式和记录寻址方式,定义物理存储块的大小和溢出处理方法等。它与模式是对应的。 外模式:也称为子模式,是数据库用户的数据视图。它体现了用户的数据观点,是对用户数据的逻辑描述。其内容与模式描述大致相同。子模式通常是模式的一个子集,也可以是整个模式。所有的应用程序都是根据子模式中对数据的描述而不是根据模式中对数据的描述编写的。子模式也可以共享,在一个子模式上可以编写多个应用程序,但一个应用程序只能使用一个子模式。根据应用的不同,一个模式可以对应多个子模式,子模式可以相互覆盖。子模式对于数据的描述包括结构、类型、长度等(它们可以与模式不同)。

DDL:DBMS提供数据定义语言(DDL),定义数据库的外模式、模式、内模式、数据的完整性约束和用户的权限等。DBMS把用DDL写的各种源模式翻译成内部表示,放在数据字典中,作为管理和存取数据的依据。例如DBMS可把应用的查询请求从外模式,通过模式转换到物理记录,查询出结果返回给应用。

DML:DBMS提供的数据操纵语言(Data Manipulation Language,简记DML)可实现对数据的插入、删除和修改等操作。DML语言有两种用法:一种方法是把DML语句嵌入到高级语言中,如C,COBOL,FORTRAN等高级语言;另一种方法是交互式地使用DML语句。

DBMS:数据库管理系统(DBMS)的职能是有效地实现数据库三级结构之间的转换,它建立在操作系统的基础上,把相应的数据操纵从外模式、模式转换到存储文件上操纵,进行统一的管理和控制,并维护数据库的安全性和完整性。DBMS是数据库系统的核心组成部分。

14.数据的物理独立性:当数据库的存储结构发生变化,可通过模式/内模式间的映象做适当的改变,使模式不变,从而使数据库的全局逻辑结构不变。 数据的逻辑独立性:当数据库的全局逻辑结构发生变化,可通过外模式/模式间的映象做适当的改变,使外模式不变,从而使应用程序保持不变。 15.模式与存储模式的映象定义了数据逻辑结构和物理存储间的对应关系。当数据库的物理存储结构改变时,需要修改模式与存储模式之间的对应关系,而保持模式不变。使全局逻辑数据独立于物理数据,提供了数据的物理独立性。

16.子模式与模式之间的映象定义了它们之间的对应关系,通常包含在子模式中。当全局逻辑结构因某种原因改变时,只要修改子模式与模式间的对应关系,而不必修改局部逻辑结构,相应的应用程序也可不必修改,实现了数据的逻辑独立性。 三、综合题 1 1 1. 存款 银行 (1) 储户 1 n

存款 银行 (2) 储户 两个模型的根本区别是一个是一对一,一个是一对多。 2.一对一:一个病床住一个病人 一对多:一个教室有多个学生

多对多:一个教师教多个学生,一个学生有多个教师

3.在关系数据库中,根据两个表内记录的匹配,可以将表间关系分为三类:一对一关系、一对多关系及多对多关系。 定义关系准则如下:

1)如果两个表中的相关字段只有一个是主键或唯一索引,则定义为一对多的关系; 2)如果两个表中的相关字段都是主键或唯一索引,则定义为一对一的关系; 3)如果两个表都能通过第三个表创建一对多的关系,第三个表的主键包含来源于这两个不同表的两个字段的外部关键字,则这两个表定义为多对多的关系。 4. 系 1 n 班1 m 构成 有 n 学生

选修 1 m n m 有 1 m 1 教师 有 教 教研室 课程

5. 1 零件 产品 构成 存放 m n 1 仓库 m

1 制成 n 材料 1 存放

第二章

习题: 一、填空题

1.设D1,D2,?Dn为n个集合,称

D1?D2???Dn???d1,d2,?dn?di?Di,i?1,2,?n?

为集合D1,D2,?Dn的【1】。其中每一个元素

d1,d2,?dn?叫作一个【2】,元素中

第i个值di叫作第i个【3】。

2.笛卡尔积D1×D2×?×Dn的子集叫作在域D1,D2,?Dn上的【1】。记作:R(D1,D2,?Dn)。其中R表示【2】,n表示【3】。

3.关系模型包括三个部分,它们为【1】、【2】和【3】。 4.关系运算分为两类,一类是【1】,另一类是【2】。其中【1】中常用的有【3】、【4】、【5】、【6】、【7】、【8】和【9】;而【2】又可分为【10】和【11】。

5.关系模型的完整性有三类,分别是【1】、【2】和【3】。

6.在一个公式中,一个元组变量的前面如果没有存在量词?或全程量词?,称这个元组变量为【1】元组变量;否则称为【2】元组变量。

7.关系数据库的体系结构分为三级,即为【1】、【2】和【3】。 8.关系数据库中每个关系的形式是【1】,事物和事物之间的联系在关系模型中都用【2】 来表示,对关系进行选择、投影、联接之后,运算的结果仍是一个【3】。

9.数据模型不仅反映事物的本身的数据,而且表示出【1】。 10.用二维表的形式来表示实体之间联系的数据模型叫做【1】。二维表中的列称为关 系的【2】;二维表中的行称为关系的【3】。

11.在关系数据库的基本操作中,从表中取出满足条件元组的操作称为【1】;把两个 关系中相同属性值的元组连接到一起,形成新的二维表的操作称为【2】;从表中抽取属性值满足条件的列的操作称为【3】。 二、判断题

1.两个关系中元组的内容完全相同,但顺序不同,则他们是不同的关系。【1】 2.两个关系的属性相同,但顺序不同,则两个关系的结构是相同的。【1】 3.关系中的任意两个元组不能相同。【1】

4.关系模型中,实体与实体之间的联系均可用关系表示,数据结构单一。【1】 5.实体完整性要求基本关系的主键属性不能取空值。【1】 6.自然连接只有当两个关系含有公共属性名时才能进行。【1】 三、单项选择题

1. 关系数据库管理系统实现的专门关系运算包括:

A. 排序、索引、统计 B. 选择、投影、联接 C. 关联、更新、排序 D. 显示、打印、制表

2.关系数据库的任何检索操作都是由三种基本运算组合而成,这三种基本运算不包括 A. 联接 B. 比较 C. 选择 D. 投影

3.关系数据模型是当前最常用的一种基本数据模型,它是用__A__结构来表示实体类型和实体间联系的。关系数据库的数据操作语言(DML)主要包括__B__两类操作,关系模型的关系运算是以关系代数为理论基础的,关系代数最基本的操作是__C__。设R和S为两个关系则

R S表示R与S的__D__。若R和S的关系分别图示如下: R:X Y Z S:Y Z W X y z y z u u y z y z w z x u x u y

则R和S自然联接的结果是__E__。 供选择的答案

A:①树②图③网络④二维表

B:①删除和插入②查询和检索③统计和修改④检索和更新

C:①并、差、笛卡尔积、投影、联接②并、差、笛卡尔积、选择、联接 ③并、差、笛卡尔积、投影、选择④并、差、笛卡尔积、除法、投影 D:①笛卡尔积②联接③自然联接 E:①②

X W X Y Z W x u x y z u x w x y z w u u u y z u u w u y z w z y z x u y

X Y Z Y Z W X Y Z W x y z y z u x y z u x y z y z w x y z w x y z x u y x x u y u y z y z u u y z u u y z y z w u y z w u y z x u y u x u y z x u y z u z y z u z x u y z w z y z w

z x u x u y z x u y ④

X Y Z W X y z u u y z w z x u y 4.关于关系: A.是笛卡尔积的任意子集。 B.不同属性不能出自同一个域。 C.实体可用关系来表示,而实体之间的联系不能用关系来表示。 D.关系的每一个分量必须是不可分的数据项。

5.有关实体完整性: A.实体完整性由用户来维护。 B.实体完整性适用于基本表、查询表、视图表。 C.关系模型中主码可以相同。 D.主码不能取空值。 6.对于关系操作的叙述: A.是高度过程化的。 B.关系代数和关系演算各有优缺点,是不等价的。 C.操作对象是集合,而结果不一定是集合。 D.可以实现查询、增、删、改。

7.运算不仅仅是从关系的“水平”方向进行的是: A.并 B.交 C.广义笛卡尔积 D.选择 8.运算不涉及列的是: A.选择 B.连接 C.除 D.广义笛卡尔积 四、多项选择题

1.传统的集合运算包括: A.并 B.交 C.差 D.广义笛卡尔积 2. 专门的关系运算:

A.选择 B.投影 C.连接D.除 3. 对于实体完整性的说明:

A. 一个基本关系通常对应现实世界的一个实体集。 B. 现实世界中实体是可区分的。

C. 关系模型中由主码作为唯一性标识。 D. 由用户维护。 4. 关系模式包括:

A.关系名。

B.组成该关系的诸属性名。 C.属性向域的映象。

D.属性间数据的依赖关系。 5. 关系模型的三类完整性:

A. 实体完整性。 B. 参照完整性。

C. 用户定义的完整性。 D. 系统完整性。

6. 基本关系R中含有与另一个基本关系S的主码K相对应的属性组F(F称为R的外

部码)

A.对于R中每个元组在F上的值可以取空值。

B.对于R中每个元组在F上的值可以等于S中某个元组的主码值。 C.关系S的主码K和F定义在同一个域上。 D.基本关系R、S不一定是不同的关系。

7.两个分别为n、m目的关系R和S的广义笛卡尔积R╳S: A.是一个n+m元组的集合。 B.若R有k1个元组,S有k2个元组,则R╳S有k1*k2个元组。 C.结果集合中每个元组的前n个分量是R的一个元组,后m 个分量是S的一个

元组。

D.R、S可能相同。 8.关于自然连接: A.自然连接只有当两个关系含有公共属性名时才能进行。 B.是从两个关系的笛卡尔积中选择出公共属性值相等的元组。 C.包括左连接和右连接。 D.结果中允许有重复属性。 9.设有关系R和S,R是(m+n)元关系,S是n元关系,且S的属性是R属性的一部分,关于除法R÷S: A.结果是一个m元的新关系。 B.关系R的第(m+I)个属性与关系S的第I个属性定义在同一个域上。 C.结果关系中每一个元组包含属于R而不属于S的属性。 D.S中的元组在P中有对应的元组存在,并且余留的属性相同。 10.关于关系演算: A.分为元组关系演算和域关系演算。 B.关系运算都可以用关系演算来表达。 C.在定义关系演算的运算时,可同时定义“自由”元组变量和“约束” 元组变量的概念。 D.自由的元组变量类似于程序设计语言中的局部变量。 五、简答题

1.什么是实体完整性?什么是范围完整性?什么是引用完整性?举例说明。 2.简述在关系数据库中,一个关系应具有那些性质?

3.给出下列术语的定义:关系模型,关系模式,关系子模式,关系,属性,域,元组,关系数据库,外键。

4.请给出下列各种术语的定义,并各举一例加以说明:

并,差,交,迪卡尔积,选择,投影,连接,自然连接,左连接,右连接,除法。 5. 公式中运算符的优先次序是怎样的?

6. 试用关系代数的五种基本运算来表示交、连接(包括自然连接)和除等运算。 7. 給出关系并兼容的定义,并分别举出两个是并兼容和不是并兼容关系的例子。 六、综合题

1.有数据库的关系模式如下:

S(S#,SNAME,AGE,SEX) SC(S#,C#,GRADE)

C(C#,CNAME,TEACHER)

用关系代数表达式表示下列查询语句:

(1)检索LIU老师所授课程的课程号、课程名。 (2)检索年龄大于23岁的男学生的学号、姓名。 (3)检索WANG同学所学课程的课程号。 (4)检索至少选修2门课程的学生学号。

(5)检索至少选修LIU老师所授全部课程的学生姓名。 2.设有关系R和S(如图)

R

A 3 2 7 1 B 6 5 2 1 C 7 7 3 3 S

C 3 7 D 4 2 E 5 3

计算:(1)R∪S (2)R-S (3)R×S (4)∏3,2,1(S) (5)σB<5 (R) (6)R∩S(计算并、交、差时,不考虑属性名,仅仅考虑属性的顺序。) 3.有数据库的关系模式如下: 供应商关系S(S#(供应商号),SNAME(供应商名),status(供应商年龄),city(供应商所在城市))

零件关系P(P#(零件号),PNAME(零件名),color(零件颜色),weight(零件重量)) 供应关系SP(S#(供应商号),P#(零件号),qty(供应量)) 用关系代数表达式表示下列查询语句: (1)给出供应零件p2的供应商名。

(2)将新的供应商记录<'s5','tom',30,'athens'>插入到s关系中。 (3)将供应商s1供应的p1零件的数量改为300。 (4)求供应红色零件的供应商名。 (5)给出供应全部零件的供应商名。

(6)给出供应s2供应的全部零件的供应商名。

4.有以下三个关系:

SALESPERSON(销售人员)

Name Age Salary Abel Baker Jones Murphy Zenith Kobad 63 38 26 42 59 27 120,000 42,000 36,000 50,000 118,000 34,000

ORDER(定单) SalespersonName Zenith Jones Abel Abel Murphy Abel Jones Number 100 200 300 400 500 600 700 CustName Amount 560 1800 480 2500 6000 700 150 Abemathy Construction Abemathy Construction Manchester Lumber Amalgamated Housing Abemathy Construction Tri-city Builders Manchester Lumber Name

CUSTOMER(顾客) City Willow Manchester Memphis Memphis Industry Type B F B B Abemathy Construction Manchester Lumber Tri-city Builders Amalgamated Housing (1) 给出SALESPERSON和ORDER积的例子。 (2) 给出下列查询的关系代数表达 a. 所有销售人员的姓名

b. 具有ORDER行的销售人员的姓名

c. 不具有ORDER行的销售人员的姓名

d. 具有order为ABERNATH CONSTRUCTION的销售人员的姓名 e. 具有order为ABERNATH CONSTRUCTION的销售人员的年龄 f. 所有和销售人员JONES有定单(order)的所有客户所在的城市

参考答案

一、填空题

1.答案:【1】笛卡尔积【2】元组【3】分量 2.答案:【1】关系(relation)【2】关系的名称 【3】关系的度或目 3.答案:【1】数据结构 【2】关系操作 【3】关系的完备性 4.答案:【1】关系代数 【2】关系演算 【3】并 【4】交 【5】差 【6】除法 【7】选择 【8】投影 【9】连接 【10】元组关系演算 【11】域关系演算 5.答案:【1】实体完整性 【2】参照完整性 【3】用户定义的完整性 6.答案:【1】自由的 【2】约束的 7.答案:【1】关系子模式 【2】关系模式 【3】关系内模式 8.答案:【1】二维表 【2】关系【3】关系 9.答案:【1】数据之间的联系 10.答案:【1】关系模型【2】属性【3】元组

11.答案:【1】选择【2】联接【3】投影

二、判断题 1.答案:【1】错 2.答案:【1】对 3.答案:【1】对 4.答案:【1】对 5.答案:【1】对 6.答案:【1】对 三、单项选择题

1.B 2.B 3.④④③③④ 4.D 5.D 6.D 7.D 8.D 四、多项选择题

1.ABCD 2.ABCD 3.ABC 4.ABCD 5.ABC 6.ABCD 7.ABCD

8.ABC 9.ABCD 10.ABC 五、简答题

1. 实体完整性要求基本关系的主键属性不能取空值,空值是没有定义的值。例:学生

关系S(S#,Sname,Age)中,学号S#为主键,则在记录输入时系统对S#为空的记录拒绝输入。

参照完整性:若关系R2包含一个与关系R1的主码相匹配的代码,则关系R2中代码的某一个值都必须满足:a.等于R1中某元组的主码值。或b.为空值。例:雇员关系和部门关系emp(e#,dep#…),dept(dep#…),emp中的dep#的值必等于dept中某个dep#(表示此雇员在某部门)或为空值(表示此雇员还未分配部门,故没有部门号)。

用户定义的完整性是针对数据库中具体数据的约束条件,是由应用环境决定的。它

反映了某一具体的应用所涉及的数据必须要满足的语义要求。例:关系S中Age的输入必须满足年、月、日的范围,否则视为非法。

2.数据库中关系的性质

①列是同质的,即每一列中的分量是同一类型的数据,来自同一个域。 ②不同的列可来自相同的域,每一列中有不同的属性名。 ③列的次序可以任意交换。

④关系中的任意两个元组不能相同。

⑤行的次序如同列的次序,可以任意交换。 ⑥每一个分量必须是不可分的数据项。

3.关系模型:是建立在数学概念上的,与层次模型、网状模型相比较,是一种最重要的数据模型。所谓关系模型,就是将数据及数据间的联系都组织成关系的形式的一种数据模型。在关系模型中,基本数据结构被限制为二维表格。该数据模型包括三个部分:数据结构、关系操作和关系的完备性。

关系模式:是对数据库中数据的一些特征的描述。每一个被定义的关系模式包括关

系名、属性名、值域及主键,它不涉及物理存储方面的问题。关系模式是二维表的表框架,相当于文件记录中的记录格式。设关系名为REL,其属性为A1,A2,?An,则关系的关系模式可以记为REL(A1,A2,?An)。

关系子模式:同数据库的体系结构中定义的子模式一样,是用户的视图,是模式的子集。关系子模式是由实表产生的。产生子模式时,除了指出用户所用的数据之外,还要指出子模式与模式的关系,即指出模式与子模式之间的映像。

关系:某一时刻对应某个关系模式的内容称为相应模式的状态,它是元组的集合,称为关系(模式中的关系又称为实表)。

属性:属性是实体所具有的特性,每一特性都称为实体的属性。 域:属性的取值范围。

元组:关系数据库:许多二维表组成的相关的关系的集合。

外键:设X是关系R的一个属性集,X并非R的键,但在另一个关系中,X是键,则称X是R的一个外键。在两个关系建立联系时,外键提供了一个桥梁。

4.有关系R(A,B,C)={(a,b,c),(d,e,f),(c,b,d)} 和 S(A,B,C)={(b,g,a),(d,e,f)},以下以这两个关系为例。

并:关系R和S的并是由属于R或S或同时属于R和S的元组组成的集合,记为R∪S,关系R和S应有相同的目,即有相同的属性个数,并且类型相同。

R∪S={(a,b,c),(d,e,f),(c,b,d),(b,g,a)} 差:关系R和S的差是由属于R而不属于S的所有元组组成的集合,记为R-S,关系R和S应有相同的目,并且类型相同。

R-S={(a,b,c),(c,b,d)}

交:关系R和S的交是由同时属于R和S的元组组成的集合,记为R∩S。 R∩S={(d,e,f)}

笛卡尔积:设R为n目关系,S为m目关系,则R和S的笛卡尔积为n+m目关系,记为R×S。其中,前n个属性为R的属性集,后m个属性是S的属性集,结果关系中的元组为每一个R中元组与所有的S中元组的组合。

R×S={(a,b,c,b,g,a),(d,e,f,b,g,a),(c,b,d,b,g,a),(a,b,c,d,e,f),(d,e,f,d,e,f),(c,b,d,d,e,f)}

选择:选择运算是根据给定的条件对关系进行水平分解,选择符合条件的元组。选择条件用F表示,也可称F为原子公式。在关系R中挑选满足条件F的所有元组,组成一个新的关系,这个关系是关系R的一个子集,记为:

?F(R) 或SLF(R)

其中:?表示选择运算符,R是关系名,F是选择条件。 ?B='b'(R)={(a,b,c),(c,b,d)}

投影:设R是一个n目关系,Ai1,Ai2,?Aim是R的第i1,i2,?im(m≤n)个属性,则关系R在Ai1,Ai2,?Aim上的投影定义为:

∏i1,i2,?im(R)={t|t =(ti1,ti2, ?tim)∧(ti1,ti2,?tim)∈R}

其中:∏为投影运算符,其涵义是从R中按照i 1,i 2,?i n的顺序取下这m列,构成以i 1,i 2,?i n为顺序的m目关系。 ∏A(S)={b,d}

以下以这两个关系为例R(A,B,C)={(1,2,3),(4,5,6),(7,8,9)} S(B,D)={(2,7),(8,1)} 连接:是从关系R与S的笛卡尔积中,选取R的第i个属性值和S的第j个属性值之间满足一定条件表达式的元组,这些元组构成的关系是R×S的一个子集。

设关系R和S是K 1目和K 2目关系 ,θ是算术比较运算符,R与S连接的结果是一个(K 1+K 2)目的关系。

R∞S={(1,2,3,2,7),(4,5,6,2,7)}

C

自然连接:是连接运算的一种特殊情况。自然连接只有当两个关系含有公共属性名时才能进行。其意义是从两个关系的笛卡尔积中选择出公共属性值相等的那些元组构成的关系。

R∞S={(1,2,3,7),(7,8,9,1)} 左连接:“R左连接T”的结果关系是包括所有来自R的元组和那些连接字段相等处的T的元组。

右连接:“R右连接T”的结果关系是包括所有来自T的元组和那些连接字段相等处的R的元组。

除法:设有关系R和S,R是(m+n)元关系,S是n关系,且S的属性是R属性的一部分。R与S的除法运算表示为:

W=R÷S

除法操作的结果产生一个m元的新关系,关系R的第(m+i)个属性与关系S的第i个属性定义在同一个域上(i=1,2,3,?n)。

结果关系W由这样的一些元组组成:每一个元组包含属于R而不属于S的属性;S中的元组在P中有对应的元组存在,并且余留的属性相同。

例:R(X,Y)={(x1,y1),(x2,y2),(x1,y3),(x2,y4),(x1,y5)} S(Y)={y1,y3} R÷S={x1}

5.公式中运算符的优先次序是:算术比较运算最高,存在量词和全程量词次之,逻辑运算符最低,且按﹁、∧和∨的次序排列。如果有括号,则括号中的运算优先级最高,利用括号可以改变优先次序。 6.交:R∩S=R-(R-S) 连接:R∞S=δRAθSB(R*S)除: AθB

7.若两个关系的属性的度相同,且每个关系的第I个属性(I=1,2,3…)取值于同一个域,则称之为并兼容的关系。例R1(A1,A2,A3) 与R2(B1,B2)不可做并兼容的关系,而R(A,B,C)与S(A,B,C)可做并兼容的关系。

六、综合题

1.(1)∏C#,CNAMEδTEACHER='LIU'(S)

(2) ∏S#,SNAMEδAGE>23∧SEX='男’(S) (3) ∏C#δ S.SNAME='WANG'(S∞SC) (4) ∏S#δsc1.c#>sc2.c#(SC1∞SC2) (5) ∏SNAME((∏S#,C#(SC)÷∏C#δTEACHER='LIU'(C)) ∞S) 2.(1){(3,6,7),(2,5,7),(7,2,3),(1,1,3),(3,4,5)} (2){(3,6,7),(2,5,7),(1,1,3)}

(3){(3,6,7,3,4,5),(2,5,7,3,4,5),(7,2,3,3,4,5),(1,1,3,3,4,5),(3,6,7,7,2,3),(2,5,7,7,2,3),

(7,2,3,7,2,3,),(1,1,3,7,2,3)}

(4){(5,4,3),(3,2,7)} (5){(7,2,3),(1,1,3)} (6){(7,2,3)}

3. (1) ∏SNAMEδSP.P#='P2'(S∞SP)

(2) S∪{<'s5','tom',30,'athens'>}

(3) SP-{<'s1','p1',_>} ∪{<'s1','p1',300>} (4) ∏SNAME(∏S#(∏P#δcolor='red'(P)∞sp) ∞S)

(5) ∏SNAME ((∏S#,P#(SP) ÷∏P#(P)) ∞S)

(6) ∏SNAME((∏S#,P#(SP) ÷∏P#δS#='S2' (SP)) ∞S)

4.(1) Name Abel Baker ……

(2) a. ∏Name(SALESPERSON)

Age Salary Number CustName 63 38 120,000 42,000 100 100 SalespersonName Amount

Zenith Zenith 560 560 Abemathy Construction Abemathy Construction

b. ∏NameδSALESPERSON.Name=ORDER.SalespersonName (SALESPERSON∞ORDER)

c. ∏Name(SALESPERSON)- ∏NameδSALESPERSON.Name=ORDER.SalespersonName (SALESPERSON∞ORDER)

d. ∏NameδORDER.CustName='Abemathy Construction'∧SALESPERSON.Name=ORDER.SalespersonName (SALESPERSON∞ORDER)

第三章

习题: 一、填空题:

1.数据依赖的类型有很多,其中最重要的是【1】和【2】。

2.实体类型的【1】之间相互依赖又相互限制的关系称为数据依赖。 3.被F逻辑蕴涵的函数依赖的集合称为F的【1】。

4.如果一个关系模式R的每一个属性的域都只包含单一的值,则称R满足【1】。 5.如果关系模式R满足【1】,而且它的所有非主属性完全函数依赖于候选键,则R满足【2】。

6.如果关系模式R满足【1】,并且它的任何一个非主属性都不传递依赖于任何候选键,则R满足【2】。

7.关系模式R中,若每一个决定因素都包含键,则关系模式R属于【1】。 二、判断题:

1.函数依赖是指关系模式R的某个或某些元组满足的约束条件。【1】

2.如果在同一组属性子集上,不存在第二个函数依赖,则该组属性集为候选键。【1】 3.如果一个关系模式∈3NF,则该关系模式一定∈BCNF。【1】

4.如果一个关系数据库模式中的关系模式都属于BCNF,则在函数依赖的范畴内,已实现了彻底的分离,消除了插入、删除和修改的异常。【1】

5.规范化的过程是用一组等价的关系子模式,使关系模式中的各关系模式达到某种程度的“分离”,让一个关系描述一个概念、一个实体或实体间的一种联系。规范化的实质就是概念的单一化。【1】

6.规范化理论为数据库设计提供了理论的指南和工具。规范化程度越高,模式就越好。【1】

7.一个无损连接的分解一定保持函数依赖。【1】 8.一个保持函数依赖的分解一定具有无损连接。【1】 三、单项选择题:

1. 有关函数依赖错误的是:

A.函数依赖实际上是对现实世界中事物的性质之间相关性的一种断言。 B.函数依赖是指关系模式R的某个或某些元组满足的约束条件。 C.函数依赖是现实世界中属性间关系的客观存在。 D.函数依赖是数据库设计者的人为强制的产物。

2.对于键的描述错误的是:

A.键是唯一地确定一个实体的属性的集合。 B.主键是候选键的子集。 C.主键可以不唯一。

D.主键可以包含多个属性。

3.对于第三泛式的描述错误的是: A.如果一个关系模式R不存在部分依赖和传递依赖,则R满足3NF。 B.属于BCNF的关系模式必属于3NF。 C.属于3NF的关系模式必属于BCNF。

D.3NF的”不彻底”性表现在当关系模式具有多个候选键,且这些候选键具有公共属性时,可能存在主属性对键的部分依赖和传递依赖。 4.关系模式的规范化错误的是: A.规范化的关系消除了操作中出现的异常现象。 B.规范化的规则是绝对化的,规范化的程度越高越好。 C.关系模式规范化的过程是通过`对关系模式进行分解来实现的。 D.对多数应用来说,分解到3NF就够了。 5.关于函数依赖和多值依赖错误的是: A.都描述了关于数据之间的固有联系。 B.在某个关系模式上,函数依赖和多值依赖是否成立,由关系本身的语义属性确定。 C.函数依赖是多值依赖的特殊情况。 D.X->Y、X->->Y在R(U)上是否成立仅与XY值有关 四、简答题:

1.要使一个表成为关系,必须施加什么约束?

2.定义函数依赖。给出一个其两个属性间有函数依赖的例子,给出一个其两个属性间没有函数依赖的例子。

3.给出一个有函数依赖的关系的例子,其中的决定因素有两个或多个属性。 4.什么是删除异常?举例说明。 5.什么是插入异常?举例说明。

6.定义第二泛式,举出一个在1NF但不在2NF中的关系的例子,并把该关系转化到2NF中。

7.定义第三泛式,举出一个在2NF但不在3NF中的关系的例子,并把该关系转化到3NF中。

8.定义BCNF,举出一个在3NF但不在BCNF中的关系的例子,并把该关系转化到BCNF中。

五、应用题:

1.某工厂需建立一个产品生产管理数据库,管理如下信息:

车间编号、车间主任姓名、车间电话,车间职工的职工号、职工姓名、性别、年龄、工种,车间生产的零件号、零件名称、零件的规格型号,车间生产一批零件有一个批号、数量、完成日期(同一批零件可以包括多种零件)。

(1) 试按规范化的要求给出关系数据库模式。 (2)指出每个关系模式的候选键、外键。

2.关系模式S-L-C(S#,SD,SL,C#,G),其中S#为学生号,SD为系名,SL为系住址(规定一个系住在一个地方),C#为课程号,G为课程成绩,写出可能的函数依赖,并将此关系模式规范化为2NF,3NF。

3.考虑如下的关系定义和样本数据:

PROJECT(ProjectID,EmployeeName,EmployeeSalary),其中ProjectID是项目的名字,EmployeeName是该项目的姓名,EmployeeSalary是名为EmployeeName的雇员的薪水。

PROJECT Relation ProjectID 100A 100A 100B EmployeeName Jones Smith Smith EmployeeSalary 64k 51k 51k 200A 200B 200C 200C 200D Jones Jones Parks Smith Parks 64k 64k 28k 51k 28k 假定所有的函数依赖和约束都显示在数据中,则以下哪个陈述是对的? a. ProjectID?EmployeeName b. ProjectID?EmployeeSalary

c. (ProjectID,EmployeeName)?EmployeeSalary d. EmployeeName?EmployeeSalary e. EmployeeSalary?ProjectID

f. EmployeeSalary?(ProjectID,EmployeeName) 回答如下问题:

g. PROJECT的关键字是什么?

h. 所有的非关键字属性(如果有的话)都依赖于整个关键字吗? i. PROJECT在哪个泛式中?

j. 描述PROJECT会遇到的两个更新异常。 k. ProjectID是决定因素吗?

l. EmployeeName是决定因素吗?

m. (ProjectID,EmployeeName) 是决定因素吗? n. EmployeeSalary是决定因素吗?

o. 这个关系包含传递依赖吗?如果包含,是什么? p. 重新设计该关系,消除更新异常。

参考答案

一、填空题

1.答案:【1】函数依赖(Functional Dependency简记FD) 【2】多值依赖(Multivalued Dependency简记MVD) 2.答案:【1】属性 3.答案:【1】闭包 4.答案:【1】第一范式 5.答案:【1】第一范式【2】第二范式 6.答案:【1】第二范式【2】第三范式 7.答案:【1】BCNF范式 二、判断题

1.答案:【1】错 2.答案:【1】对 3.答案:【1】错 4.答案:【1】对 5.答案:【1】对

6.答案:【1】错 7.答案:【1】错 8.答案:【1】错 三、单项选择题 1.B 2.C 3.C 4.B 5.D 四、简答题

1.列是同质的,即每一列中的分量是同一类型的数据,来自同一个域;不同的列可出自同一个域;列的顺序无所谓;任意两行不能相同;行的顺序无所谓;每一分量必须是不可分的数据项。

2.函数依赖是属性之间的一种关系,它意味着,如果我们给定了一个属性的值,我们就可以获得(查到)另一个属性的值。在关系(S#(学生号),SD(系名),MN(系负责人),CN(课名),G(成绩))中,一个系有若干个学生,但一个学生只属于一个系,有S#->SD,一个学生可以选修多门课程,每门课程有若干学生选修,每个学生学习每一门课程有一个成绩。则S#-/—>G。 3.如上例,(S#,C#)->G。

4.在2题中,有一组函数依赖{S#->SD,SD—>MN,(S#,CN)—>G},若某个系的学生全部毕业了,则在删除该系学生选修课程的信息的同时,把这个系及其负责人的信息也丢掉了,为删除异常。

5.在2题中,有一组函数依赖{S#->SD,SD—>MN,(S#,CN)—>G},如果一个系刚成立,尚无学生,或虽有了学生,还未安排课程,则无法把这个系及其负责人的信息存入数据库,为插入异常。 6.若R∈1NF,且每一个非主属性完全函数依赖于码,则R∈2NF。如关系S-L-C(S#(学号),SD(系别),SL(系所在住处),C#(课程号),G(成绩)) ,规定每个系只住一个地方,则函数依赖有{(S#,C#)->G,S#->SD,S#->SL,SD—>SL},此关系属于1NF,转为2NF为SC(S#,C#,G),S-L(S#,SD,SL)。

7.关系模式R〈U,F〉中若不存在这样的码X,属性组Y及非主属性Z(Z Y)使得X->Y,Y—>Z,Y—/—>X成立,则称R<U,F>∈3NF。 接上题转为3NF为S-D(S#,SD),D-L(SD,SL)。

8.关系模式R〈U,F〉∈1NF,若X->Y且Y X时X必含有码,则R<U,F>∈BCNF。 如关系模式STJ(S,T,J)中,S表示学生,T表示教师,J表示课程,每一教师只教一门课,每门课有若干教师

五、应用题:

1. (1)workshop(wid,wname,wtel)、emp(sid,sname,sex,age,type,wid)、

part(pno,pname,wid,specno,groupno,manu-time,qty)

(2)workshop候选键wid; emp候选键sid、外键wid; part候选键pno、外键wid

2. 函数依赖(S#,C#)-f->G, SD?SL, S#?SD, S#?SL, (S#,C#)-p->SD, (S#,C#)-p->SL

2NF:SC(S#,C#,G), S-L(S#,SD,SL)

3NF:S-D(S#,SD), D-L(SD,SL), SC(S#,C#,G)

3. g) ProjetctID,EmployeeName

h) 否 I)1NF j)修改EmployeeName时要改多个ProjectID,雇员没参加项目则没有项目的名字,则无法插入记录。

k)不 l)不 m)是 n)不 o)不

p)(EmployeeName,EmployeeSalary)?

第四章

1. 简述数据库设计的总体思路

2. SQL SERVER的4个基本服务是什么?核心服务是什么?

3. 在C盘根目录创建Student文件夹,用于保存试验数据库和SQL脚本文件,使用SQL

SERVER企业管理器创建一个学生成绩系统的数据库,数据库名称为Student,数据文件和日志文件保存在C:\\Student文件夹中。

(提示:学生成绩系统可以用下面两个数据表来处理学生基础数据和成绩数据。)

学生表(Student)基本数据表的字段

字段名 StudentCode StudentName Phone Address Parent Birthdate Photo Remark RegisterDate 类型 Char Varchar Varchar Varchar Varchar Smalldatetime Image Varchar Datetime 长度 8 20 20 100 20 500

成绩表(Score)基本数据的字段

字段名 StudentCode ExamType Chinese Math English Physics 类型 Char Char Decimal Decimal Decimal Decimal 长度 8 1 5 5 5 5 小数位 1 1 1 1 Chemist Decimal 5 1 其中:“ExamType”(考试类别)一列的代码为: 1——第一次月考 4——期末考 2——第二次月考 5——第一次小考 3——第三次月考 6——第二次小考

4. 使用SQL SERVER企业管理器创建一个零件供应系统数据库,数据库名称为Product,

数据文件和日志文件保存在C:\\Student文件夹中。可以采用不同的方法建立如下的三个数据表:库存零件表PART、报价表QUATATIONS和供应商标SUPPLIERS。具体表结构和数据如下所示:

PART(零件表)

PNO(零件号) 101 102 105 203 207 215 PNAME(零件名称) CAM BOLT GEAR BELT WHEEL WASHER

QUTY(库存量) 150 300 50 30 120 1300 QUATATIONS(报价表)

SNO 51 51 52 52 58 67 67 69 69 PNO 101 105 101 203 102 207 215 105 203

PRICE(报价) D_TIME(供货时间) 25 10 42 15 20 15 13 7 9 5 34 12 4 3 36 20 15 10

SUPPLIERS(供应商表) SNAME LIMING XINGHUA KEHAI VESAM SMITH HUAHE CITY BEIJING TIANJIN BEIJING SHANGHAI SHANGHAI BEIJING DELIQUTY(供货量) 50 100 75 50 200 0 500 40 30

SNO 51 52 58 67 69 75

5. 打开“教学质量评价系统”数据库系统,看看它的设计结构和特色,体会本章内容,(请

您保存这三个数据表,以供后面习题使用)。 答案:

6. SQL SERVER数据库系统提供两种创建数据库的方法创建以上的表

7. 在数据表中,必须为每个字段指定一个数据类型。SQL SERVER字段的数据类型有哪

些?。

8. 在字符型字段中,Char类型与Varchar类型有何区别?这两种类型适用于哪些数据环

境?

9. DateTime类型与SmallDataTime有何区别? 10. 货币型字段一般精度为小数点后几位?

11. 简述SQL SERVER中物理表和临时表的区别,临时表的类型有哪些?有何区别? 12. 数据库设计中最难处理的步骤是确定需要哪些数据表,这种理解是否正确?

13. 命名字段名称时是否可以使用大写、小写、大小写混合的英文或中文? 14. 数据表的结构和名称确定以后,如何修改表结构,增加或者删除列?如何改变列的数据

类型。

15. 请使用T-SQL语句为学生表增加性别(Sex)字段,数据类型Bit。 16. 使用T-SQL语句删除学生表中的照片(Photo)字段。 17. 在成绩表中增加“学生编号”(ScoreID)字段,类型为Int,设置改字段为自增类型。 18. 修改数据表字段的属性,在什么情况下可能造成数据的丢失?

19. 在数据表设计中,有哪些类型的字段的大小可以增加?

20. 思考在草拟每个数据的字段时是否可以包含推导或计算的数据(表达式的计算结果), 21. 命明字段时应遵循的规则有哪些?

22. 设计一个新的数据库系统一般应该要经过哪些基本的步骤? 23. 在设计数据表时,应该按哪些原则对信息进行分类? 24. SQL SERVER关系数据库管理系统的的优点是什么? 25. 简单描述SQL SERVER的数据库组成。 26. 列举SQL SERVER支持的数据类型?

参考答案

参考答案 1.答案:

? 确定新建数据库的目的。 ? 确定该数据库中需要的表。 ? 确定表中需要的字段。 ? 明确有唯一值的字段。 ? 确定表之间的关系。 ? 优化设计。

? 输入数据并新建其他数据库对象。

2.答案:

基本服务

MSSQL SERVER

SQL SERVER AGENT MS SEARCH MS DTC

核心服务 MSSQL SERVER 3.答案:

CREATE DATABASE [student] ON (

NAME = N'student_Data',

FILENAME = C:\\student\\\\student_Data.MDF' , SIZE = 1, FILEGROWTH = 10%

)

LOG ON (

NAME = N'student_Log',

FILENAME = C:\\student\\student_Log.LDF' , SIZE = 1, FILEGROWTH = 10% )

CREATE TABLE Student (

StudentCode Char(8),

StudentName Varchar (20), Phone Varchar (20), Address Varchar (100), Parent Varchar (20), Birthdate Smalldatetime , Photo Image ,

Remark Varchar (500), RegisterDate Datetime )

CREATE TABLE Score (

StudentCode Char(8), ExamType Char(1), Chinese Decimal (5,1), Math Decimal (5,1), English Decimal (5,1), Physics Decimal (5,1), Chemist Decimal (5,1) )

4.答案:

CREATE TABLE PART (

PNO VARCHAR(10) NOT NULL, PNAME VARCHAR(50) NOT NULL, QUTY INT NOT NULL )

CREATE TABLE QUATATIONS (

SNO VARCHAR(10) NOT NULL, PNO VARCHAR(10) NOT NULL,

PRICE INT NOT NULL, D_TIME DATATIME ,

DELIQUTY INT NOT NULL )

CREATE TABLE SUPPLIERS (

SNO VARCHAR(10) NOT NULL, SNAME VARCHAR(50) NOT NULL, CITY VARCHAR(520) NOT NULL, )

5.答案:无 6.答案: 1.使用企业管理器表设计器 2.使用T-SQL语句 7.答案:

精确数字 整数

bigint

从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。 int

从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字)。 smallint

从 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整数数据。 tinyint

0 到 255 的整数数据。 bit

1 或 0 的整数数据。 decimal

从 -10^38 +1 到 10^38 –1 的固定精度和小数位的数字数据。 numeric

功能上等同于 decimal。 money

货币数据值介于 -2^63 (-922,337,203,685,477.5808) 与 2^63 - 1 (+922,337,203,685,477.5807) 之间,精确到货币单位的千分之十。 smallmoney

货币数据值介于 -214,748.3648 与 +214,748.3647 之间,精确到货币单位的千分之十。

近似数字

float

从 -1.79E + 308 到 1.79E + 308 的浮点精度数字。

real

从 -3.40E + 38 到 3.40E + 38 的浮点精度数字。 datetime

从 1753 年 1 月 1 日到 9999 年 12 月 31 日的日期和时间数据,精确到百分之三秒(或 3.33 毫秒)。 smalldatetime

从 1900 年 1 月 1 日到 2079 年 6 月 6 日的日期和时间数据,精确到分钟。

字符串

char

固定长度的非 Unicode 字符数据,最大长度为 8,000 个字符。 varchar

可变长度的非 Unicode 数据,最长为 8,000 个字符。 text

可变长度的非 Unicode 数据,最大长度为 2^31 - 1 (2,147,483,647) 个字符。

Unicode 字符串

nchar

固定长度的 Unicode 数据,最大长度为 4,000 个字符。 nvarchar

可变长度 Unicode 数据,其最大长度为 4,000 字符。sysname 是系统提供用户定义的数据类型,在功能上等同于 nvarchar(128),用于引用数据库对象名。 ntext

可变长度 Unicode 数据,其最大长度为 2^30 - 1 (1,073,741,823) 个字符。 二进制字符串 binary

固定长度的二进制数据,其最大长度为 8,000 个字节。 varbinary

可变长度的二进制数据,其最大长度为 8,000 个字节。 image

可变长度的二进制数据,其最大长度为 2^31 - 1 (2,147,483,647) 个字节。

其它数据类型

cursor

游标的引用。 sql_variant

一种存储 SQL Server 支持的各种数据类型(text、ntext、timestamp 和 sql_variant 除外)值的数据类型。 table

一种特殊的数据类型,存储供以后处理的结果集。 timestamp

数据库范围的唯一数字,每次更新行时也进行更新。 uniqueidentifier

全局唯一标识符 (GUID)。

1. 答案:

char[(n)]

长度为 n 个字节的固定长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为 n 个字节。

长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。所输入的数据字符长度可以为零。 9. 答案:

在 SQL Server 2000 中,日期和时间数据使用 datetime 和 smalldatetime 数据类型存储。使用 datetime 数据类型存储从 1753 年 1 月 1 日至 9999 年 12 月 31 日的日期(每个数值要求 8 个字节的存储空间)。使用 smalldatetime 数据类型存储从 1900 年 1 月 1 日至 2079 年 6 月 6 日的日期(每个数值要求 4 个字节的存储空间)。

10. 答案:

money 和 smallmoney 被限制到小数点后 4 位。

11. 答案: 临时表与永久表相似,但临时表存储在 tempdb 中,当不再使用时会自动删除。

有本地和全局两种类型的临时表,二者在名称、可见性和可用性上均不相同。本地临时表的名称以单个数字符号 (#) 打头;它们仅对当前的用户连接是可见的;当用户从 SQL Server 2000 实例断开连接时被删除。全局临时表的名称以数学符号 (##) 打头,创建后对任何用户都是可见的,当所有引用该表的用户从 SQL Server 断开连接时被删除。

12. 答案: 不正确,除了确定需要哪些数据表之外,还需要确定表之间的关系 13. 答案: 可以 14. 答案: 1.使用企业管理器表设计器 2.ALTER TABLE 语句 增加列 ALTER TABLE table_name ADD column_name datatype 删除列ALTER TABLE table_name DROP COLUMN column_name 修改列ALTER TABLE table_name ALTER COLUMN column_name datatype

15. 答案:

ALTER TABLE Student ADD sex bit

16. 答案: ALTER TABLE Student

DROP COLUMN photo

17. 答案:

ALTER TABLE Student

ADD ScoreID int identity(1,1)

18. 答案: 在将字符表达式转换为不同大小的字符数据类型时,有可能发生数据丢失。例如从 char(20) 转换为 char(15)),新数据类型的值太短将被截断。 19. 答案:

Char、Varchar、nchar、nvarchar 20. 答案: 不建议这样做。需要推导或者计算的数据应由查询语句计算。如果创建了储存推导或者计算结果的数据列,那么在源数据字段的数值修改后,需要手工或者使用触发器维护计算列中的结果数据。

21. 命明字段时应遵循的规则有哪些?

(1) 包含的字符数必须在1~128之间。

(2) 第一个字符必须是Unicode 标准 2.0 所定义的字母(拉丁字母 a-z 和 A-Z,

以及来自其他语言的字母字符)、下划线 (_)、at 符号(@)或者编号符(#)。

(3) 后续字符可以是Unicode 标准 2.0 所定义的字母、来自基本拉丁字母或其他国

家/地区脚本的十进制数字、美元符号 ($)、下划线、at 符号或编号符。

(4) 标识符不能是 Transact-SQL 的保留字。SQL Server 保留其保留字的大写和小

写形式。

(5) 不允许嵌入空格或其他特殊字符。

(6) 列名在表中必须唯一,不同表中可以允许有相同的列名。

22. 答案:

(1) 确定该数据库中需要的表。 (2) 确定表中需要的字段。 (3) 确有唯一值的字段。 (4) 确定表之间的关系。 (5) 优化设计。

(6) 输入数据并新建其他数据库对象。

23. 在设计数据表时,应该按哪些原则对信息进行分类?

(1) 对收集的信息和数据进行分析整理,确定实体、属性及它们之间的联系

(2) 将各个用户的局部视图合并成一个总的全局视图,形成独立于计算机的反映用

户观点的概念模式。

(3) 概念模式与具体DBMS无关,接近现实世界,用户容易理解

24. SQL SERVER关系数据库管理系统的优点是什么?

(1) 关系数据库所使用关系语言班的特点是高度非过程化,即用户只需说明“做什

么”而不必说明“怎么做”。

(2) 用户不必请求数据库管理员为其建立特殊的存取路径,存取路径的选择是由

DBMS(数据库管理系统)自动完成的。

(3) 支持结构化查询语言标准以及丰富的数据对象(表、约束、索引、视图、存储

过程、触发器等)

(4) 事务、并发处理能力强 (5) 管理方便 25. 26.

答案:

数据库文件*.mdf 日志文件*.ldf

列举SQL SERVER支持的数据类型?

? bigint

从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。 ? int

从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字)。 ? smallint

从 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整数数据。 ? tinyint

0 到 255 的整数数据。 ? bit

1 或 0 的整数数据。 ? decimal

从 -10^38 +1 到 10^38 –1 的固定精度和小数位的数字数据。 ? numeric

功能上等同于 decimal。 ? money

货币数据值介于 -2^63 (-922,337,203,685,477.5808) 与 2^63 - 1 (+922,337,203,685,477.5807) 之间,精确到货币单位的千分之十。 ? smallmoney

货币数据值介于 -214,748.3648 与 +214,748.3647 之间,精确到货币单位的千分之十。 ? float

从 -1.79E + 308 到 1.79E + 308 的浮点精度数字。 ? real

从 -3.40E + 38 到 3.40E + 38 的浮点精度数字。 ? datetime

从 1753 年 1 月 1 日到 9999 年 12 月 31 日的日期和时间数据,精确到百分之三秒(或 3.33 毫秒)。 ? smalldatetime

从 1900 年 1 月 1 日到 2079 年 6 月 6 日的日期和时间数据,精确到分钟。 ? char

固定长度的非 Unicode 字符数据,最大长度为 8,000 个字符。 ? varchar

可变长度的非 Unicode 数据,最长为 8,000 个字符。 ? text

可变长度的非 Unicode 数据,最大长度为 2^31 - 1 (2,147,483,647) 个字符。 ? nchar

固定长度的 Unicode 数据,最大长度为 4,000 个字符。 ? nvarchar

可变长度 Unicode 数据,其最大长度为 4,000 字符。sysname 是系统提供用户定义的数据类型,在功能上等同于 nvarchar(128),用于引用数据库对象名。 ? ntext

可变长度 Unicode 数据,其最大长度为 2^30 - 1 (1,073,741,823) 个字符。 二进制字符串 ? binary

固定长度的二进制数据,其最大长度为 8,000 个字节。 ? varbinary

可变长度的二进制数据,其最大长度为 8,000 个字节。 ? image

可变长度的二进制数据,其最大长度为 2^31 - 1 (2,147,483,647) 个字节。 ? cursor 游标的引用。 ? sql_variant

一种存储 SQL Server 支持的各种数据类型(text、ntext、timestamp 和 sql_variant 除外)值的数据类型。 ? table

一种特殊的数据类型,存储供以后处理的结果集。 ? timestamp

数据库范围的唯一数字,每次更新行时也进行更新。 ? uniqueidentifier

全局唯一标识符 (GUID)。

第五章

1. 简述T-SQL语句的类型和作用

2. 简述SQL SERVER中局部变量和全局变量的使用区别 3. 在Student数据库中,有以下关系表

学生表(Student)基本数据表的字段

字段名 StudentID StudentCode StudentName Sex Phone Address Parent 类型 Int (Identity) Char Varchar Bit Varchar Varchar Varchar 长度 8 20 20 100 20 Birthdate Remark RegisterDate Smalldatetime Varchar Datetime 500

成绩表(Score)基本数据的字段

字段名 StudentCode ExamType Chinese Math English Physics Chemist 类型 Char Char Decimal Decimal Decimal Decimal 长度 8 1 5 5 5 5 5 小数位 1 1 1 1 1 Decimal 其中:“ExamType”(考试类别)一列的代码为: 1——第一次月考 4——期末考 2——第二次月考 5——第一次小考 3——第三次月考 6——第二次小考

(1) 在查询分析器中执行sp_help Student 存储过程和sp_help Score 存储过程可以查看

Student和Score表的定义。

(2) 请按要求完成以下查询:

(3) 查询学生的列表,按照姓名的拼音顺序进行排序。 (4) 查询姓“王”的同学。

(5) 查询出生日期在1986-10-1至1986-12-31日之间的所有学生。

(6) 查询学生的考试成绩列表,按照数学、外语、物理的由高到低的顺序进行排序 (7) 查询有不及格(<60分)科目的学生。

(8) 计算每个学生的期末考试所有科目的总成绩,并按照总成绩由高到低的顺序进行排

(9) 如查询的列名存在“空格”,例如某字段名称为“Student Name”在查询语句中应该

如何处理?

(10) 删除编号为ScoreID最大的学生,然后插入新的学生记录,观察ScoreID(自增类型)

列值的变化

(11) 使用T-SQL语句插入学生记录,获取系统当前日期和时间作为RegisterDate列的值。

4. SQL SERVER中起注释作用的标记是哪些? 5. 简述T-SQL语句聚合函数有哪些作用是什么?

6. 分别简述内连接和左外连接查询的工作方式以及区别

7. 思考并简述在哪些情况下应该使用左外联结,哪些情况下使用内连接 8. 简述子查询的工作方式

9. 在Product数据库中,具体表结构和数据如下所示:

PART(零件表)

PNO(零件号) 101 102 105 203 PNAME(零件名称) CAM BOLT GEAR BELT QUTY(库存量) 150 300 50 30 207 215 WHEEL WASHER

120 1300 QUATATIONS(报价表)

SNO 51 51 52 52 58 67 67 69 69 PNO 101 105 101 203 102 207 215 105 203

PRICE(报价) D_TIME(供货时间) 25 10 42 15 20 15 13 7 9 5 34 12 4 3 36 20 15 10

SUPPLIERS(供应商表) SNAME LIMING XINGHUA KEHAI VESAM SMITH HUAHE CITY BEIJING TIANJIN BEIJING SHANGHAI SHANGHAI BEIJING DELIQUTY(供货量) 50 100 75 50 200 0 500 40 30

SNO 51 52 58 67 69 75 10. 请按要求完成以下需求:

(1) 计算SUPPLIERS(供应商)表中,每个城市有多少格供应商, (2) 什么SQL 语句提供了复制表结构以及表表中数据的方法? (3) 使用Case…when语句更新QUATATIONS(报价表),价格小于10元的零件价格上

调5%,价格高于30元的零件价格上调10%,价格介于10-30元之间的零件价格上调15%

(4) 使用Case…when查询学生的数学,查询类表为:StudentName, Math,Type。其中Type

列按照数学成绩90、80、70、60几种情况显示优、良、中、及格、不及格5个类型。

(5) 从QUATATIONS(报价表)中删除库存为0的零件记录

(6) 请简述INSERT …SELECT 语句与SELECT …INTO语句的区别?

(7) 请使用SELECT …INTO语句将QUATATIONS(报价表)中D_TIME(供货时间)

小于10天数据复制到QUATATIONSBAK表中。

(8) 请使用INSERT…SELECT语句将QUATATIONS(报价表)中DELIQUTY(供货量)

大于100的数据插入到QUATATIONSBAK表中

(9) 请使用SELECT …INTO语句将QUATATIONS(报价表)中D_TIME(供货时间)

小于10天数据复制到#QUATATIONSBAK表中,打开新的连接回话验证能否使用SELECT语句访问#QUATATIONSBAK表。

(10) 请使用SELECT …INTO语句将QUATATIONS(报价表)中D_TIME(供货时间)

小于10天数据复制到##QUATATIONSBAK表中,打开新的连接回话验证能否使用SELECT语句访问##QUATATIONSBAK表。

有如下的三个数据表:科研课题表KYKT、科研情况表KYQK和科研人员表KYRY

科研课题表KYKT

KTID(课题编号) 101 KTNAME(课题名称) KTJF(课题经费)(万元计) CAD 150 102 105 203 207 215 CAM CAPP CIMS GT ERP 科研情况表KYQK

30 50 300 12 130

RYID 51 51 52 52 58 67 67 69 69 KTID 101 105 101 203 102 207 215 105 203 SBF(设备费) GZL(工作量:日) SYJF(使用经费) 15 400 80 5 180 25 10 400 70 40 600 200 30 5 200 1 90 12 25 700 130 4 200 25 15 600 100

科研人员表KYRY

RYID(人员编号) RYNAME(人员姓名) ZC(职称) SEX(性别) ADDR(地址) 51 ZHANGSAN ENGEENER FEMALE BEIJING 52 LISI PROFESSOMALE TIANJIN 58 WANGWU DOCTOR MALE BEIJING 67 ZHAOLIU MASTER MALE SHANGHAI 69 LIUHONG ENGEENER MALE SHANGHAI 75 YANGDA PROFESSOFEMALE BEIJING 按要求写出SQL查询语句

(1)查询课题经费小于100万元的课题编号其名称。

(2)查询能同时参加编号为207和215课题的科研人员编号。 (3)查询科研情况表中所有科研人员的编号。 (4)检索52号科研人员的信息。 (5)检索101号课题的平均工作量。

(6)检索工作量在200~400日的课题编号、人员编号、及工作量,并按工作量排序。 (7)在科研人员表中追加一个科研者(53,DAIHONG,DOCTOR,MALE,TIANJIN)。 (8)删除51号科研人员的所有科研课题。

(9)修改203号课题的课题经费为120万元。 (10)把52号科研人员的工作量减少10%。

11. 有以下三个关系:

SALESPERSON(销售人员) Age 63 38 26 42 59 27

CustName

Name Abel Baker Jones Murphy Zenith Kobad Number

Salary 120,000 42,000 36,000 50,000 118,000 34,000 ORDER(定单)

SalespersonName

Amount

100 200 300 400 500 600 700 Name Abernathy Construction Abernathy Construction Manchester Lumber Amalgamated Housing Abernathy Construction Tri-city Builders Manchester Lumber Zenith Jones Abel Abel Murphy Abel Jones 560 1800 480 2500 6000 700 150 Industry Type B F B B CUSTOMER(顾客) City Willow Manchester Memphis Memphis Abernathy Construction Manchester Lumber Tri-city Builders Amalgamated Housing (1)

(2) (3) (4) (5)

显示所有Salespeople的Ages和salary。

显示所有Salespeople的Ages和salary但是去掉重复的行。 显示所有三十岁以下的Salespeople。

显示所有的和ABERNATHY CONSTRUCTION有订单的Salespeople。 显示所有的和ABERNATHY CONSTRUCTION没有订单的Salespeople,按工资的升序进行排列。

(6) 计算订单的数量。

(7) 计算有订单的客户的数量。 (8) 计算Salepeople的平均年龄。

(9) 显示年龄最大的Salepeople的年龄。 (10) 计算每一个Salepeople的订单数。

(11) 计算每一个Salepeople的订单数,结果只包括订单数量在500个以上的。

(12) 显示所有的和ABERNATHY CONSTRUCTION有订单的Salepeople的年龄和姓名,

按年龄的降序进行排列(使用子查询)。

(13) 显示所有的和ABERNATHY CONSTRUCTION有订单的Salepeople的年龄和姓名,

按年龄的降序进行排列(使用连接)。

(14) 显示和在MEMPHIS中的一个客户有订单的Salespeople的年龄(使用子查询)。 (15) 显示和在MEMPHIS中的一个客户有订单的Salespeople的年龄(使用连接)。 (16) 显示和在MEMPHIS中的所有公司的工业类型和公司所有订单的销售员的年龄。 (17) 显示有两个或两个以上订单的销售员的姓名。

(18) 显示有两个或两个以上订单的销售员的姓名和年龄。 (19) 显示所有和客户有订单的销售员的姓名。

(20) 写出在CUSTOMER表中添加一条记录的SQL语句。

(21) 写出在SALESPERSON表中添加一条记录的SQL语句,已知年龄和姓名,工资未

知。

(22) 写出删除客户ABERNATHY CONSTRUCTION的SQL语句。

(23) 写出删除客户ABERNATHY CONSTRUCTION的所有订单SQL语句。 (24) 写出将销售员JONES的工资改成45000的SQL语句。 (25) 写出将所有的销售员的工资加10%的SQL语句。

(26) 假设销售员JONES的名字改成PARKS,写出对应的SQL语句。

参考答案

1. 答案:

DDL(数据定义)语句,包括: CREATE 语句:创建和定义数据对象 ALTER语句:修改数据对象的定义 DROP语句:删除数据对象 DCL(数据控制)语句,包括: GRANT语句,授权对象的访问权限 REVOKE语句,收回对象的访问权限 DENY语句,禁止对象的访问权限 DML(数据操作)语句,包括:

SELECT语句,从表或视图中查询数据 INSERT 语句,向表中插入数据 DELETE语句,删除表中的数据 UPDATE语句,更新表中的数据

2. 答案:

T-SQL 局部变量是可以保存特定类型的单个数据值的对象。批处理和脚本中的变量通常用于:

? 作为计数器计算循环执行的次数或控制循环执行的次数。 ? 保存数据值以供控制流语句测试。

? 保存由存储过程返回代码返回的数据值。

Transact-SQL 全局变量能够反映系统的运行状态,为函数形式,在SQL SERVER 2000中作为函数引用。

有关更多信息,请参见函数。

3. 在Student数据库中,有以下关系表

学生表(Student)基本数据表的字段

字段名 StudentID StudentCode StudentName Sex Phone Address Parent Birthdate Remark RegisterDate 类型 Int (Identity) Char Varchar Bit Varchar Varchar Varchar Smalldatetime Varchar Datetime 长度 8 20 20 100 20 500

成绩表(Score)基本数据的字段

字段名 StudentCode ExamType 类型 Char Char 长度 8 1 小数位 Chinese Math English Physics Chemist Decimal Decimal Decimal Decimal 5 5 5 5 5 1 1 1 1 1 Decimal 其中:“ExamType”(考试类别)一列的代码为: 1——第一次月考 4——期末考 2——第二次月考 5——第一次小考 3——第三次月考 6——第二次小考 创建表:

CREATE TABLE Student (

StudentID int identity(1,1) StudentCode Char(8)

StudentName Varchar (20), Phone Varchar (20), Address Varchar (100), Parent Varchar (20), Birthdate Smalldatetime , Photo Image ,

Remark Varchar (500), RegisterDate Datetime )

CREATE TABLE Score (

StudentCode Char(8), ExamType Char(1), Chinese Decimal (5,1), Math Decimal (5,1), English Decimal (5,1), Physics Decimal (5,1), Chemist Decimal (5,1) )

录入数据

(1) 在查询分析器中执行sp_help Student 存储过程和sp_help Score 存储过程可以

查看Student和Score表的定义。 Exec sp_help Student Exec sp_help Student

请按要求完成以下查询:

(2) 查询学生的列表,按照姓名的拼音顺序进行排序。

SELECT * FROM Student ORDER BY StudentName

(3) 查询姓“王”的同学。

SELECT * FROM Student

WHERE StudentName LIKE ?%王%?

(4) 查询出生日期在1986-10-1至1986-12-31日之间的所有学生。

SELECT * FROM Student

WHERE Birthdate BETWEEN ?1986-10-1? AND ?1986-12-31?

(5) 查询学生的考试成绩列表,按照数学、外语、物理的由高到低的顺序进行排序

SELECT * FROM Student

ORDER BY Math DESC, English DESC, Physics DESC

(6) 查询有不及格(<60分)科目的学生。

SELECT StudentName, Math ,English ,Physics,Chemist ,Chinese FROM Student LEFT JOIN Score

ON Score. StudentCode= Student. StudentCode

WHERE Math <60 OR English <60 OR Physics <60 OR Chemist <60 OR Chinese <60

(7) 计算每个学生的期末考试所有科目的总成绩,并按照总成绩由高到低的顺序进

行排序

SELECT StudentName, (Math +English +Physics+Chemist +Chinese) AS Total FROM Student LEFT JOIN Score

ON Score. StudentCode= Student. StudentCode ORDER BY Total DESC

(8) 如查询的列名存在“空格”,例如某字段名称为“Student Name”在查询语句中

应该如何处理?

SELECT “Student Name” FROM Student

(9) 删除编号为StudentID最大的学生,然后插入新的学生记录,观察StudentID (自

增类型)列值的变化 DELETE FROM Student

WHERE StudentID =(SELECT MAX(StudentID) FROM Student) GO

INSERT INTO STUDENT(StudentCode,StudentName) VALUES(?001?,?TEST?)

(10) 使用T-SQL语句插入学生记录,获取系统当前日期和时间作为RegisterDate列

的值。

INSERT INTO STUDENT(StudentCode,StudentName,RegisterDate) VALUES(?001?,?TEST?,getdate())

4. SQL SERVER中起注释作用的标记是哪些

SQL Server 支持两种类型的注释字符:

--。这些注释字符可与要执行的代码处在同一行。从双连字符开始到行尾均为注释。对于多行注释,必须在每个注释行的开始使用双连字符。

/* ... */。这些注释字符可与要执行的代码处在同一行,也可另起一行,甚至在可执行代码内。从开始注释对 (/*) 到结束注释对 (*/) 之间的全部内容均视为注释部分。对于多

5.

6.

7.

8.

9.

行注释,必须使用开始注释字符对 (/*) 开始注释,使用结束注释字符对 (*/) 结束注释。注释行上不应出现其它注释字符。

简述T-SQL语句聚合函数有哪些作用是什么?

聚合函数是对一组行中的某个列执行计算,并返回单个值。 常用聚合函数包括: SUM() 列值的合计 COUNT()列值的计数 AVG() 列值的平均值 MAX() 列中最大的值 MIN() 列中最小的值

分别简述内连接和左外连接查询的工作方式以及区别

外连接:外连接会返回 FROM 子句中提到的至少一个表或视图的所有行。 左外连接执行时,检索通过左外联接引用的左表的所有行,以及通过右向外联接引用的右表的所有行 右外连接执行时,检索通过右外联接引用的右表的所有行,以及通过左向外联接引用的左表的所有行

思考并简述在哪些情况下应该使用左外联结,哪些情况下使用内连接 仅当至少有一个同属于两表的行符合联接条件时,内联接才返回行。内联接消除与另一个表中的任何行不匹配的行。而外联接会返回 FROM 子句中提到的至少一个表或视图的所有行。

如果希望显示两个表中按某一条件匹配的数据行,请使用内连接。

如希望显示某一表中所有的数据行,使用左外连接,并将该表放在LEFT关键字左边,即左外联接引用表,也称为 “左表”

简述子查询的工作方式

子查询是一个 SELECT 查询,它返回单个值且嵌套在 SELECT、INSERT、UPDATE、DELETE 语句或其它子查询中。

任何允许使用表达式的地方都可以使用子查询。 外部查询可以使用子查询生成的结果集,包括查询子查询返回的结果集和与结果集中的数据进行比较

在Product数据库中,具体表结构和数据如下所示:

PART(零件表)

PNO(零件号) 101 102 105 203 207 215 PNAME(零件名称) CAM BOLT GEAR BELT WHEEL WASHER

QUTY(库存量) 150 300 50 30 120 1300 QUATATIONS(报价表)

SNO PNO PRICE(报价) D_TIME(供货时间) 51 101 25 10 51 105 42 15 DELIQUTY(供货量) 50 100 52 52 58 67 67 69 69 101 203 102 207 215 105 203

20 13 9 34 4 36 15

15 7 5 12 3 20 10 SUPPLIERS(供应商表) SNAME LIMING XINGHUA KEHAI VESAM SMITH HUAHE 75 50 200 0 500 40 30

SNO 51 52 58 67 69 75 CITY BEIJING TIANJIN BEIJING SHANGHAI SHANGHAI BEIJING

CREATE TABLE PART (

PNO INT ,

PNAME VARCHAR(10), QUTY INT )

CREATE TABLE QUATATIONS (

SNO INT, PNO INT, PRICE INT, D_TIME INT, DELIQUTY INT, )

CREATE TABLE SUPPLIERS (

SNO INT ,

SNAME VARCHAR(10), CITY VARCHAR(10) )

按要求完成以下需求:

(1) 计算SUPPLIERS(供应商)表中,每个城市有多少格供应商

SELECT CITY,COUNT(SNAME) FROM SUPPLIERS GROUP BY CITY

(2) 什么SQL 语句提供了复制表结构以及表表中数据的方法?

SELECT ….INTO语句

SELECT * FROM SUPPLIERS INTO SUPPLIERS2

(3) 使用Case…when语句更新QUATATIONS(报价表),价格小于10元的零件价格上

(4)

(5)

(6)

(7)

(8)

调5%,价格高于30元的零件价格上调10%,价格介于10-30元之间的零件价格上调15%

UPDATE QUATATIONS CASE

WHEN price <10 THEN price*1.05 WHEN (price>10 and price <30) THEN price*1.15 WHEN price >30 THEN price*1.10 END

使用Case…when查询学生的数学,查询类表为:StudentName, Math,Type。其中Type列按照数学成绩90、80、70、60几种情况显示优、良、中、及格、不及格5个类型。 SELECT StudentName, Math, CASE WHEN Math>=90 THEN ?优? WHEN Math>=80 AND Math<90 THEN ?良?

WHEN Math>=70 AND Math<80 THEN ?中? WHEN Math>=60 AND Math<70 THEN ?及格? WHEN Math<50 THEN ?不及格? END AS Type FROM student INNER JOIN score

ON Student. Studentcode =Score.Studentcode Order by Math

从PART(零件表)中删除库存为0的零件记录 DELETE FROM PART WHERE QUTY=0

请简述INSERT …SELECT 语句与SELECT …INTO语句的区别?

INSERT 语句中的 SELECT 子查询可用于将一个或多个其它的表或视图的值添加到表中。

SELECT INTO 语句创建一个新表,并用 SELECT 的结果集填充该表。新表的结构由选择列表中表达式的特性定义。

二者区别是INSERT SELECT是将查询结果插入到现有的表中,SELECT INTO 是将查询结果创建为一个新表。

请使用SELECT …INTO语句将QUATATIONS(报价表)中D_TIME(供货时间)小于10天数据复制到QUATATIONSBAK表中。 SELECT * FROM QUATATIONS INTO QUATATIONSBAK WHERE D_TIME<10

请使用INSERT…SELECT语句将QUATATIONS(报价表)中DELIQUTY(供货量)大于100的数据插入到QUATATIONSBAK表中 INSERT INTO QUATATIONSBAK

(SNO,PNO,PRICE, D_TIME,DELIQUTY) SELECT

SNO,PNO,PRICE, D_TIME,DELIQUTY FROM QUATATIONS

WHERE DELIQUTY>100

(9) 请使用SELECT …INTO语句将QUATATIONS(报价表)中D_TIME(供货时间)

小于10天数据复制到#QUATATIONSBAK表中,打开新的连接回话验证能否使用SELECT语句访问#QUATATIONSBAK表。 SELECT * FROM QUATATIONS INTO #QUATATIONSBAK WHERE D_TIME<10

(10) 请使用SELECT …INTO语句将QUATATIONS(报价表)中D_TIME(供货时间)

小于10天数据复制到##QUATATIONSBAK表中,打开新的连接回话验证能否使用SELECT语句访问##QUATATIONSBAK表。 SELECT语句访问#QUATATIONSBAK表。 SELECT * FROM QUATATIONS INTO ##QUATATIONSBAK WHERE D_TIME<10

10. 有如下的三个数据表:科研课题表KYKT、科研情况表KYQK和科研人员表KYRY

科研课题表KYKT

KTID(课题编号) 101 102 105 203 207 215 KTNAME(课题名称) KTJF(课题经费)(万元计) CAD 150 CAM 30 CAPP 50 CIMS 300 GT 12 ERP 130 科研情况表KYQK

RYID 51 51 52 52 58 67 67 69 69 KTID 101 105 101 203 102 207 215 105 203 SBF(设备费) GZL(工作量:日) SYJF(使用经费) 15 400 80 5 180 25 10 400 70 40 600 200 30 5 200 1 90 12 25 700 130 4 200 25 15 600 100

科研人员表KYRY

RYID(人员编号) RYNAME(人员姓名) ZC(职称) SEX(性别) ADDR(地址) 51 ZHANGSAN ENGEENER FEMALE BEIJING 52 LISI PROFESSOMALE TIANJIN 58 WANGWU DOCTOR MALE BEIJING 67 ZHAOLIU MASTER MALE SHANGHAI 69 LIUHONG ENGEENER MALE SHANGHAI 75 YANGDA PROFESSOFEMALE BEIJING

创建表:

CREATE TABLE KYKT (

KTID INT,

KTNAME VARCHAR(10), KTJF INT )

CREATE TABLE KYQK (

RYID INT, KTID INT, SBF INT, GZL INT, SYJF INT )

CREATE TABLE KYRY (

RYID INT,

RYNAME VARCHAR(10), ZC VARCHAR(10), SEX VARCHAR(10), ADDR VARCHAR(50) )

按要求写出SQL查询语句

(1)查询课题经费小于100万元的课题编号其名称。 SELECT * FROM KYKT

WHERE KTJF<100

(2)查询能同时参加编号为207和215课题的科研人员编号。 SELECT RYID FROM KYQK AS A

WHERE KTID=207 AND RYID IN (

SELECT RYID FROM KYQK WHERE KTID=205 )

(3)查询科研情况表中所有科研人员的编号。 SELECT RYID FROM KYRY (4)检索52号科研人员的信息。 SELECT * FROM KYRY

WHERE RYID=52

(5)检索101号课题的平均工作量。 SELECT KTID ,AVG(GZL) FROM KYQK

GROUP BY KTID

WHERE KTID=101

(6)检索工作量在200~400日的课题编号、人员编号、及工作量,并按工作量大小排序。 SELECT GZL ,KTID, RYID FROM

WHERE GZL>=200 AND GZL< =400

ORDER BY GZL DESC

(7)在科研人员表中追加一个科研者(53,DAIHONG,DOCTOR,MALE,TIANJIN)。

INSERT INTO KYRY (RYID,RYNAME,ZC,SEX,ADDR)

VALUES(53,?DAIHONG?,?DOCTOR,?MALE,?TIANJIN?)

(8)删除51号科研人员的所有科研课题。 DELETE FROM KYQK

WHERE RYID=51

(9)修改203号课题的课题经费为120万元。 UPDATE KYKT

SET KTJF=120 WHERE KTID=203

(10)把52号科研人员的工作量减少10%。 UPDATE KYQK

SET GZL=GZL*(1-0.1) WHERE RYID=52

11. 有以下三个关系:

SALESPERSON(销售人员) Age 63 38 26 42 59 27 CustName Name Abel Baker Jones Murphy Zenith Kobad Number 100 200 300 400 500 Salary 120,000 42,000 36,000 50,000 118,000 34,000 ORDER(定单) SalespersonName Zenith Jones Abel Abel Murphy Amount 560 1800 480 2500 6000 Abernathy Construction Abernathy Construction Manchester Lumber Amalgamated Housing Abernathy Construction 600 700 Name Tri-city Builders Manchester Lumber Abel Jones 700 150 Industry Type B F B B CUSTOMER(顾客) City Willow Manchester Memphis Memphis Abernathy Construction Manchester Lumber Tri-city Builders Amalgamated Housing CREATE TABLE SALESPERSON ( AGE INT,

NAME VARCHAR(10), Salary MONEY )

CREATE TABLE ORDER (

Number INT, CustName VARCHAR(10), SalespersonName VARCHAR(10) Amount INT )

CREATE TABLE CUSTOMER (

NAME INT,

CITY VARCHAR(10), Industry VARCHAR(10) )

(1) 显示所有Salespeople的Ages和salary。

SELECT Ages , salary FROM SALESPERSON

(2) 显示所有Salespeople的Ages和salary但是去掉重复的行。

SELECT DISTINCT Ages , salary FROM SALESPERSON

(3) 显示所有三十岁以下的Salespeople。

SELECT *

FROM SALESPERSON WHERE Ages<30

(4) 显示所有的和ABERNATHY CONSTRUCTION有订单的Salespeople。

SELECT Name,Age,Salary FROM SALESPERSON INNER JOIN ORDER

ON SALESPERSON.Name=ORDER. SalespersonName

WHERE CustName=? ABERNATHY CONSTRUCTION?

(5) 显示所有的和ABERNATHY CONSTRUCTION没有订单的Salespeople,按工资的升

序进行排列。

SELECT Name, salary FROM SALESPERSON WHERE name NOT IN (

SELECT SalespersonName

WHERE CustName=? ABERNATHY CONSTRUCTION? )

ORDER BY salary DESC

(6) 计算订单的数量。

SELECT COUNT(Number) FROM ORDER

(7) 计算有订单的客户的数量。

SELECT CustName ,COUNT(Name) FROM CUSTOMER GROUP BY CustName

(8) 计算Salepeople的平均年龄。

SELECT AVG(AGE) FROM SALESPERSON

(9) 显示年龄最大的Salepeople的年龄。

SELECT MAX(AGE) FROM SALESPERSON

(10) 计算每一个Salepeople的订单数。

SELECT Name,COUNT(Number) FROM SALESPERSON LEFT JOIN ORDER

ON SALESPERSON.Name=ORDER. SalespersonName

(11) 计算每一个Salepeople的订单数,结果只包括订单数量在500个以上的。

SELECT Name,COUNT(Number) FROM SALESPERSON LEFT JOIN ORDER

ON SALESPERSON.Name=ORDER. SalespersonName HAVING COUNT(Number)>500

(12) 显示所有的和ABERNATHY CONSTRUCTION有订单的Salepeople的年龄和姓名,

按年龄的降序进行排列(使用子查询)。 SELECT Name, salary FROM SALESPERSON WHERE Name IN (

SELECT SalespersonName

WHERE CustName=? ABERNATHY CONSTRUCTION? )

(13) 显示所有的和ABERNATHY CONSTRUCTION有订单的Salepeople的年龄和姓名,

按年龄的降序进行排列(使用连接)。 SELECT Name,Age,Salary FROM SALESPERSON INNER JOIN ORDER

ON SALESPERSON.Name=ORDER. SalespersonName WHERE CustName=? ABERNATHY CONSTRUCTION?

(14) 显示和在MEMPHIS中的一个客户有订单的Salespeople的年龄(使用子查询)。

SELECT Name,Age,Salary FROM SALESPERSON WHERE Name IN (

SELECT SalespersonName FROM ORDER WHERE CustName IN (

SELECT NAME FROM CUSTOMER WHERE City =? Memphis? ) )

(15) 显示和在MEMPHIS中的一个客户有订单的Salespeople的年龄(使用连接)。

SELECT Name,Age,Salary FROM SALESPERSON INNER JOIN ORDER

ON SALESPERSON.Name=ORDER. SalespersonName INNER JOIN CUSTOMER

ON CUSTOMER. Name= ORDER.CustName WHERE City =? Memphis?

(16) 显示和在MEMPHIS中的所有公司的工业类型和公司所有订单的销售员的年龄。

SELECT Industry Type ,Name,Age,Salary FROM SALESPERSON INNER JOIN ORDER

ON SALESPERSON.Name=ORDER. SalespersonName INNER JOIN CUSTOMER

ON CUSTOMER. Name= ORDER.CustName WHERE City =? Memphis?

(17) 显示有两个或两个以上订单的销售员的姓名。

SELECT Name,COUNT(Number) FROM SALESPERSON LEFT JOIN ORDER

ON SALESPERSON.Name=ORDER. SalespersonName HAVING COUNT(Number)>=2

(18) 显示有两个或两个以上订单的销售员的姓名和年龄。

SELECT Name,Age FROM SALESPERSON WHERE Name IN (

SELECT Name,COUNT(Number) FROM SALESPERSON

LEFT JOIN ORDER

ON SALESPERSON.Name=ORDER. SalespersonName HAVING COUNT(Number)>=2 )

(19) 显示所有和客户有订单的销售员的姓名。

SELECT Number, CustName,SalespersonName,mount, Name FROM ORDER

INNER JOIN SALESPERSON

ON ORDER.SalespersonName= SALESPERSON.Name

(20) 写出在CUSTOMER表中添加一条记录的SQL语句。

INSERT INTO CUSTOMER (Name,City,Industry Type) VALUES (?TEST?,? Memphis?,?F?)

(21) 写出在SALESPERSON表中添加一条记录的SQL语句,已知年龄和姓名,工资未

知。

INSERT INTO SALESPERSON(Name,Age,Salary) VALUES(?TOM?,29,null)

(22) 写出删除客户ABERNATHY CONSTRUCTION的SQL语句。

DELETE FROM CUSTOMER

WHERE NAME=? Abernathy Construction?

(23) 写出删除客户ABERNATHY CONSTRUCTION的所有订单SQL语句。

DELETE FROM ORDER

WHERE CustName=? Abernathy Construction?

(24) 写出将销售员JONES的工资改成45000的SQL语句。

UPDATE SALESPERSON SET Salary=45000

WHERE Name=? JONES?

(25) 写出将所有的销售员的工资加10%的SQL语句。

UPDATE SALESPERSON SET Salary= Salary*1.10

(26) 假设销售员JONES的名字改成PARKS,写出对应的SQL语句。

UPDATE SALESPERSON SET Name =?PARKS? WHERE Name=? JONES?

第六章

1. 简述聚集索引和非聚集索引的特点

2. 简述建立索引的好处以及索引对数据更新操作的影响? 3. 既然索引能够提高查找速度,那么表中的索引是否是越多越好?简述在何种情况下应该

设置索引?在何种情况下设置聚集索引,何种情况下设置非聚集索引。

4. 在SQL SERVER中,哪些字段不允许设置索引? 5. 简述在创建聚集索引时应该考虑的要点有哪些? 6. 在Student数据的以下表中

学生表(Student)基本数据表的字段

字段名 StudentID StudentCode StudentName Sex Phone Address Parent Birthdate Remark Photo RegisterDate 类型 Int (Identity) Char Varchar Bit Varchar Varchar Varchar Smalldatetime Varchar Image Datetime 长度 8 20 20 100 20 500

成绩表(Score)基本数据的字段

字段名 ScoreID StudentCode ExamType Chinese Math English Physics Chemist 类型 Int(Identity) Char Char Decimal Decimal Decimal Decimal 长度 8 1 5 5 5 5 5 小数位 1 1 1 1 1 Decimal

(1) 在Student 表的StudentCode字段创建聚集索引Index_StudentCode,并且该索引为唯

一索引,然后向Student表中插入一条与表中记录的StudentCode字段相同的记录,检查能否插入成功。

(2) 在Student 表的StudentName字段创建非聚集索引 (3) 在Score 的StudentCode字段创建聚集索引 (4) 在Score 的ScoreID列创建唯一索引。

7. 在Product数据库中,PART(零件表)的结构如下所示:

PART(零件表)

PNO(零件号) 101 102 105 203 207 215 PNAME(零件名称) QUTY(库存量) CAM 150 BOLT 300 GEAR 50 BELT 30 WHEEL 120 WASHER 1300 QUATATIONS(报价表)

DELIQUTY(供货量) 50 SNO PNO PRICE(报价) D_TIME(供货时间) 51 101 25 10 51 52 52 58 67 67 69 69 105 101 203 102 207 215 105 203 42 20 13 9 34 4 36 15 15 15 7 5 12 3 20 10 100 75 50 200 0 500 40 30 (1) 在PART表的PNO字段创建聚集索引Index_Pno,检查数据的排序顺序。删除

Index_Pno索引,然后在PART表的PNAME列上创建Index_Pname聚集索引,再次检查数据的排序顺序。

(2) 在QUATATIONS表的SNO和PNO字段上创建一个复合索引,Index_SnoPno。 8. 使用哪些命令进行维护索引?哪些指标能够显示索引的碎片情况? 9. 简述使用哪些方法可以清除索引碎片?这些方法有何区别? 10. 简述为什么要使用视图查看数据?视图的优点有哪些? 11. 视图是一张“虚表”,请简述视图和表的相同点和区别 12. 创建一张用于查看男同学信息的视图。

13. 创建视图view_Score(StudentCode,StudentName,Chinese, Math, English, Physics,

Chemist,TotalScore),查询每个学生每门课程的期末考试成绩以及总成绩(TotalScore)。 14. 创建视图view_Student(StudentCode, StudentName, Sex, Phone, Address, Parent,

Birthdate),查询学生的信息 15. 使用INSERT INTO

(?20060304?,?ChengMing?,1,?010-80603310?,?Beijing?,?ChenHong?,?1986-01-08?)语句更新view_Student视图,然后再次查询该视图以及查询Student表检查执行结果。

16. 使用UPDATE view_Student SET Phone=?010-82375177? WHERE StudentCode=?

20060304??,更新视图,然后再次查询该视图以及查询Student表检查更新结果。

参考答案

1. 简述聚集索引和非聚集索引的特点

聚集索引确定表中数据的物理顺序,索引顺序就是数据的物理顺序。

由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。 非聚集索引的特点是索引与数据分别存储在数据页上,索引中的项目按索引键值的顺序存储,而表中的信息按另一种顺序存储,索引带有指针指向数据的存储位置。 2. 简述建立索引的好处以及索引对数据更新操作的影响?

优点:加速检索、排序、成组、连接的顺序 缺点:影响更新性能

3. 既然索引能够提高查找速度,那么表中的索引是否是越多越好?简述在何种情况下应该

设置索引?在何种情况下设置聚集索引,何种情况下设置非聚集索引。 并非索引越多越好,索引过多,SQL SERVER 维护索引的开销越大 在查询中经常引用的表、字段、唯一值列中创建索引 将非聚集索引用于:

? 包含大量非重复值的列,如姓氏和名字的组合(如果聚集索引用于其它列)。

如果只有很少的非重复值,如只有 1 和 0,则大多数查询将不使用索引,因为此时表扫描通常更有效。 ? 不返回大型结果集的查询。

? 返回精确匹配的查询的搜索条件(WHERE 子句)中经常使用的列。 ? 经常需要联接和分组的决策支持系统应用程序。应在联接和分组操作中使用的

列上创建多个非聚集索引,在任何外键列上创建一个聚集索引。

? 在特定的查询中覆盖一个表中的所有列。这将完全消除对表或聚集索引的访

问。

将聚集索引用于:

? 包含大量非重复值的列。

? 使用下列运算符返回一个范围值的查询:BETWEEN、>、>=、< 和 <=。 ? 被连续访问的列。

? 返回大型结果集的查询。

? 经常被使用联接或 GROUP BY 子句的查询访问的列;一般来说,这些是外键

列。对 ORDER BY 或 GROUP BY 子句中指定的列进行索引,可以使 SQL Server 不必对数据进行排序,因为这些行已经排序。这样可以提高查询性能。 ? OLTP 类型的应用程序,这些程序要求进行非常快速的单行查找(一般通过主

键)

4. 在SQL SERVER中,哪些字段不允许设置索引?

Image、Text 字段

5. 简述在创建聚集索引时应该考虑的要点有哪些?

? 包含大量非重复值的列。

? 使用下列运算符返回一个范围值的查询:BETWEEN、>、>=、< 和 <=。 ? 被连续访问的列。

? 返回大型结果集的查询。

? 经常被使用联接或 GROUP BY 子句的查询访问的列;一般来说,这些是外键

列。对 ORDER BY 或 GROUP BY 子句中指定的列进行索引,可以使 SQL Server 不必对数据进行排序,因为这些行已经排序。这样可以提高查询性能。 ? OLTP 类型的应用程序,这些程序要求进行非常快速的单行查找(一般通过主

键)

? 定义聚集索引键时使用的列越少越好

6. 在Student数据的以下表中

学生表(Student)基本数据表的字段

字段名 StudentID StudentCode StudentName Sex Phone Address Parent Birthdate Remark Photo RegisterDate 类型 Int (Identity) Char Varchar Bit Varchar Varchar Varchar Smalldatetime Varchar Image Datetime 长度 8 20 20 100 20 500

成绩表(Score)基本数据的字段