SQL数据库期末考试复习题

更新时间:2024-03-26 16:12:01 阅读量: 综合文库 文档下载

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

考试题型

一、选择题(本大题共20个小题,每个小题1分,共20分) 二、填空题(本大题共10个小题,每小题2分,共20分)

三、请使用SQL命令完成以下操作(本大题共5小题,每小题4分,共20分)

四、简答题(本大题共4小题,每小题5分,共20分) 五、设计题(本大题共2小题,每小题10分,共20分)

数据库原理与应用复习题

一、选择题

1、SQLserver数据库文件有三类,其中主数据文件的后缀为(C):

A、.ndf B、.ldf C、.mdf D、.idf 2、下面标志符不合法的是:(C)。

A、[mydelete] B、_mybase C、$money D、trigger1 3、下面字符串能与通配符表达式[ABC]%a进行匹配的是:(C)。

A、BCDEF B、A_BCD C、ABC_a D、A%a 4、下列说法正确的是___B____。

A、视图是观察数据的一种方法,只能基于基本表建立。 B、视图是虚表,观察到的数据是实际基本表中的数据。 C、索引查找法一定比表扫描法查询速度快。 D、索引的创建只和数据的存储有关系。

5、下列途径哪个不是实现值域完整性____B___。

A、rule(规则)B、primarykeyC、notnullD、default

6、SQL Server 2008是一个(C)的数据库系统。

(A)网状型(B)层次型(C)关系型(D)以上都不是 7、SQL Server 2008采用的身份验证模式有(D)。

(A)仅Windows身份验证模式 (B)仅SQL Server身份验证模式 (C)仅混合模式 (D)Windows身份验证模式和混合模式

8、在SQL Server 2008中,当数据表被修改时,系统自动执行的数据库对象是(B)。 (A)存储过程(B)触发器(C)视图(D)其他数据库对象 9、SQL Server的字符型系统数据类型主要包括(B)。 A.Int、money、char B.char、varchar、text C.datetime、binary、int D.char、varchar、int

1

10、在SQL Server 2000中,索引的顺序和数据表的物理顺序相同的索引是(A)。 (A)聚集索引(B)非聚集索引(C)主键索引(D)唯一索引

11、要查询book表中所有书名中包含“计算机”的书籍情况,可用(B)语句。 (A)SELECT * FROM book WHERE book_name LIKE ‘计算机*’ (B)SELECT * FROM book WHERE book_name LIKE ‘计算机%’ (C)SELECT * FROM book WHERE book_name=‘计算机*’ (D)SELECT * FROM book WHERE book_name=‘计算机%’ 12、SELECT语句中与HAVING子句通常同时使用的是(C)子句。 A.ORDERBY B.WHERE C.GROUP BY D.无需配合

13、要删除mytable表中的myindex索引,可以使用(D)语句。 (A)DROP myindex (B)DROP mytable.myindex

(C)DROP INDEX myindex(D)DROP INDEX mytable.myindex

