
1. 数据库系统阶段数据库系统的特点?(P3)
典型特征包括:数据结构化,描述数据时不仅要描述数据本身还有描述数据和数据之间的联系;数据由数据库管理系统统一管理;数据的共享性高;数据性高,不会因为系统存储结构与逻辑结构的变化而影响应用程序,即保持物理性和逻辑性。
2. 简述关系的完整性。
关系模型的完整性约束包括实体完整性、参照完整性、用户定义完整性。关系的完整性:实体完整性——规定关系中的所有主属性不能为空,而不仅是整体不能为空NULL的含义(不知道或者无意义的值)。
参照完整性——外码、参照关系、被参照关系外码取值规则:要么为空,要么等于对应参照关系的某个主码值
用户定义完整性——反映某一具体应用所涉及的数据必须满足的语义要求。
3.RDBMS在实现参照完整性时需要考虑哪些方面的问题,以及可以采取的策略?
(1)外码能否接受空值
(2)删除被参照关系中的元组。这时可有三种不同的策略:
级联删除:同时删除参照关系中相关元组;
受限删除:仅当参照关系中没有任何元组的外码值与被参照关系中要删除元组的主码值相同时,系统才执行删除操作,否则拒绝此删除操作。
置空值删除:删除被参照关系的元组,并将参照关系中相应元组的外码值置空值。
( 3 ) 在参照关系中插入元组
当参照关系插入某个元组,而被参照关系不存在相应的元组,其主码值与参照关系插入元组的外码值相同,这时可有以下策略:
受限插入:不允许在参照关系中插入;
递归插入:同时在被参照关系中插入一个元组,其主码值为插入元组的外码值。
4.试述数据模型的三个要素
答:数据模型通常由数据结构、数据操作和完整性约束三部分组成。 ① 数据结构:是所研究的对象类型的集合,是对系统的静态特性的描述。 ② 数据操作:是指对数据库中各种对象(型)的实例(值)允许进行的操作的集合,包括操作及有关的操作规则,是对系统动态特性的描述。 ③ 数据的约束条件:是完整性规则的集合,完整性规则是给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定符合数据模型的数据库状态以及状态的变化,以保证数据的正确、有效、相容。
5. DBA的职责是什么?
答:负责全面地管理和控制数据库系统。具体职责包括: ① 决定数据库的信息内容和结构; ② 决定数据库的存储结构和存取策略; ③ 定义数据的安全性要求和完整性约束条件; ④ 监督和控制数据库的试用和运行; ⑤ 数据库系统的改进和重组。
6. 等值连接与自然连接的区别是什么?
答:连接运算中有两种最为重要也最为常用的连接,一种是等值连接(equi-join),另一种是自然连接(Natural join)。 Θ为“=”的连接运算称为等值连接。它是从关系R与S的笛卡尔积中选取A、B属性值相等的那些元组。自然连接(Natural join)是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且要在结果中把重复的属性去掉。
7. 试述关系数据库的特点。
答:关系数据模型具有下列优点:一、它是建立在严格的数学概念的基础上的。
二、 关系模型的概念单一。无论实体还是实体之间的联系都用关系表示。操作的对象和操作的结果都是关系。
三、关系模型的存取路径对用户透明,从而具有更高的数据性、更好的安全保密性,也简化了程序员的工作和数据库开发建立的工作。
其中最主要的缺点是,由于存取路径对用户透明,查询效率往往不如非关系数据模型。因此为了提高性能,必须对用户的查询请求进行优化,增加了开发数据库管理系统软件的难度。
8.简述关系的性质?
答:① 同一列中的分量是同一类型的数据。 不同列可以取相同的数据类型。
② 关系中的列又称为属性,并赋予属性名。不同列的属性名不同。
③ 列的次序可以任意交换。 ④ 任意两个元组不能完全相同。
⑤ 行的次序可以任意交换。 ⑥ 列具有原子性,即每一列值是不可分的数据项
9.简述SQL语言的主要特点。
答:SQL语言的特点:
高度综合统一:SQL集数据定义(DDL)、数据操纵(DML)和数据控制(DCL)于一体,语言风格统一,可以完成数据生命周期中的全部活动。
高度非过程化:用SQL语言进行数据操作,用户只需提出“做什么”,而不必指明“怎么做”,有利于提高数据的性。
面向集合的操作方式:查询的结果可以是元组的集合,插入、删除、更新操作的对象也是元组的集合。
两种操作方式:既可以作为自含式语言在数据库中直接操作数据库,又可以作为嵌入式语言嵌入到其他程序设计语言中使用。
类似自然语言:SQL语言虽然功能极强,但由于设计巧妙,语法简单,易学易用,SQL语言能够完成DDL、DQL、DML、DCL等功能。
10. 试述数据库系统三级模式结构,这种结构的优点是什么?
答:数据库系统的三级模式结构由外模式、模式和内模式组成。(数据库系统的三级模式是对数据的三个抽象级别,它把数据的具体组织留给DBMS管理,使用户能逻辑抽象地处理数据,而不必关心数据在计算机中的表示和存储。为了能够在内部实现这三个抽象层次的联系和转换,数据库系统在这三级模式之间提供了两层映象:外模式/模式映象和模式/内模式映象。正是这两层映象保证了数据库系统中的数据能够具有较高的逻辑性和物理性。
11. 试述SQL的定义功能(从表、视图、索引分析)。
答:SQL的数据定义功能包括定义表、定义视图和定义索引。SQL语言使用
Create table 语句建立基本表,ALTER TABLE 语句修改基本表定义,DROP TABLE
语句删除基本表;使用CREA TE INDEX 语句建立索引, DROP INDEX 语句删除索引;使用CREATE VIEW 语句建立视图,DROP VIEW 语句删除视图
12. 判断下面的关系模式是否是3NF,若不是请无损分解为3NF?
选课(学号,课程号,课程名,成绩),函数依赖集F={(学号,课程号)→成绩,课程号→课程名}。
13.现有如下关系模式:
R(A,B,C,D,E),其中:(A,B)组合为码,R上存在的函数依赖有(A,B)→E,B→C,C→D。
1)该关系模式满足2NF吗?为什么?
2)如果将关系模式R分解为:R1(A,B,E) R2(B,C,D)
指出关系模式R2的码,并说明该关系模式最高满足第几范式?(在1NF~BCNF之内),为什么?
14.设有关系模式 R U={ A , B , C , D , E }
F={AB→C, B→D, C→E, EC→B, AC→B },求R的候选码,并判断R的范式。
15.设关系模式R,其中U={A,B,C,D,E},
若F={A→BC,C→D,BCD→E,B→D},则关系模式R的候选关键字是什么,并指出R所属的范式最高等级及原因。
16.设有关系模式R(A,B,C,D,E,G,K),其最小函数依赖集F={AB→C,B→DE,C→G,G→A}
① 求模式R的所有候选码;
② 说明R不是2NF的理由,并把R分解成2NF模式集;
17. 现有如下关系模式:
R(A,B,C,D,E),其中:AB组合为码,R上存在的函数依赖有AB→E,B→C,C→D
(1)该关系模式满足2NF吗?为什么? (4%)
(2)如果将关系模式R分解为: R1(A,B,E) R2(B,C,D)
指出关系模式R2的码,并说明该关系模式最高满足第几范式?(在1NF~BCNF之内)为什么?
18.已知学生关系模式
S(Sno,Sname,SD,Sdname,Course,Grade),其中:Sno学号、Sname姓名、SD系名、Sdname系主任名、Course课程、Grade成绩。
(1)写出关系模式S的基本函数依赖和主码。
(2)原关系模式S为几范式?为什么?
19. 设某商业集团数据库中有一关系模式R如下:
R (商店编号,商品编号,数量,部门编号,负责人),如果规定:(1) 每个商店的每种商品只的在一个部门销售;(2) 每个商店的每个部门只有一个负责人;(3) 每个商店的每种商品只有一个库存数量。
试回答下列问题:
a. 根据上述规定,写出关系模式R的基本函数依赖;
b. 找出关系模式R的候选码;
c. 试问关系模式R最高已经达到第几范式?为什么?
20. 设有关系模式:授课表(课程号,课程名,学分,授课教师号,教师名,授课时数)。其语义为:一门课程号有确定的课程名和学分,每名教师有确定的教师名,每门课程号可以由多名教师讲授,每名教师也可以讲授多门课程,每名教师对每门课程号有确定的授课时数。
回答以下问题:(1)根据上述规定写出关系模式R的基本函数依赖;
(2)找出关系模式R的候选码;
(3)试问关系模式R最高已经达到第几范式?为什么?
21.设某图书集团有一关系模式R如下:R(书店编号,书籍编号,库存数量,部门编号,负责人)如果规定:(1)每个书店的每种书籍只在该书店的一个部门销售; (2)每个书店的每个部门只有一个负责人; (3)每个书店的每种书籍只有一个库存数量。
回答以下问题:(1)根据上述规定写出关系模式R的基本函数依赖;
(2)找出关系模式R的候选码;
(3)试问关系模式R最高已经达到第几范式?为什么?
22.什么是基本表?什么是视图?两者的区别和联系是什么?
答:基本表是数据库中本身存在的表,每个基本表对应一个关系模式。在SQL中一个关系就对应一个基本表。一个(或多个)基本表对应一个存储文件,一个基本表可以建立若干索引,它们都依附于基本表且存放在存储文件中。视图是从一个或几个基本表导出的表。视图本身不存储在数据库中,是一个虚表。即数据库中只存放视图的定义及其关联的基本表名等信息而不存放视图对应的数据,这些数据仍然存放在导出视图的基本表中。但SQL
在查询视图时与基本表完全相同,且用户可以在视图上再定义视图。但用视图对数据库中的数据进行增、删、改等更新操作时有一定的。
23. 试述视图的优点。
答:视图能够简化用户的操作;视图使用户能以多种角度看待同一数据;视图对重构数据库提供了一定程度的逻辑性; 视图能够对机密数据提供安全保护。
24. 所有的视图是否都可以更新?为什么?
答:不是。视图是不实际存储数据的虚表,因此对视图的更新,最终要转换为对基本表的更 新。因为有些视图的更新不能唯一地有意义地转换成对相应基本表的更新,所以,并不是所 有的视图都是可更新的。如视图S_G(学生的学号及他的平均成绩) CREAT VIEW S_G(Sno,Gavg) AS SELECT Sno,AVG(Grade) /*设SC表中“成绩”列Grade为数字型*/ FROM SC GROUP BY Sno;要修改平均成绩,必须修改各科成绩,而我们无法知道哪些课程成绩的变化导致了平均成绩的变化。
25. 试述事务的概念及事务的四个特性。
答:事务是用户定义的一组操作序列的集合,是数据恢复和并发控制的基本单位。数据库系统在执行事务时,要么执行事务中全部操作,要么一个操作都不执行。
事务具有四个特性,即原子性、一致性、隔离性和持续性,又常简称为ACID特性。
⑴原子性(Atomicity):一个事务是不可分割的数据库逻辑工作单位,事务中包括的所有操作要么都做,要么都不做。 ⑵ 一致性(Consistency):事务的执行结果必须使数据库从一个一致性状态变到另一个一致性状态。
⑶隔离性(Isolation):一个事务的执行不能被其它事务干扰。
⑷ 持续性(Durability),也称持久性(Permanence):指一个事务一旦提交,它对数据
库中数据的改变应该是永久性的,其它操作或故障不对其产生任何影响。
27.什么是事务?它有哪些属性?
答:事务是用户定义的一组操作序列的集合,是数据恢复和并发控制的基本单位。数据库系统在执行事务时,要么执行事务中全部操作,要么一个操作都不执行。
事务具有四个特性,即原子性、一致性、隔离性和持续性,又常简称为ACID特性。
28. 数据库运行中可能产生的故障有哪几类?哪些故障影响事务的正常执行?哪些故障破坏数据库数据?
答:数据库系统中可能发生各种各样的故障,大致可以分以下几类:(1) 事务内部的故障;(2) 系统故障;(3) 介质故障;(4) 计算机病毒。事务故障、系统故障和介质故障影响事务的正常执行;介质故障和计算机病毒破坏数据库数据。
29.简述把E-R图转换为关系模型的转换规则。
答:将E-R图转换为关系模型的实质就是将实体、实体的属性以及实体之间的联系转换为关系模式。
(1)实体及属性的转换:一个实体型转换为关系模型中的一个关系,实体的属性就是关系的属性,实体的码就是关系的键。
实体集转换为关系:1)实体集对应于一个关系 2)关系名:与实体集同名。
3)属性:实体集的所有属性。 4)主码:实体集的主码。
(2) 联系转换为关系
联系转换成为关系模式。联系转换成为关系模式时,要根据联系方式的不同采用不同的转换方式①1:1联系的转换方法② 1:n联系的转换方法③ m:n联系的转换方法
E-R图向关系模型的转换规则:一个实体型转换为一个关系模式。实体的属性就是关系的属性,实体的码就是关系的码。
30. 试述数据库设计的基本步骤。
答:数据库的设计步骤为规划时期、设计时期(需求分析、概念设计、逻辑设计、物理设计)、实施时期和运行维护时期。数据库设计主要包含两方面内容:一是结构设计,二是行为设计。数据库设计要经过一下六个阶段:需求分析、 概念设计、逻辑设计、物理设计 、数据库实施、数据库运行和维护。
31.试述数据库概念结构设计的重要性和设计步骤。
答:重要性:数据库概念设计是整个数据库设计的关键,将在需求分析阶段所得到的应用需求首先抽象为概念结构,以此作为各种数据模型的共同基础,从而能更好地、更准确地用某一DBMS实现这些需求。设计步骤:概念结构的设计方法有多种,其中最经常采用的策略是自底向上方法,该方法的设计步骤通常分为两步:第1步是抽象数据并设计局部视图,第2步是集成局部视图,得到全局的概念结构
32.简述数据库的物理设计内容。
答:主要包括了以下工作:
(1) 确定数据的存储结构,决定是否采用聚簇功能。
(2)设计数据的存取路径,决定是否建立索引,建多少索引,在哪些列或多列上建索引等。
(3)确定数据的存放的物理位置,决定是否将经常存取部分和存取频率较低部分分开存放等。
(4)确定系统配置参数,根据DBMS产品提供了一些存储分配参数,数据库进行物理优化。
(5) 评价物理结构, 估算各种方案的存储空间、存取时间和维护代价,对估算结果进行权衡、比较,选择出一个较优的合理的物理结构。
33.什么是数据库的逻辑结构设计?试述其设计步骤。
答:数据库的逻辑结构设计就是把概念结构设计阶段设计好的基本E-R图转换为与选用的DBMS产品所支持的数据模型相符合的逻辑结构。设计步骤为(图6.31): (1)将概念结构转换为一般的关系、网状、层次模型;(2)将转换来的关系、网状、层次模型向特定DBMS支持下的数据模型转换;(3)对数据模型进行优化。
34.已知关系r、s、w,如图所示,计算T= (r ∪s)÷w) s(6分)
35.已知关系R、S、T如图所示,计算W=(R÷T)∞ S (要写出步骤)(4%)
36.关系R和S如下图所示,试计算T=∏A,B,C((R÷S)∞R)。
37.简述预防死锁通常有两种方法。
答:预防死锁通常有两种:一次封锁法和顺序封锁法。
一次封锁法:一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。一次封锁法虽然可以有效地防止死锁的发生,但每次要就将以后用到的全部数据加锁,从而降低了系统的并发度。 顺序封锁法:顺序封锁法是预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁
38.简述数据字典包括的五个部分的意义。
答:数据字典包括数据项、数据结构、数据流、数据存储和处理过程五部分。
数据项是不可再分的数据单位,说明基本数据信息的数据类型、长度、取值范围等。
数据结构反映了数据之间的组合关系。数据流是数据结构在系统内传输的路径。
数据存储是数据结构停留或保存的地方,也是数据流的来源和去向之一。
处理过程描述该处理过程的功能及处理要求。主要包括说明做什么,处理频度,响应时间等。
【综合题】设计一个学校的课程管理系统,有关课程管理的规则如下:
学校开设多门课,每门课可由不同的教师讲授(一个教师只讲授一门课),用统一指定的教科书。
每个学生可选修多门课,每门课可有多个学生选修。
每个教师要教多个学生,每个学生可选择不同教师的课程。
每门课程有指定的教室,某一时刻每个教室只能开设一门课。
(3)确定实体型和联系类型的属性
各实体型的属性分别为:
学生:{学号,姓名,性别,出生年月,系别}
课程:{课程号,课程名,学分,上课时间}
教师:{教师号,姓名,性别,职称}
教科书:{书号,书名,出版社,单价}
教室:{编号,地址,容量}
联系类型属性有:
选修:{成绩}
教学:{人数}
出生年月
学号
姓名
性别
教室
课程
学生
开设
选修
1
1
n
m
地址
课号
编号
课名
容量
学分
成绩
系别
姓名
教学
教科书
教师
讲授
1
1
n
n
m
人数
性别
职称
教师号
书号
书名
单价
出版社
2.把E-R图转换成关系模式
按照转换规则,得到八个关系模式:
学生(学号,姓名,性别,出生年月,系别)
课程(课程号,课程名,学分,上课时间,教室)
教师(教师号,姓名,性别,职称)
教科书(书号,书名,出版社,单价)
教室(编号,地址,容量)
选修(学号,课程号,成绩)
教学(教师号,学号,人数)
讲授(教师号,课程号,书号)
[例] 建立一个“学生选课”表SC
CREATE TABLE SC
(Sno CHAR(9),
Cno CHAR(4),
Grade SMALLINT,
PRIMARY KEY (Sno,Cno),
/* 主码由两个属性构成,必须作为表级完整性进行定义*/
FOREIGN KEY (Sno) REFERENCES Student(Sno),
/* 表级完整性约束条件,Sno是外码,被参照表是Student */
FOREIGN KEY (Cno) REFERENCES Course(Cno)
/* 表级完整性约束条件, Cno是外码,被参照表是Course*/
);
查询分析题
实验一
1.要求在本地磁盘D创建一个学生-课程数据库(名称为student),只有一个数据文件和日志文件,文件名称分别为stu和stu_log,物理名称为stu_data.mdf 和stu_log.ldf,初始大小都为3MB,增长方式分别为10%和1MB,数据文件最大为500MB,日志文件大小不受。
create database student
on(name=stu,filename='d:\\stu_data.mdf',size=3,filegrowth=10%,maxsize=500)
log on
(name=stu_log,filename='d:\\stu_log.ldf',size=3,filegrowth=1,maxsize=unlimited)
2、创建一个Company数据库,该数据库的主数据文件逻辑名称为Company_data,物理文件为Company.mdf,初始大小为10MB,最大尺寸为无限大,增长速度为10%;数据库的日志文件逻辑名称为Company_log,物理文件名为Company.ldf,初始大小为1MB,最大尺寸为50MB,增长速度为1MB。
create database Company
on(name=Company_data,filename='d:\\Company.mdf',size=10,maxsize=unlimited,filegrowth=10%)
log on
(name=Company_log,filename='d:\\Company.ldf',size=1,maxsize=50,filegrowth=1)
3、创建数据库DB,具有2个数据文件,文件逻辑名分别为DB_data1和DB_data2,文件初始大小均为5MB,最大为100MB,按10%增长;只有一个日志文件,初始大小为3MB,按10%增长;所有文件都存储在D盘文件夹ceshi中。
create database DB
on
(name=DB_data1,filename='D:\\DB_data1.mdf',size=5,maxsize=100,filegrowth=10%),
(name=DB_data2,filename='D:\\DB_data2.mdf',size=5,maxsize=100,filegrowth=10%)
log on
(name=DB_log,filename='D:\\DB_log.ldf',size=3,filegrowth=10%)
4、在数据库student中增加数据文件db2,初始大小为10MB,最大大小为50 MB,按10%增长;
alter database student
add file
(name=db2,filename='d:\\db2.ndf',size=10,maxsize=50,filegrowth=10%)
5、在数据库student中添加日志文件,保存在D盘中,初始大小为1MB,最大无,增长方式按照1MB增长;
alter database student
add log file
(name=student_log,filename='d:\\student_log.ldf',size=1,maxsize=unlimited,filegrowth=1)
6、修改数据库student主数据文件的大小,将主数据文件的初始大小修改为10Mb,增长方式为20%;
alter database student
modify file
(name=stu,size=10,filegrowth=20%)
7、修改数据库student辅助数据文件初始大小为3MB,最大为100MB,按照10%增长,名称为db2;
alter database student
modify file
(name=db2,size=3,maxsize=100,filegrowth=10%)
8、删除数据库student辅助数据文件和第二个日志文件;
alter database student
remove file db2
alter database student
remove file student_log
9、删除数据库company和DB。
drop database company
drop database DB
10、将数据库student的所有物理文件移动到‘D:\\xxx‘,并且保证逻辑数据库不受影响,请详细描述解决办法。
首先右击数据库student,然后在所有任务里面点击分离数据库,分离完之后,将所有物理文件移动到‘D:\\xxx‘,最后再通过数据库里面的右击选择所有项里面的附加数据库。
实验二
1)依据数据表的结构创建相对应的数据表,表结构如下所示;
学生信息表(student)
| 字段名称 | 字段类型及长度 | 说明 | 备注 |
| Sno | Char(9) | 学生学号 | 主关键字 |
| Sname | Char(6) | 学生姓名 | 非空 |
| Ssex | Char(2) | 学生性别 | 可为空 |
| Sage | Int | 学生年龄 | 可为空 |
| Sdept | VarChar(8) | 学生所在院系 | 可为空 |
(sno char(9) constraint pk_student_sno primary key,
sname char(6) not null,
ssex char(2),
sage int,
sdept varchar(8))
课程信息表(course)
| 字段名称 | 字段类型及长度 | 说明 | 备注 |
| Cno | Char(4) | 课程编号 | 主关键字 |
| Cname | VarChar(20) | 课程名称 | 非空 |
| Cpno | Char(4) | 先行课 | 可为空 |
| Ccredit | Int | 学分 | 可为空 |
(cno char(4) constraint pk_course_cno primary key,
cname varchar(20) not null,
cpno char,
ccredit int,)
选课信息表(sc)
| 字段名称 | 字段类型及长度 | 说明 | 备注 |
| Sno | Char(9) | 学生学号 | 主关键字 |
| Cno | Char(4) | 课程编号 | 主关键字 |
| Grade | Int | 成绩 | 可为空 |
(sno char(9),
cno char(4),
constraint pk_sc primary key(sno,cno),
grade int check(grade >=0 and grade <=100))
2)在表student中增加新字段 “班级名称(sclass)“;
alter table student add sclass varchar(20)
3)在表student中删除字段“班级名称(sclass)”;
alter table student drop column sclass
4)修改表student中字段名为“sname”的字段长度由原来的6改为8;
alter table student alter column sname char(8)
5)修改表student中字段“sdept”名称为“dept”,长度为20;
use master exec sp_rename 'student.sdept','dept'
alter table student alter column dept varchar(20)
6)修改表student中sage字段名称为sbirth,类型为smalldatetime;
use master exec sp_rename'student.sage','sbirth'
alter table student alter column sbirth smalldatetime
7)修改表student新名称为stu_info;
use master exec sp_rename student, stu_info
8)删除数据表student;
use master drop student
9)在sc中增加约束,让成绩取值范围为0-100之间。
alter table sc
add constraint sc_grade check (grade >=0 and grade <=100)
10)把course表中的Ccredit列删除。
alter table course drop column ccredit
2、创建教师授课管理数据库JSSK,并完成以下内容;
1)在数据库JSSK中创建下列三张表;
表名:teachers
| 列名 | 数据类型 | 说明 | 描述 |
| Tno | 字符型,长度7 | 主键 | 教师号 |
| Tname | 字符型,长度10 | 非空 | 姓名 |
| Tsex | 字符型,长度2 | 默认取值为“男” | 性别 |
| Birthday | 小日期时间型 | 允许空 | 出生日期 |
| Dept | 字符型,长度20 | 允许空 | 所在部门 |
| Sid | 字符型,长度18 | 身份证号 |
(tno char(7) constraint pk_teachers_tno primary key,
tname char(10) not null,
tsex char(2) constraint df_teachers_tsex default '男',
birthday datetime,
dept varchar(20),
sid varchar(18))
表名: lessons
| 列名 | 数据类型 | 说明 | 描述 |
| Cno | 字符型,长度10 | 主键 | 课程号 |
| Cname | 字符型,长度20 | 非空 | 课程名 |
| Credit | 短整型 | 学分 | |
| property | 字符型,长度为10 | 课程性质 |
(cno char(10) constraint pk_lessons_cno primary key,
cname char(20) not null,
credit char(20),
property char(10))
表名: shouke
| 列名 | 数据类型 | 说明 | 描述 |
| Tno | 字符型,长度7 | 主键 | 教师号 |
| Cno | 字符型,长度10 | 主键 | 课程名 |
| Hours | 整数 | 课时 |
(tno char(7),
cno char(10),
constraint pk_shouke primary key(tno,cno),
hours int)
2)在shouke表里添加一个授课类别字段,列名为Type,类型为Char,长度为4;
alter table shouke add type char(4)
3)将shouke表的Hours的类型改为smallint;
alter table shouke alter column hours smallint
4)删除lessons表中的property列;
alter table lessons drop column property
实验三
1.修改CS系姓名为“李勇”的学生姓名为“李咏”;
update student set Sname='李咏'where Sname='李勇'
2.修改课程“数据处理”的学分为3学分;
update course set Ccredit=3 where Cname='数据处理'
3.将选修课程“1”的同学成绩加5分;
update sc set Grade=Grade+5 where Cno='1'
4.将选修课程“大学英语”的同学成绩加5分;
update sc set Grade=Grade+5
where Cno in(select Cno from course where Cname='大学英语' )
5.将学号为“200515010”的学生信息重新设置为“丹、女、20、MA”;
update student set Sname='丹',Ssex=女',Sage=20,Sdept='MA'where Son='200515010'
6.向student表中增加记录:(200515026,王婧婧、女、21,CS);
insert into student values ('200515026','王婧婧 ','女',21,'CS')
7.删除数据表中无系别的学生记录;
delete from student where Sdept is null
8.删除数据表student中计算机系年龄大于25的男同学的记录;
delete from student where Sage>25 and Ssex='男' and Sdept='CM'
9.删除数据表course中学分低于1学分的课程信息;
delete from course where Ccredit<1
实验四
1.查询系编号为‘D2’学生的基本信息(学号、姓名、性别、年龄)。
select *from student where 系编号='D2'
2.查询学号为S006的学生的姓名。
select 学号,姓名 from student where 学号='S006’
3.查询成绩在60-85之间的学生的学号。
select 学号,成绩 from sc where 成绩>=60 and 成绩<=85
4.查询所有姓王,并且姓名为两个字的学生的信息。
select * from student where 姓名 like '王_'
5.查询选修课程号为‘C1’且成绩非空的学生学号和成绩,成绩按150分制输出(每个成绩乘以系数1.5)。
select 学号,课程号,成绩=成绩*1.5 from sc where 课程号='C1' and 成绩 is not null
6.查询有选课记录的所有学生的学号,用DISTINCT结果中学号不重复 。
select distinct 学号 from sc where 课程号 is not null
7.查询选修课程‘C1’的学生学号和成绩,结果按成绩的升序排列,如果成绩相同则按学号的降序排列。
select 学号,成绩 from sc where 课程号='C1' order by 成绩,学号 desc
(二)、以数据库原理实验3数据库中数据为基础,请使用T-SQL 语句实现以下操作:
1.列出所有不姓刘的所有学生;
select Sname from student where Sname not like '刘%'
2.列出姓“沈”且全名为3个汉字的学生;
select Sname from student where Sname like '沈__%'
3.显示在1985年以后出生的学生的基本信息;
select * from student where (year(getdate())-Sage)>1985
4.按照“性别、学号、姓名、年龄、院系”的顺序列出学生信息,其中性别按以下规定显示:性别为男显示为男 生,性别为女显示为女 生,其他显示为“条件不明”;
select Ssex=case
when Ssex='男' then '男生' when Ssex='女' then '女生'
else '条件不明'
end, Sno,Sname,Sage,Sdept from student
5.查询出课程名含有“数据”字串的所有课程基本信息;
select *from course where Cname like '数据_%'
6.显示学号第八位或者第九位是1、2、3、4或者9的学生的学号、姓名、性别、年龄及院系;
select * from student where Sno like '_______[1-4,9][1-4,9]%'
7.列出选修了‘1’课程的学生,按成绩的降序排列;
select * from sc where Cno='1' order by Grade desc
8.列出同时选修“1”号课程和“2”号课程的所有学生的学号;
select Sno from sc where Cno like '[1-2]%'
9.列出课程表中全部信息,按先修课的升序排列;
select *from course order by Cpno
10.列出年龄超过平均值的所有学生名单,按年龄的降序显示;
select * from student
where Sage>(select avg(Sage) from student) order by Sage desc
11.按照出生年份升序显示所有学生的学号、姓名、性别、出生年份及院系,在结果集中列标题分别指定为“学号,姓名,性别,出生年份,院系”;
select Sno,Sname,Ssex,'出生年份'=2015-Sage,Sdept
from student order by 出生年份
12.按照院系降序显示所有学生的 “院系,学号、姓名、性别、年龄”等信息,其中院系按照以下规定显示:院系为CS显示为计算机系,院系为IS显示为信息系,院系为MA显示为数学系,院系为EN显示为外语系,院系为CM显示为中医系,院系为WM显示为西医系,其他显示为院系不明;
select Sdept=case
when Sdept='CS' then '计算机系'
when Sdept='IS' then '信息系'
when Sdept='MA' then '数学系'
when Sdept='EN' then '外语系'
when Sdept='CM' then '中医系'
when Sdept='WM' then '西医系'
else '院系不明'
end,
Sno,Sname,Ssex, Sage from student
13.显示所有院系(要求不能重复,不包括空值),并在结果集中增加一列字段“院系规模”,其中若该院系人数>=5则该字段值为“规模很大”,若该院系人数大于等于4小于5则该字段值为“规模一般”, 若该院系人数大于等于2小于4则该字段值为“规模稍小”,否则显示“规模很小”;
select distinct '院系人数'=COUNT(*) from student
group by Sdept
select distinct Sdept,'院系规模'=case
when COUNT(*)>=5 then '规模很大'
when COUNT(*)>=4 and COUNT(*)<5 then '规模一般'
when COUNT(*)>=2 and COUNT(*)<4 then '规模稍小'
else '规模很小'
end
from student group by Sdept
14.按照课程号、成绩降序显示课程成绩在70-80之间的学生的学号、课程号及成绩;
select *from sc where Grade between 70 and 80 order by Cno
15.显示学生信息表中的学生总人数及平均年龄,在结果集中列标题分别指定为“学生总人数,平均年龄”;
select distinct '学生总人数'=count(*) ,'平均年龄'=AVG(Sage) from student
16.显示选修的课程数大于3的各个学生的选修课程数;
select Sno, '选修课程数'=COUNT(Cno) from sc group by Sno having count(Cno)>3
17.按课程号降序显示选修各个课程的总人数、最高成绩、最低成绩及平均成绩;
select Cno,课程总人数=COUNT(Cno),最高成绩=MAX(Grade),最低成绩=MIN(Grade),平均成绩=AVG(Grade) from sc group by Cno order by Cno desc
实验五
1.查询选修了计算机体系结构的学生的基本信息。
select *from student where 学号 in(select 学号 from course where
课程号 in(select 课程号 from sc where 课程名称='计算机体系结构'))
2查询年龄比李勇小的学生的学号和成绩。
select 学号,成绩 from course where 学号 in(select 学号 from student
where 年龄 select *from student where 年龄>any (select 年龄 from student where 系编号='D1') and 系编号!='D1' 4查询其他系中比系编号为‘D3’的学生年龄都大的学生的姓名。 select 姓名 from student where 年龄>all(select 年龄 from student where 系编号='D3') and 系编号!='D3' 5查询‘C1’课程的成绩高于70的学生姓名。 select 姓名 from student where 学号 in (select 学号 from course where 成绩>70 and 课程号='C1') 6查询‘C1’课程的成绩不高于70的学生姓名。 select 姓名 from student where 学号 in (select 学号 from course where 成绩<=70 and 课程号='C1') 7查询没有选修的学生姓名。 select 姓名 from student where 学号 not in (select 学号 from course ) 8查询学校开设的课程总数。 select 课程号, COUNT(课程号) as 课程总数 from sc group by 课程号 9查询选修两门及两门以上课程的学生姓名。 select 姓名 from studnet where 学号 in(select 学号 from sc group by 学号 having COUNT(课程号)>=2) 10查询开设的课程和选修该课程的学生的总成绩、平均成绩、最高成绩和最低成绩。 select 课程号,sum(成绩)总成绩,avg(成绩)平均成绩,max(成绩)最高成绩,min(成绩)最低成绩 from sc group by 课程号 (二)、以数据库原理实验3数据为基础,请使用T-SQL 语句实现进行以下操作: 1查询以‘DB_’开头,且倒数第3个字符为‘s’的课程的详细情况; select *from course where Cname like '[DB_][%s_]' 2查询名字中第2个字为‘阳’的学生姓名和学号及选修的课程号、课程名; select student.sno 学号,sname 姓名,sc.cno 课程号,course.cname 课程名 from student,sc,course where student.sno=sc.sno and sc.cno=course.cno and sname like '_阳%' 3列出选修了‘数学’或者‘大学英语’的学生学号、姓名、所在院系、选修课程号及成绩; select student.sno 学号,sname 姓名,sdept 所在院系,sc.cno 课程号, Grade 成绩 from student,sc,course where student.sno=sc.sno and sc.cno=course.cno and cname='数学' or cname='大学英语' 4查询缺少成绩的所有学生的详细情况; select *from student where Sno in(select Sno from sc where Grade is null) 5查询与‘张力’(假设姓名唯一)年龄不同的所有学生的信息; select *from student where Sage <>(select Sage from student where Sname='张力') 6查询所选课程的平均成绩大于张力的平均成绩的学生学号、姓名及平均成绩;★ select student.sno 学号,sname 姓名, AVG(grade) 平均成绩 from student,sc where student.Sno=sc.Sno group by student.Sno,sname having AVG(grade)>(select AVG(grade) from sc where sno in(select Sno from student where Sname='张力')) 7按照“学号,姓名,所在院系,已修学分”的顺序列出学生学分的获得情况。其中已修学分为考试已经及格的课程学分之和;★ select student.sno 学号,sname 姓名,sdept 所在院系,sum(ccredit)已修学分 from student,sc,course where student.Sno=sc.Sno and sc.Cno=course.Cno and Grade>=60 group by student.Sno,sc.Cno,sname,sdept 8列出只选修一门课程的学生的学号、姓名、院系及成绩; select student.sno 学号,sname 姓名,sdept 院系,grade 成绩 from student,sc,course where student.Sno=sc.Sno and sc.Cno=course.cno and sc.Sno in(select sc.Sno from sc group by sc.sno having COUNT(cno)=1) 9查询选修“数据库”或“数据结构”课程的学生的基本信息; select *from student where Sno in(select Sno from sc where Cno in(select Cno from course where Cname='数据库' or course.cname='数据结构' )) 10列出所有课程被选修的详细情况,包括课程号、课程名、学号、姓名及成绩; select student.sno 学号,sname 姓名,sc.cno 课程号, cname 课程名,grade 成绩 from student,sc,course where student.Sno=sc.Sno and sc.Cno=course.Cno 11查询只被一名学生选修的课程的课程号、课程名; select sc.cno 课程号,cname 课程名 from sc,course where sc.Cno=course.Cno and sc.sno in(select sc.Sno from sc group by Sno having COUNT(*)=1) 12检索所学课程包含学生‘张向东’所学课程的学生学号、姓名;★ select distinct student.Sno 学号,sname 姓名 from student,sc where student.Sno=sc.Sno and cno in(select cno from sc where Sno in(select Sno from student where Sname='张向东')) 13检索所学课程包含学生‘张向东’所学全部课程的学生学号、姓名;★ select distinct student.Sno 学号,sname 姓名 from student,sc where student.Sno=sc.Sno and cno in(select cno from sc where Sno in(select Sno from student where Sname='张向东')) group by student.Sno,sc.Sno,sname having COUNT(cno)>=(select COUNT(cno) from sc where Sno in(select Sno from student where Sname='张向东')) 14使用嵌套查询列出选修了“数据结构”课程的学生学号和姓名; select sno 学号,sname 姓名 from student where Sno in(select Sno from sc where Cno in(select Cno from course where Cname='数据结构')) 15使用嵌套查询查询其它系中年龄小于CS系的某个学生的学生姓名、年龄和院系; select sname 姓名,sage 年龄,sdept 院系 from student where Sage 16使用ANY、ALL 查询,列出其他院系中比CS系所有学生年龄小的学生; select sname 姓名,sage 年龄,sdept 院系 from student where Sage 17分别使用连接查询和嵌套查询,列出与‘张力’在一个院系的学生的信息; 链接查询: select first.*from student first,student second where first.sdept=second.sdept and second.Sname='张力' 嵌套查询: select *from student where Sdept in(select Sdept from student where Sname='张力') 18使用集合查询列出CS系的学生以及性别为女的学生名单; select *from student where Sdept='CS' intersect select *from student where Ssex='女' 19使用集合查询列出CS系的学生与年龄不大于19岁的学生的交集、差集; 交集: select *from student where Sdept='CS' intersect select *from student where Sage<='19' 差集: select *from student where Sdept='CS' except select *from student where Sage<='19' 20使用集合查询列出选修课程1的学生集合与选修课程2的学生集合的交集; select sno from sc where Cno='1' intersect select sno from sc where cno='2' 实验六 1使用创建数据库关系图向导为学生选课数据库中的Student表,Course表,SC表创建关系图。略 2为Student表创建一个基于Sname(姓名)的按降序排列的聚簇索引Stusname。 create clustered index stusname on student (Sname desc) 3为学生—课程数据库中的Student,Course,SC 3 个表建立索引。其中student按学号升序建唯一索引,course按课程号升序建唯一索引,SC按学号升序和课程号降序建唯一索引,索引名称分别为Stusno,Coucno,Scno。 create unique index stusno on student(sno) create unique index coucno on course(sno) create unique index scno on sc(sno asc,cno desc) 4删除 Student表中的Stusname索引。 drop index student.stusname 5创建信息系男学生基本信息视图stu_is,包括学生的学号、姓名及年龄,并要求进行修改和插入操作时仍需保证该视图只有信息系的学生。 create view stu_is as select sno,sname,sage from student where sdept='IS'and ssex='男' with check option 6建立信息系选修了1号课程的学生视图stu_is_c1(学号,姓名,成绩)。 create view stu_is_c1 as select student.sno,sname,grade from student full outer join sc on student.sno=sc.sno where cno='1' 7建立信息系男同学年龄在19岁以上学生信息的视图stu_is_age。(使用第5题的视图) create view stu_is_age as select * from student where sdept='IS'and ssex='男' and sage>19 with check option 8查询信息系男同学年龄在19岁以上的学生信息。 select * from stu_is_age 9查询信息系选修了1号课程且成绩大于 80的学生成绩信息。 select * from stu_is_c1 where grade>80 10向视图stu_is中插入一个新的学生记录,学号为200515027,姓名为王唔,年龄为20。 insert into stu_is values('200515027','王唔','20') 试图进行的插入或更新已失败,原因是目标视图或者目标视图所跨越的某一视图指定了 WITH CHECK OPTION,而该操作的一个或多个结果行又不符合 CHECK OPTION 约束的条件。 11.向视图stu_is_c1中插入一个新的学生记录,学号为200515027,姓名为王唔,成绩为60。 insert into stu_is_c1 values('200515027','王唔',60) 视图或函数 'stu_is_c1' 不可更新,因为修改会影响多个基表 12将视图stu_is中学号为“200515004”的学生姓名改为“张珊”。 update stu_is set sname='张珊' where sno='200515004' 13将视图stu_is_c1中学号为“200515006”的学生成绩改为75。 update stu_is_c1 set grade=75 where sno='200515006' 14删除视图stu_is中学号为“200515020”的学生记录。 delete stu_is where sno='200515020' 15将stu_is视图修改为只包含信息系学生学号、姓名及年龄。 alter view stu_is as select sno,sname,sage from student where sdept='IS' 16.同时删除视图stu_is和stu_is_age。 drop view stu_is,stu_is_age