14、下列选项都是系统提供的存储过程,其中可以进行视图信息的查询是(A)。 (A)sp_helptext(B)sp_helpindex(C)sp_bindrule(D)sp_rename 15、SQLServer提供的单行注释语句是使用(A)开始的一行内容。 A.“/*” B.“--” C.“{” D.“/” 16、以下运算符中优先级最低的是(D)。

(A)+(加) (B)=(等于) (C)like (D)=(赋值)

17、根据关系数据基于的数据模型——关系模型的特征判断下列正确的一项:(B) A、只存在一对多的实体关系,以图形方式来表示。

B、以二维表格结构来保存数据,在关系表中不允许有重复行存在。 C、能体现一对多、多对多的关系,但不能体现一对一的关系。 D、关系模型数据库是数据库发展的最初阶段。

18.SQL语言按照用途可以分为三类,下面选项中哪一种不是:(C) (A)DML (B)DCL (C)DQL (D)DDL

19.在SELECT语句的WHERE子句的条件表达式中,可以匹配0个到多个字符的通配符是(B) (A)* (B)% (C)- (D)?

20.以下那种类型不能作为变量的数据类型(C)。 (A)text (B)ntext (C)table (D)image 21.下面不属于数据定义功能的SQL语句是:(C)

A.CREATE TABLE B.CREATE CURSOR C.UPDATE D.ALTER TABLE 22.在SQL SERVER中局部变量前面的字符为:(D) (A)* (B)# (C)@@ (D)@ 23.对视图的描述错误的是:(C)

(A)是一张虚拟的表 (B)在存储视图时存储的是视图的定义

(C)在存储视图时存储的是视图中的数据 (D)可以像查询表一样来查询视图 24.在T-SQL语言中,若要修改某张表的结构,应该使用的修改关键字是(A)。 (A)ALTER (B)UPDATE (C)UPDAET (D)ALLTER

25、有如下代码,当代码中_[关键字]_分别为break、continue、return时,最后的print@n输出的值为什么?A declare@nint

2

set@n=3 while@n〉0 begin

set@n=@n-1

if@n=1_[关键字]_ end

print @n(2分)

A:1,0,不输出 B:1,1,1 C:0,0,0 D:0,1,2 26、数据库系统由数据库、硬件和什么等组成?(D)

A:操作系统 B:文件系统 C:编译系统 D:数据库管理系统 27、所谓概念模型,指的是什么?(D)

A:客观存在的事物及其相互联系 B:将信息世界中的信息数据化

C:实体模型在计算机中的数据化表示 D:现实世界到机器世界的一个中间层次,即信息世界

28、数据库系统不仅包括数据库本身,还要包括相应的硬件,软件和什么?(D)

A:数据库管理系统 B:数据库应用系统 C:相关的计算机系统 D:各类相关人员 29、数据库系统软件包括DBMS和什么?(D)

A:数据库 B:高级语言 C:OS D:数据库应用系统和开发工具 30、下列四项中,不正确的提法是什么?(C) A:SQL语言是关系数据库的国际标准语言

B:SQL语言具有数据定义,查询,操纵和控制功能 C:SQL语言可以自动实现关系数据库的规范化 D:SQL语言称为结构查询语言

31、以下关于外码和相应的主码之间的关系,正确的是哪个?(A)

A:外码并不一定要与相应的主码同名 B:外码一定要与相应的主码同名

C:外码一定要与相应的主码同名而且唯一 D:外码一定要与相应的主码同名,但并不一定唯一

32、公司中有多个部门和多名职员,每个职员只能属于一个部门,一个部门可以有多名职员,从职员到部门的联系类型是什么?(C)

A:多对多 B:一对一 C:多对一 D:一对多

33、数据库是在计算机系统中按照一定的数据模型组织、结构化的什么?(B) A:文件的集合 B:数据的集合 C:命令的集合 D:程序的集合 34、数据库设计的几个步骤是什么?(A)

A:需求分析,概念结构设计,逻辑结构设计,物理结构设计,数据库实施,数据库运行和维护 B:需求分析,逻辑结构设计,物理结构设计.概念结构设计,数据库实施,数据库运行和维护 C:需求分析,逻辑结构设计,概念结构设计.物理结构设计,数据库实施,数据库运行和维护 D:需求分析,概念结构设计,物理结构设计,逻辑结构设计,数据库实施,数据库运行和维护 35、数据库系统是在什么的基础上发展起来的?(B)

A:操作系统 B:文件系统 C:编译系统 D:数据库管理系统 36、SQL语言是什么语言?(C)

A:层次数据库 B:网络数据库 C:关系数据库 D:非数据库

3

37、SQL中,聚合函数COUNT(列名)用于?(C)

A:计算元组个数 B:计算属性的个数 C:对一列中的非空值计算个数 D:对一列中的非空值和空值计算个数

38、什么是长期存储在计算机内的有组织,可共享的数据集合?(C) A:数据库管理系统 B:数据库系统 C:数据库 D:文件组织 39、在关系数据模型中,通常可以把什么称为关系模式?(B)

A:记录 B:记录类型 C:元组 D:元组集

40、设计数据库时,首先应该设计:A.数据库应用系统结构 B.DBMS结构 *C.数据库的概念结构 D.数据库的控制结构 41、SQL语言称为(C)。A、结构化定义语言B、结构化控制语言C、结构化查询语言D、结构化操纵语言。

42.下列聚合函数中不忽略空值(null)的是[ ]A.SUM(列名) B.MAX(列名) *C.COUNT(*) D.AVG(列名) 43.在数据库设计中,将ER图转换成关系数据模型的过程属于[ ].A.需求分析阶段 *B.逻辑设计阶段 C.概念设计阶段 D.物理设计阶段

44.SQL中,下列涉及空值的操作,不正确的是[ ]A.AGE IS NULL B.AGE IS NOT NULL *C.AGE=NULL D.NOT(AGE IS NULL)

45、SQL语言中,条件“年龄BETWEEN 20 AND 30”表示年龄在20至30之间,且: *A.包括20岁和30岁 B.不包括20岁和30岁C.包括20岁但不包括30岁 D.包括30岁但不包括20岁

46、为了使索引键的值在基本表中唯一,在建立索引的语句中应使用保留字:*A.UNIQUE B.COUNT C.DISTINCT D.UNION

47、把ER模型转换成关系模型的过程,属于数据库的:A.需求分析 B.概念设计 *C.逻辑设计 D.物理设计 48.在数据库系统中,保证数据及语义正确和有效的功能是:A.并发控制 B.存取控制 C.安全控制 *D.完整性控制

49.在SQL语言中,属于DML的操作命令是:A.CREATE B.GRANT *C.UPDATE D.DROP

50.一辆汽车由多个零部件组成,且相同的零部件可适用于不同型号的汽车,则汽车实体集与零部件实体集之间的联系是:A.1:1 B.1:M C.M:1 *D.M:N

51.概念设计的主要目标是产生数据库概念结构,该结构主要反映:A.DBA管理信息的需求 B.数据库的维护需求 C.应用程序开发的需求 *D.企业的信息需求 52.用下面的SQL语句建立一个基本表:CREATE TABLE Student(Sno CHAR(4) NOT NULL,Sname CHAR(8) NOT NULL,Sex CHAR(2),Age smallint),可以插入到表中的元组是:A.'5021','刘样',男,21 B.NULL,'刘祥',NULL,21 C.'5021',NUlL,男,21 *D.'5021','刘祥',NULL,NULL

4

53.下列四项中说法不正确的是( C )

A.数据库减少了数据冗余 B.数据库中的数据可以共享 C.数据库避免了一切数据的重复 D.数据库具有较高的数据独立性

54.公司中有多个部门和多名职员,每个职员只能属于一个部门,一个部门可以有多名职员,从职员到部门的联系类型是( C )

A.多对多 B.一对一 C.多对一 D.一对多

55.在视图上不能完成的操作是( C )

A.更新视图 B.查询 C.在视图上定义新的基本表 D.在视图上定义新视图

56.有关数据和信息的概念,下列叙述正确的是:*A.数据是信息的载体B.数据是信息的内涵C.数据和信息互为载体D.数据和信息相互独立

57.实体只用于表示:A.实际存在的事物B.概念性的事物C.事物与事物之间的联系 *D.选项A、B、C都不对

58.从“实体一联系“模型到数据模型实际上经历了三个领域的演变过程,即:A.信息世界一现实世界一数据世界B.数据世界一信息世界一现实世界 C.现实世界一数据世界一信息世界*D.现实世界一信息世界一数据世界·

59.一个班级有多个学生,每个学生只能属于一个班级,班级与学生之间是[]A.一对一的联系*B.一对多的联系C.多对一的联系D.多对多的联系

60.每个教师可以教授多门课程,每门课程至少有两名教师任课,从课程到教师之间的联系类型是 *A.多对多 B.一对一 C.多对一 D.一对多

61.英文缩写DBA代表 *A. 数据库管理员 B.数据库管理系统 C.数据定义语言 D.数据操纵语言

62.若在实体R的诸属性中,属性A不是R的主键,却是另一个实体S的主键,则称A为R的 A.候选键 *B.外部键 C.非主属性 D.主属性

63.在下述局部E-R图中,标出*号的图形元素是A.实体 B.实体的属性 C.联系 *D 联系的属性

5

64.下面没有反映数据库优点的是 * A.数据面向应用程序 B.数据冗余度低 C.数据独立性高 D.数据共享性高 [ ]

65.如果要修改表的结构,应该使用SQL语言的命令 A.UPDATE TABLE B.MODIFY TABLE *C.ALTER TABLE D.CHANGE TABLE [ ]

66.SQL语言中,删除一个表的命令是( )

A DELETE *B DROP C CLEAR D REMORE

67.设有一个关系:DEPT(DNO,DNAME),如果要找出倒数第三个字母为W,并且至少包含4个字母的DNAME,则查询条件子句应写成WHERE DNAME LIKE A ?_ _ W _ %? *B ?_ % W _ _? C ?_ W _ _? D ?_ W _ %?

68.有一个关系:学生(学号,姓名,系别),规定学号的值域是8个数字组成的字符串,这一规则属于( )

A 实体完整性约束 B 参照完整性约束 *C 用户自定义完整性约束 D 关键字完整性约束

69.已知成绩关系如图2所示。 执行SQL语句:

SELECT COUNT(DISTINCT学号) FROM成绩

WHERE分数>60

查询结果中包含的元组数目是( )

成绩

学号 S1 S1 S2

课程号 C1 C2 C1 6

分数 80 75 null S2 S3 C2 C3 图2

55 90 A 1 *B 2 C 3 D 4

70.已知关系:厂商(厂商号,厂名) PK=厂商号

产品(产品号,颜色,厂商号) PK=产品号,FK=厂商号 假设两个关系中已经存在如图4所示元组:

厂商 产品

厂商号 C01 C02 C03 厂名 宏达 立仁 广源

产品号 P01 P02 颜色 红 黄 厂商号 C01 C03 图4

若再往产品关系中插入如下元组: I(P03,红,C02) II(P01,蓝,C01) III(P04,白,C04) IV(P05,黑,null),能够插入的元组是( ) A I,II,IV B I,III C I,II *D I,IV

71.实体中的任一关键字是【 】。A.只能由一个可以区别实体集合中不同个体的属性组成。*B.可以由一个或多个可区别实体集合中不同个体的属性组成。C.必须由多个可区别实体集合中不同个体的属性组成。D.随便,可由用户任意指定。

72.在一个用于表示两个实体间联系的关系中,用于表示实体间联系的是该关系中【 】。A.任何一个属性 B.任何多个属性集合C.关键字 *D.外部关键字

73.关系模型所能表示的实体之间联系方式【 】。A.只能表示1:1联系 B.只能表示1:n联系 C.只能表示m:n联系 *D.可表示任意联系方式

74.数据模型是对【 】的描述。A.客观事物 B.事物之间的联系 *C.客观事物及其联系 D.存储数据

75.根据关系模式的完整性规则,一个关系中的主键【 】。A.不能有两个 B.不能成为另一个关系的外部键 *C.不允许为空 D.可以取空值

76.数据库系统提供了多种语言,下面【 】不是其中的一种。A.DDL B.DML C.SQL *D.C语言

77.以下关于数据模型的描述,错误的是【 】。*A.数据模型表示的是数据库本身。B.数据模型表示的是数据库的框架。C.数据模型是客观事物及其联系的描述。D.数据模型能够以一定的结

7

构形式表示出各种不同数据之间的关系。

78.在层次和网状模型中,用【 】表示数据及其联系。A.关系 *B.图 C.二维表 D.二叉树

79.下列关于信息和数据之间的关系的描述,正确的是【 】。A.数据是信息的内涵。B.信息是数据的表示形式 *C.信息是数据的内涵,数据是信息的表示形式 D.信息和数据都是一些符号

80.下列关于数据处理和数据管理的叙述,错误的是【 】。*A.数据处理是任何数据管理任务必有的共性部分。B.数据管理是任何数据处理任务必有的共性部分。C.数据处理是指从已有的信息中加工得到新的信息的过程。D.数据管理是指信息的收集、整理、组织、存储、查询、维护和传递等各种操作。

81.文件系统和数据库系统的本质区别体现在【 】。A.数据共享。 B.数据独立性 *C.数据结构化 D.数据可以长期保存

82. 在一个关系中,用外部键来【 】。A.唯一标识一个元组。 B.确定元组的某个属性。*C.建立两个关系的联系 D.上述说法都不对

83.实体和属性是【 】世界中的概念。A.现实世界 *B.信息世界 C.数据世界 D.以上都对

84.在将E-R图转换为关系模型时,对于M:N的关系,应采取【 】策略。*A.单独为联系建立一个关系 B.把M方主键放在N方关系中作为外来关键字 C.在M方关系中多设一个属性 D.在N方关系中多设一个属性

85.下列不属于数据库系统特点的是【 】。A.数据的结构化 B.数据共享 *C.数据通信 D.可控冗余度

86.用树型结构表示的数据模型是【 】*A.层次数据模型 B.关系数据模型 C.网状数据模型 D.网络数据模型

87.DBMS指的是【 】*A.数据库管理系统 B.数据库系统 C.数据库应用系统 D.数据库服务系统

88.E-R图所表示的实体及其联系,实际上是【 】。*A.信息模型 B.数据模型 C.关系模型 D.实体模型

89.实体之间的联系方式有【 】种。A.1 *B.3 C.4 D.2

90.在文件系统中,一张二维表称为一个【 】,表头行称为记录型,表中其它各行称为【 】,而每一列中的各元素称为一个【 】。A.记录,文件,数据项 *B.文件,记录,数据项 C.记录,

8

数据项,文件 D.文件,数据项,记录

91.数据库设计的逻辑模式设计阶段的任务是【 】。A.将总体E-R图转化为关系模型 B.收集和分析用户需求 C.建立E-R模型 *D.数据库模式设计

92.数据库系统中的软件是指【 】。*A.数据库管理系统 B.应用程序 C.数据库 D.数据库管理员

93.实体集中,各实体值相应的属性有着【 】的域。A.不同 *B.相同 C.各自 D.固定

94.数据库系统是由【 】组成的。*A.数据库、数据库管理系统和用户 B.数据文件、命令文件和报表 C.数据库文件结构和数据 D.常量、变量和函数

95.Select查询语句执行的结果是(B )。

A.数据库 B.表 C.元组 D.属性 96.在Transact-SQL语法中,用来插入数据与更新的命令是( A )。

A.INSERT,UPDATE B.UPDATE,INSERT C.DELETE,UPDATE D、CREATE,INSERT INTO

97.在Transact-SQL语法中,SELECT语句至少包括的部分( B )。

A.SELECT,INTO B.SELECT,FROM C.SELECT,GROUP D.仅SELECT

98.下列关于视图的描述中,不正确的是( C )。

A.视图是子模式 B.视图是虚表

C.使用视图可以加快查询语句的执行速度 D.使用视图可以简化查询语句的编写

二、应用题

1.需要将学校中的专业系、教员、课程以及他们之间的关系组织到数据库中,对于每个专业系(D)存储的信息有:专业系号(DNO)、专业系名(DNAME)、专业系主任(DEAN);对每个教员(PROF)需要存储的信息有:职工号(PNO)、姓名(PNAME)、专长(SPEC);对每门课程(COURSE)需要存储的信息有:课程号(CNO)、课程名(CNAME)、学分(CREDIT)。有关的联系是:每个专业系有若干名教员、开设若干门课程,每位教员只在一个专业系工作,每门课程只由一个专业系开设;每位教员可讲授多门课程,每门课程可由多位教员讲授;课程之间有先修联系,每门课程可由多门其他课程作为它的直接先修课,每门课程也作为多门其他课程的直接先修课。(1).画出E-R图;(2).把E-R图转换为关系模型(写出各关系模式);

9

2.工厂有若干仓库,每个仓库中有若干职工在其中工作,每个仓库有一名职工做为管理员, 每个仓库存放若干零件,每种零件可存放在不同仓库中, 每种零件由其他若干种零件构成, 每种零件可构成其他不同的零件,每位职工都有一名职工作为他的领导.仓库有仓库号, 仓库地址, 仓库容量;职工有职工号, 职工名,工种; 零件有零件号, 零件名, 零件重量.

要求:(1)画出E-R图. (2)转换为关系模型,写出关系模式,并指出每个关系的主码及外码.

3、某企业集团有若干工厂,每个工厂生产多种产品,且每一种产品可以在多个工厂生产,每个工厂按照固定的计划数量生产产品;每个工厂聘用多名职工,且每名职工只能在一个工厂工作,工厂聘用职工有聘期和工资。工厂的属性有工厂编号、厂名、地址,产品的属性有产品编号、产品名、规格,职工的属性有职工号、姓名。

(1)根据上述语义画出ER图,在ER图中需注明实体的属性、联系的类型及实体的标识符。 (2)将ER模型转换成关系模型,并指出每个关系模式的主键和外键。 答: 工作 工厂 职工 生产 产品 1 N M N 工厂(工厂编号、厂名、地址),PK=工厂编号; 产品(产品编号、产品名、规格),PK=产品编号; 职工(职工号、姓名、聘期、工资、工厂编号),PK=产品编号,FK=工厂编号; 生产(工厂编号、产品编号、计划数量),PK=(工厂编号、产品编号);FK1=工厂编号,FK2=产品编号。

工厂、产品、生产已经达到第3范式,职工达到第1范式。

4、一个图书借阅管理数据库要求提供下述服务:(1)可随时查询书库现有书籍的品种、数量、存放位置,所有各类书籍均可由书号唯一标识。(2)可随时查询书籍借还情况,包括借书人单位、姓名、借书日期、应还日期。约定:任何人可借多种书,任何一种书为多个人所借,借书证号具有唯一性。(3)当需要时,可通过数据库中保存的出版社的电报、电话、邮编及地址等信息向有关书籍的出版社订购有关书籍。约定一个出版社可以出版多种图书,同一本书仅为一个出版社出版,出版社名具有唯一性。根据以上假设,试作如下设计: (1)构造满足需求的E-R图。

(2)将E-R图转换为等价的关系模型。

答:图书(书号,书名,出版社名称,作者,出版日期,数量,存放位置)KEY=书号, 出版社(出版社名称,地址,邮政编码,联系电话,电报)KEY=出版社名称, 读者(借书证号,姓名,工作单位,联系电话)KEY=借书证号,

图书借阅(借书证号,书号,借阅日期,归还日期)KEY=(借书证号,书号), 图书订单(订单号,订单日期,书名,出版社名称,订购数量)KEY=订单号

4、在采购管理系统中,需要存储和管理订单数据,一个订单的格式如下:

10

订 货 单

订单号: 订单日期:

供货方: 需货方: 联系电 联系人: 联系电 联系人: 话: 话: 商品编号 商品名规格型号 单价 数量 税率 总金额 称 在这份订单中,包含如下信息:供货方信息、需货方信息、商品信息及订货信息。 (1)请分析订单中包含的实体及其联系,用E-R图表示出来。

分析:在订货业务中,涉及供货商、需货方、商品三个实体。同一个供货商可以供应多种商品,同一种商品可以由多个供货商供应。同时,一个需货方可以从多家供货商那里订货,一个供货商可以为多个需货方供货。 E-R图为:略 (2)将E-R图转换为等价的关系模型。

商家(商家编号,商家名称,详细地址,联系人,联系电话,邮政编码)KEY=商家编号 商品(商品编号,商品名称,规格型号,包装单位,单价)KEY=商品编号 订单(订单号,订单日期,供货商编码,需货方编码,总金额)KEY=订单号 订单明细(订单号,商品编号,数量,单价)KEY=(订单号,商品编号)

5. 在工厂生产中,一个车间可以生产多种产品,一种产品由多个零件组成。同一种零件可以用来组装多个产品,同一种产品可以由多个车间组装。已知车间的属性有车间编号、名称、车间主任,产品的属性有产品编号、产品名称、规格型号、价格,零件的属性有零件编号、零件名称、规格型号。根据以上假设,试作如下设计: (1)画出E-R图。

(2)将E-R图转换为等价的关系模型,并指出每个关系模式的主键和外键。 根据从E-R图到关系模型的转换原则,可以得到如下关系: 车间(车间编号,名称,车间主任)KEY=车间主任

产品(产品编号,产品名称,规格型号,价格)KEY=产品编号

生产情况(车间编号,产品编号,日期,数量)KRY=(车间编号,产品编号,日期) 零件(零件编号,零件名称,规格型号)KEY=零件编号

组装(产品编号,零件编号,数量)KEY=(产品编号,零件编号)

6.某教学管理系统对教师、学生及课程情况进行管理。系统要求记录学生的学号、姓名、性别、出生日期、专业、照片;教师的编号、姓名、性别、年龄、职称、专业;课程的编号、课程名、学时、类别,另外还要记录学生选课的成绩以及教师授课的效果。一个学生可以选修多门课程,同一编号的课程可以由多个教师讲授,一个教师可以同时承担多门课程的教学。请根据以上描述用E-R图表示出该系统的概念模型,转换为等价的关系模型,并指出每个关系模式的主键和外键。

11

教师号姓名性别年龄职称专业讲授评价m课程n选修nm教师学生学号姓名性别出生日期专业照片分数课程号课程名学时类别

答:教师(教师号,姓名,性别,年龄,职称,专业)

课程(课程号,课程名,学时,类别)

学生(学号,姓名,性别,出生日期,专业,照片) 讲授(教师号,课程号,评价) 选修(学号,课程号,分数)

三、简答题

1.数据库系统由哪几部分组成? 2. 简述DBMS的功能?

3.简述E-R图向关系模型转换的原则?

4.请简述SQL语言中VIEW(视图)的含义,VIEW与基本表有什么区别和联系? 5、简述数据库系统的特点。

6、说明数据库设计的主要步骤。

7.简述关系数据模型的三类完整性规则。

答:(1)实体完整性规则:这条规则要求关系中元组在组成主键的属性上不能有空值。 (2)参照完整性规则:这条规则要求“不引用不存在的实体”。参照完整性规则的形式定义如下:如果属性集K是关系模式m的主健,K也是关系模式R2的外键,那么在n2的关系中,K的取值只允许两种可能,或者为空值,或者等于R1关系中某个主键值。①外键和相应的主键可以不同名,只要定义在相同值域上即可;②R1和R2也可以是同一关系模式,表示了属性之间的联系;③外键值是否允许空,应视具体问题而定。

(3)用户定义的完整性规则:这是针对某一具体数据的约束条件,由应用环境决定。 8.局部ER模式之间可能产生的冲突有哪几类?

答:由于各类应用不同,不同的应用通常又由不同的设计人员设计成局部ER模式,因此局部ER模式之间不可避免地会有不一致的地方,我们称之为冲突,通常,我们把冲突分为三种类型:属性冲突,包括:属性域的冲突,即属性值的类型、取值范围或取值集合不同。结构冲突,包括:同一对象在不同应用中的不同抽象。命名冲突,包括属性名,实体名,联系名之间的冲突:同名同又,即不同意义的对象具有相同的名字;异名同义,即同一意丈的对象具有不同的名字。 9.简述SQL中提供的安全性控制功能。

答:SQL中有两个功能提供了安全性:一是视图机制,它可以用来对无权用户屏蔽数据。二是

12

授权子系统,它允许有特定存取权的用户有选择地和动态地把这些权限授予其它用户。

(1)视图:视图是从一个或几个基本表导出的表,某一用户可以定义若干视图。视图所对应的数据不实际存储在数据库中,数据库中只存储视图的定义。视图机制使系统具有三个优点:数据安全性、数据独立性和操作简便性。视图把用户可以使用的数据定义在视图中,这样用户就不能使用视图定义外的其它数据,从而保证了数据库的安全性。 10.SQL语言具有什么功能?

数据定义、数据操纵、数据控制和SQL语句嵌入

12、简述数据库概念设计的主要步骤。

进行数据抽象、设计局部概念模式、将局部概念模式综合成全局概念模式、对全局结构进行评审。

13. 举例说明什么是实体之间一对多联系?举例说明什么是实体之间一对一联系?举例说明什么是实体之间多对多联系?

14.在SQL语言的命令中,如何实现关系代数的选择、投影、联接运算? 15.在SQL语言中,如何实现关系数据模型的三类完整性约束? 16、有一个“学生-课程”数据库,数据库中包括三个表:

(1) “学生”表Student由学号(Sno)、姓名(Sname)、性别(Ssex)、年龄(Sage)、所在系(Sdept)五个属性组成,可记为: Student(Sno,Sname,Ssex,Sage,Sdept) Sno 为关键字。

(2) “课程”表Course由课程号(Cno)、课程名(Cname)、先修课号(Cpno)、学分(Ccredit)四个属性组成,可记为: Course(Cno,Cname,Cpno,Ccredit) Cno为关键字。

(3) “学生选课”表SC由学号(Sno)、课程号(Cno)、成绩(Grade)三个属性组成,可记为: SC(Sno,Cno,Grade) (SNO, CNO) 为关键字。

完成下列操作:

(1)写出创建Student数据库的命令,该数据库的主数据文件逻辑名称为Student_data,物理文件名为Student.mdf,初始大小为1MB,最大尺寸为2MB,增长速度为1mb;数据库的日志文件逻辑名称为Student_log,物理文件名为Student.ldf,初始大小为1MB,最大尺寸为3MB,增长速度为10%。

Create database Student

On primary(name=Student_data,filename= 'd:\\ Student.mdf', size=1,maxsize=,filegrowth=1)

Log on(name=Student_log,filename='d:\\ Student.ldf', size=1,maxsize=3,filegrowth=10%)

(2)写出创建 “学生”表Student的命令,表Student是由学号Sno、姓名Sname、性别Ssex、年龄Sage、所在系Sdept五个属性组成,其中学号属性不能为空,并且其值是唯一的。

CREATETABLE Student (Sno CHAR(5) NOT NULL UNIQUE, Sname CHAR(20), Ssex CHAR(1), Sage INT, Sdept CHAR(15));

13

(3).在student表中查询Sdept是‘计算机’的学生的所有信息,并按Sno降序排列。 select * from student where Sdept=’计算机’ order by Sno desc

(4).在以上三个表中查询Ccredit为5并且Grade大于60的学生的学号、姓名和性别。 select student.Sno,Sname,Ssex from student, course, sc

where (student.Sno=sc.Sno) and (course.Cno=sc.Cno) and (course.Ccredit=5) and (sc.Grade>60) (5). 建立一个由学生姓名和课号组成的视图name_cno。 create view name_cno(sname,cno) as

select sname,cno from student,sc

where student.sno=sc.sno

17.下列程序的运行结果有何区别。

(1)Select phone from authors where phone='415%'(只查找415%)

(2)select phone from authors where phone like '415%'(查找以415开头的所有记录)

20. 有一个电影资料库,数据库中含有三个数据表:电影信息、演员信息和电影_演员信息。各表构成见表1-表3。 表1 “电影信息”表 字段名 影片编号 片名 发行公司 发行时间 片长 类型 字段名 演员编号 姓名 性别 出生地 字段名

类型 int varchar(50) varchar(50) char(4) smallint char(4) 类型 int varchar(50) char(2) char(50) 类型 说明 采用自动编号,主键 记录发行的年份 默认值为90,计量单位为分钟 类型取值为“惊险”、“言情”、“喜剧”、“科幻”、“其他”之一 说明 采用自动编号,主键 取值为“男”或“女” 表2 “演员信息”表

表3 “电影_演员信息”表

说明 14

影片编号 演员编号 演员类型 int int char(4) 演员类型取值为“主角”或“配角” (1)请建立电影信息表,包括约束要求。 create table 电影信息

( 影片编号 int identity primary key, 片名 varchar(50), 发行公司 varchar(50), 发行时间 char(4),

片长 smallint default 90,

类型 char(4) check( 类型in('惊险','言情','喜剧','科幻','其他')))

(2) 为“电影_演员信息”表添加外键约束。

alter table 电影_演员信息

add foreign key(影片编号) references 电影信息(影片编号), foreign key(演员编号) references 演员信息(演员编号)

(3)检索出主演过“科幻”类电影的演员的姓名及电影片名。 select 姓名,片名from 电影信息d,演员信息y,电影_演员信息dy

where d.影片编号=dy.影片编号and dy.演员编号=y.演员编号and 类型='科幻' and演员类型=‘主演’

(4)检索出电影长度不小于平均长度的电影片名和发行公司。 select 片名,发行公司from 电影信息

where 片长>=(select avg(片长)from 电影信息)

21、请使用SQL命令完成以下数据定义或数据操纵 (1). 创建数据库“studentDB”,其主数据文件名称stu_data,物理文件保存在d:\\data下,名称为student.mdf,初始大小5M,最大50M,以1M速度增加;该数据库的日志文件是stu_log,保存在d:\\data下,名称为student.ldf,初始大小2M,以5%速度增加。(5分) Create database studentDB On Primary

(name=stu_data,filename=?d:\\data\\student.mdf?,size=5,maxsize=50,filegrowth=1) Log on

(name=stu_log,filename=?d:\\data\\student.ldf?,size=2, filegrowth=5%) (2)建立学生信息表student,包括约束。(5分) 字段名 数据类型 可否为空 Char(10) 学号 否

15

约束条件 主键

71. 修改表的命令是(alter table 表名)。 72. (参照)完整性维护实体间的联系。

73.计算字段的累加和的聚合函数是(sum(字段名) 或sum())。 74.(sp_bindrule)命令可以将定义的规则绑定在数据库表的列上。 75.结构化查询语言的英文是(Structure Query Language) 。 76.查看全局变量的命令为(select @@全局变量名)。

77.删除数据库的命令是 drop database 。

78.通配符“%”的含义表示 匹配零个或多个字符 ;而通配符“_” 的含义表示 匹配单个字符 。

表格操作小结:

简单来说,创建新表格时,在关键词create table后面加入所要建立的表格的名称,然后在括号内顺次设定各列的名称,数据类型,以及可选的限制条件等。注意,所有的SQL语句在结尾处都要使用“;”符号。

使用SQL语句创建的数据库表格和表格中列的名称必须以字母开头,后面可以使用字母,数字或下划线,名称的长度不能超过30个字符。注意,用户在选择表格名称时不要使用SQL语言中的保留关键词,如select,create,insert等,作为表格或列的名称。

数据类型用来设定某一个具体列中数据的类型。例如,在列中只能采用varchar或char的数据类型,而不能使用number的数据类型。 SQL语言中较为常用的数据类型为:

char(size):固定长度字符串,其中括号中的size用来设定字符串的最大长度。Char类型的最大长度为255字节。

varchar(size):可变长度字符串,最大长度由size设定。 number(size):数字类型,其中数字的最大位数由size设定。 Date:日期类型。

number(size,d):数字类型,size决定该数字总的最大位数,而d则用于设定该数字在小数点后的位数。

最后,在创建新表格时需要注意的一点就是表格中列的限制条件。所谓限制条件就是当向特定列输入数据时所必须遵守的规则。例如,unique这一限制条件要求某一列中不能存在两个值相同的记录,所有记录的值都必须是唯一的。除unique之外,较为常用的列的限制条件还包括notnull和primarykey等。Notnull用来规定表格中某一列的值不能为空。Primarykey则为表格中的所有记录规定了唯一的标识符。 向表格中插入数据

SQL语言使用insert语句向数据库表格中插入或添加新的数据行。Insert语句的使用格式如下:

Insert into tablename

21

(first_column,...last_column)

values(first_value,...last_value);

简单来说,当向数据库表格中添加新记录时,在关键词insert into后面输入所要添加的表格名称,然后在括号中列出将要添加新值的列的名称。最后,在关键词values的后面按照前面输入的列的顺序对应的输入所有要添加的记录值。 更新记录

SQL语言使用update语句更新或修改满足规定条件的现有记录。Update语句的格式为: Update tablename

Set columnname=newvalue[,nextcolumn=newvalue2...] Where 条件;

使用update语句时,关键一点就是要设定好用于进行判断的where条件从句。

删除记录

SQL语言使用delete语句删除数据库表格中的行或记录。Delete语句的格式为: Delete from tablename Where 条件;

简单来说,当需要删除某一行或某个记录时,在delete from关键词之后输入表格名称,然后在where从句中设定删除记录的判断条件。注意,如果用户在使用delete语句时不设定where从句,则表格中的所有记录将全部被删除。

删除数据库表

在SQL语言中使用drop table命令删除某个表格以及该表格中的所有记录。Drop table命令的使用格式为:

Drop table tablename; 例如:

如果用户希望将某个数据库表完全删除,只需要在drop table命令后输入希望删除的表格名称即可。Drop table命令的作用与删除表格中的所有记录不同。删除表格中的全部记录之后,该表格仍然存在,而且表格中列的信息不会改变。而使用drop table命令则会将整个数据库表格的所有信息全部删除。

书上第4章例题:

查询语句的基本语句格式:

Select [distinct] 输出列表 From 表名列表 [where 查询条件]

[Group by 列名1 [having 内部函数表达式]] [Order by 排序表达式[asc|desc]]

【例4.5】 查询XSB表中计算机系各同学的学号、姓名和总学分,对其总学分按以下规则进行替换:若总学分为空值,替换为“尚未选课”;若总学分小于50,替换为“不及格”;若总学分在50与52之间,替换为“合格”;若总学分大于52,替换为“优秀”。列标题更改为“等级”。

22

SELECT 学号, 姓名, 等级= CASE WHEN 总学分 IS NULL THEN '尚未选课' WHEN 总学分 < 50 THEN '不及格' WHEN 总学分 >=50 and 总学分<=52 THEN '合格' ELSE '优秀' END FROM XSB WHERE 专业= '计算机'

【例4.8】 对PXSCJ数据库的XSB表选择姓名、专业和总学分,只返回结果集的前6行。 SELECT TOP 6 姓名,专业,总学分 FROM XSB

SELECT TOP 6 PERCENT 姓名,专业,总学分 FROM XSB 【例4.14】统计学分在50分以上的学生的人数。

SELECT count( 总学分 ) AS '总学分大于50' from xsb WHERE 总学分 >50 (2)

【例4.20】 查询XSB表中学号中倒数第3个数字为1且倒数第1个数在1到5之间的 学生学号,姓名及专业。

SELECT 学号,姓名,专业 FROM XSB

WHERE 学号 LIKE '%1_[12345]'

【例4.22】 查询XSB表中不在1989年出生的学生情况。 SELECT 学号, 姓名, 专业, 出生时间 FROM XSB

WHERE 出生时间 NOT BETWEEN '1989-1-1' and '1989-12-31'

【例4.23】 查询XSB表中专业为“计算机”或“通信工程”或“无线电”的学生的情况。 SELECT * FROM XSB WHERE 专业 IN ('计算机', '通信工程', '无线电') 该语句与下列语句等价: SELECT * FROM XSB WHERE 专业= '计算机' or 专业= '通信工程' or专业='无线电'

查询XSB表中专业不为“计算机” 或“无线电”的学生的情况。 SELECT * FROM XSB WHERE 专业 not IN ('计算机', '无线电' )

【例4.27】 查找选修了课程号为206的课程的学生的情况。 在SQL Server Management Studio中新建查询,并在“查询分析器”窗口中输入查询脚本如下: SELECT * FROM XSB WHERE 学号 IN ( SELECT 学号 FROM CJB WHERE 课程号 = '206') 【例4.28】 查找未选修离散数学的学生的情况。 SELECT * FROM XSB

23

WHERE 学号 NOT IN ( SELECT 学号 FROM CJB WHERE 课程号 IN ( SELECT 课程号 FROM KCB WHERE 课程名 = '离散数学' ) ) 【例4.30】 查找比所有计算机系的学生年龄都大的学生。 SELECT * FROM XSB WHERE 出生时间

【例4.31】 查找课程号206的成绩不低于课程号101的最低成绩的学生的学号。 SELECT 学号 FROM CJB WHERE 课程号 = '206' AND 成绩 !< ANY ( SELECT 成绩 FROM CJB WHERE 课程号 = '101' )

【例4.37】 查找选修了学号为081102同学所选修的全部课程的同学的学号。

分析:本例即要查找这样的学号y,对所有的课程号x,若081102号同学选修了该课,那么y也选修了该课。

SELECT DISTINCT 学号 FROM CJB AS CJ1 WHERE NOT EXISTS ( SELECT * FROM CJB AS CJ2 WHERE CJ2.学号 = '081102' AND NOT EXISTS ( SELECT * FROM CJB AS CJ3 WHERE CJ3. 学号= CJ1.学号 AND CJ3.课程号 = CJ2.课程号) )

【例4.45】 查找选修了“计算机基础”课程且成绩在80分以上的学生学号、姓名、课程名及成绩。

SELECT XSB.学号, 姓名, 课程名, 成绩 FROM XSB , KCB , CJB WHERE XSB.学号 = CJB.学号 AND KCB.课程号 = CJB.课程号 AND 课程名 = '计算机基础' AND 成绩 >= 80

【例4.55】 求被选修的各门课程的平均成绩和选修该课程的人数。

SELECT 课程号, AVG(成绩) AS '平均成绩' , COUNT(学号) AS '选修人数' FROM CJB GROUP BY 课程号

【例4.57】 在PXSCJ数据库上产生一个结果集,包括各专业每门课程的平均成绩、每门课程的总平均成绩和所有课程的总平均成绩。

SELECT 课程名,专业, AVG(成绩) AS '平均成绩' FROM CJB, KCB, XSB

24

WHERE CJB.课程号 = KCB.课程号 AND CJB.学号 = XSB.学号 GROUP BY 课程名, 专业 WITH ROLLUP

【例4.58】 在PXSCJ数据库上产生一个结果集,包括每个专业的男生、女生人数、总人数及男生总数、女生总数、学生总人数。

SELECT 专业, 性别, COUNT(*) AS '人数' FROM XSB GROUP BY 专业,性别 WITH CUBE

【例4.59】 在PXSCJ数据库上产生一个结果集,包括各专业每门课程的平均成绩、每门课程的总平均成绩、每个专业的总平均成绩和所有课程的总平均成绩。 SELECT 课程名,专业,AVG(成绩) AS '平均成绩' FROM CJB, KCB, XSB WHERE CJB.课程号 = KCB.课程号 AND CJB.学号 = XSB.学号 GROUP BY 课程名,专业 WITH CUBE

【例4.61】 查找平均成绩在85分以上的学生的学号和平均成绩。

SELECT 学号, AVG(成绩) AS '平均成绩' FROM CJB GROUP BY 学号 HAVING AVG(成绩) > =85

【例4.62】 查找选修课程超过2门且成绩都在80分以上的学生的学号。 SELECT 学号 FROM CJB WHERE 成绩 >= 80 GROUP BY 学号 HAVING COUNT(*) > 2

【例4.63】 查找通信工程专业平均成绩在85分以上的学生的学号和平均成绩。 SELECT 学号, AVG(成绩) AS '平均成绩‘ FROM CJB WHERE 学号 IN (SELECT 学号 FROM XSB WHERE 专业 = '通信工程‘ ) GROUP BY 学号 HAVING AVG(成绩) > =85

【例4.65】 将计算机专业学生的“计算机基础”课程成绩按降序排列。 SELECT 姓名, 课程名, 成绩 FROM XSB, KCB, CJB WHERE XSB.学号 = CJB.学号 AND CJB.课程号 = KCB.课程号 AND 课程名= '计算机基础' AND 专业= '计算机' ORDER BY 成绩 DESC

【例4.66】 查找通信工程专业学生的学号、姓名、出生时间,并产生一个学生总人数行。 SELECT 学号, 姓名, 出生时间 FROM XSB

25

WHERE 专业= '通信工程' COMPUTE COUNT(学号)

【例4.67】 将学生按专业排序,并汇总各专业人数和平均学分。 SELECT 学号, 姓名, 出生时间, 总学分 FROM XSB ORDER BY 专业 COMPUTE COUNT(学号), AVG(总学分) BY 专业

【例4.74】 创建CS_KC视图,包括计算机专业各学生的学号、其选修的课程号及成绩。要保证对该视图的修改都要符合专业为计算机这个条件。

CREATE VIEW CS_KC WITH ENCRYPTION AS SELECT XSB.学号, 课程号, 成绩 FROM XSB, CJB WHERE XSB.学号 =CJB.学号 AND 专业 = '计算机' WITH CHECK OPTION

【例4.75】 创建计算机专业学生的平均成绩视图CS_KC_AVG,包括学号(在视图中列名为num)和平均成绩(在视图中列名为score_avg)。 CREATE VIEW CS_KC_AVG(num,score_avg) AS SELECT 学号, AVG(成绩) FROM CJB GROUP BY 学号

【例4.77】 查找平均成绩在80分以上的学生的学号和平均成绩。

本例首先创建学生平均成绩视图XS_KC_AVG,包括学号(在视图中列名为num)和平均成绩(在视图中列名为score_avg)。

CREATE VIEW XS_KC_AVG ( num,score_avg ) AS SELECT 学号, AVG(成绩) FROM CJB GROUP BY 学号

第5章要求掌握例题:

【例5.18】 将学号为081101的学生的总学分使用循环修改到大于等于60,每次只加2,并判断循环了多少次。 DECLARE @num INT SET @num=0

WHILE (SELECT 总学分 FROM XSB WHERE 学号='081101')<60 BEGIN UPDATE XSB SET 总学分=总学分+2 WHERE 学号= '081101' SET @num=@num+1 END

SELECT @num AS 循环次数

26

【例5.31】 创建用户定义函数,实现计算全体学生某门功课的平均成绩的功能。 CREATE FUNCTION average(@cnum char(20)) RETURNS int AS BEGIN DECLARE @aver int SELECT @aver= ( SELECT avg(成绩) FROM CJB WHERE 课程号=@cnum GROUP BY 课程号 ) RETURN @aver END

【例5.32】 调用例5.31定义的函数average。新建一个查询,输入以下语句并执行: USE PXSCJ /*假设用户函数average在此数据库中已定义*/ GO

DECLARE @course1 char(20) /*定义局部变量*/ DECLARE @aver1 int

SELECT @course1 = '101' /*给局部变量赋值*/ /*调用用户函数将返回值赋给局部变量*/ SELECT @aver1=dbo.average(@course1)

SELECT @aver1 AS '101课程的平均成绩' /*显示局部变量的值*/

第6章要求掌握例题: 【例6.11】 首先在PXSCJ数据库中定义表book及名为 today 的默认值,然后将其绑定到 book表的hire_date列。 CREATE TABLE book ( book_id char(6), name varchar(20) NOT NULL, hire_date datetime NOT NULL ) GO

CREATE DEFAULT today AS getdate() GO

EXEC sp_bindefault 'today', 'book.hire_date'

【例6.13】 建立表KCB2,同时定义总学分的约束条件为0~60。 CREATE TABLE KCB2

( 课程号 char(6) NOT NULL, 课程名 char(8) NOT NULL, 学分 tinyint CHECK (学分>=0 AND 学分<=60) NULL /*通过CHECK子句定义约束条件*/)

【例6.16】 修改XSB2表,向其中添加一个“身份证号码”字段,对该字段定义UNIQUE约束。对“出生时间”字段定义UNIQUE约束。

27

ALTER TABLE XSB2 add 身份证号码 char(20)

constraint sf_uk unique nonclustered(身份证号码) GO

ALTER TABLE XSB2

add constraint CJSJ_UK UNIQUE NONCLUSTERED(出生时间)

【例6.19】 创建一个表student1,只考虑学号和出生日期两列,出生日期必须大于1980年1月1日,并命名CHECK约束。 CREATE TABLE student1 ( 学号 char(6) NOT NULL, 出生时间 datetime NOT NULL,

CONSTRAINT DF_student1_cjsj

CHECK(出生时间>'1980-01-01') )

【例6.21】 通过修改PXSCJ数据库的CJB表,增加成绩字段的CHECK约束。

ALTER TABLE CJB

ADD CONSTRAINT cj_constraint

CHECK(成绩>=0 AND 成绩<=100)

【例6.23】 如下程序创建一个规则,并绑定到表KCB的课程号列,用于限制课程号的输入范围。

CREATE RULE kc_rule AS @range like '[1-5][0-9][0-9]' GO

EXEC sp_bindrule 'kc_rule', 'KCB.课程号' GO

【例6.24】 创建一个规则,用以限制输入到该规则所绑定的列中的值只能是该规则中列出的值。

CREATE RULE list_rule AS @list IN ('C语言', '离散数学', '微机原理') GO

EXEC sp_bindrule 'list_rule', 'KCB.课程名' GO

【例6.25】 定义CJB外键。 create table cjb1

( 学号 char(6) not null foreign key (学号) references XSB(学号) ,

课程号 char(3) not null foreign key (课程号) references KCB(课程号) ,

28

成绩 int null default 0 check(成绩>=0 and 成绩<=100), primary key(学号,课程号))

alter table CJB

add foreign key (学号) references XSB(学号)

alter table CJB

add foreign key (课程号) references KCB(课程号)

第7章要求掌握例题: 【例7.2】 从PXSCJ1数据库的三个表中查询某人指定课程的成绩和学分。该存储过程接受与传递参数精确匹配的值。

CREATE PROCEDURE student_info1 @name char (8), @cname char(16) AS SELECT a.学号, 姓名, 课程名, 成绩, t.学分 FROM XSB a INNER JOIN CJB b ON a.学号 = b.学号 INNER JOIN KCB t ON b.课程号= t.课程号 WHERE a.姓名=@name and t.课程名=@cname 或

CREATE PROCEDURE student_info1 @name char (8), @cname char(16) AS SELECT a.学号, 姓名, 课程名, 成绩, t.学分 FROM XSB a , CJB b,KCB t WHERE a.姓名=@name and t.课程名=@cname and a.学号 = b.学号and b.课程号= t.课程号

【例7.4】 从三个表的连接中返回指定学生的学号、姓名、所选课程名称及该课程的成绩。该存储过程在参数中使用了模式匹配,如果没有提供参数,则使用预设的默认值。 CREATE PROCEDURE st_info @name varchar(30) = '李%' AS SELECT a.学号,a.姓名,c.课程名,b.成绩 FROM XSB a INNER JOIN CJB b ON a.学号 =b.学号 INNER JOIN KCB c ON c.课程号= b.课程号 WHERE 姓名 LIKE @name EXECUTE st_info '王%'

【例7.11】 创建触发器,当向CJB表中插入一个学生的成绩时,将XSB表中该学生的总学分加上添加的课程的学分。

CREATE TRIGGER cjb_insert ON CJB AFTER INSERT AS

29

BEGIN DECLARE @num char(6), @kc_num char(3) DECLARE @xf int SELECT @num=学号, @kc_num=课程号 from inserted SELECT @xf=学分 FROM KCB WHERE 课程号=@kc_num UPDATE XSB SET 总学分=总学分+@xf WHERE 学号=@num PRINT '修改成功' END

INSERT INTO cjb VALUES('081101','208',65)

【例7.12】 创建触发器,当修改XSB表中的学号时,同时也要将CJB表中的学号修改成相应的学号(假设XSB表和CJB表之间没有定义外键约束)。 CREATE TRIGGER xsb_update ON XSB AFTER UPDATE AS BEGIN DECLARE @old_num char(6), @new_num char(6) SELECT @old_num=学号 FROM deleted SELECT @new_num=学号 FROM inserted UPDATE CJB SET 学号=@new_num WHERE 学号=@old_num END

UPDATE XSB SET 学号='081120' WHERE 学号='081101'

【例7.13】 在删除XSB表中的一条学生记录时将CJB表中该学生的相应记录也删除。 CREATE TRIGGER xsb_delete ON XSB AFTER DELETE AS BEGIN DELETE FROM CJB WHERE 学号 IN ( SELECT 学号 FROM deleted ) END

DELETE FROM xsb WHERE 学号='081120' 【例7.14】 在KCB表中创建UPDATE和DELETE触发器,当修改或删除KCB表中的课程号字段时,同时修改或删除CJB表中的该课程号。

CREATE TRIGGER kcb_trig ON KCB AFTER UPDATE, DELETE AS BEGIN IF (UPDATE(课程号)) UPDATE CJB SET 课程号=(SELECT 课程号 FROM inserted) WHERE 课程号=(SELECT 课程号 FROM deleted) ELSE DELETE FROM CJB

30

WHERE 课程号 IN(SELECT 课程号 FROM deleted) END

Update kcb set 课程号='401' where 课程号 ='101'

31

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

Top