数据库实验报告
- 格式:pdf
- 大小:1.81 MB
- 文档页数:14
实验(一): 熟练掌握SQL语言
实验目的:熟悉上机环境,创建数据库,在数据库上建立关系模式,插入数据,
进行相应的查询操作。
实验内容:具体包括如下三部分。
一、熟悉上机环境。 客户/服务器结构,数据库服务器在一台NT服务器上,同学们通过客户机(操
作系统为Windows 2000)上安装的SQL Server客户端程序, 使用SQL Server数据
库服务器。具体包括: 1. 了解SQL Server 环境。鼠标点击开始,进入“Microsoft SQL Server企
业管理器”,点击SQL Server组下的数据库服务器(服务器名称为NEUC-201S(Windows NT)), 可以看到服务器上的圆形标志变为绿色,说
明客户端程序已与服务器连接成功。点击服务器(NEUC-201S(Windows NT))下的数据库,可以看到服务器上已建立的数据库,你可访问你有权
访问的数据库,并进行相应的操作功能。因为,数据库服务器上建有许多
数据库, 每个数据库都有一些合法的用户。 2. 鼠标点击开始,进入“Microsoft SQL Server查询分析器”,输入用户名
和口令,进入SQL查询分析器。如:你登录的客户机为27号,那么请以
用户名user27,口令为user27登录,登录后缺省连到数据库user27上,user27/user27是数据库user27的创建者,因此用户user27/ user27具有在
数据库user27上创建表等一切权力。 3. 在SQL查询分析器环境下,你就可进行SQL命令语句操作了。
二、在数据库useri上创建学生选课有关关系模式,并插入相应的数据,实现有
关查询。 1. 描述学生、课程情况的E-R图如下,请将其转化为用关系数据模型描述的关系模式
学生
课程 选修 学号 姓名 年龄
所在系
成绩
课号 课程名 学时 学分 先行课号 CREATE TABLE Student
(Sno CHAR(9) PRIMARY KEY,
Sname CHAR(20) UNIQUE, Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);
CREATE TABLE Course (Cno CHAR(4) PRIMARY KEY,
Cname CHAR(40),
Cpno CHAR(4),
Ccredit SMALLINT,
FOREIGN KEY (Cpno) REFERENCES Course(Cno) );
CREATE TABLE SC
(Sno CHAR(9),
Cno CHAR(4),
Grade SMALLINT, PRIMARY KEY(Sno,Cno),
FOREIGN KEY(Sno) REFERENCES Student(Sno),
FOREIGN KEY(Cno) REFERENCES Course(Cno)
);
4在已建立的关系模式之上(已插入一些数据)建立主键约束,参照约束和用户
定义的约束(要求学生年龄不小于14岁,不大于35岁),如果约束不能建立,
请分析原因,修改后建立上述约束。
不能建立主键约束,主键唯一,Student已经存在主键;
ALTER TABLE Student
ADD CHECK(Sage>=14 AND Sage<=35);
5、如果约束建立后,请试着插入重复元组,结果如何? CREATE TABLE Student
(Sno CHAR(9)PRIMARY KEY,
Sname CHAR(20) UNIQUE,
Ssex CHAR(2),
Sage SMALLINT, Sdept CHAR(20)
); CREATE TABLE Course
(Cno CHAR(4) PRIMARY KEY, Cname CHAR(40),
Cpno CHAR(4),
Ccredit SMALLINT,
FOREIGN KEY (Cpno) REFERENCES Course(Cno)
); CREATE TABLE SC
(Sno CHAR(9),
Cno CHAR(4),
Grade SMALLINT, PRIMARY KEY(Sno,Cno),
FOREIGN KEY(Sno)REFERENCES Student(Sno),
FOREIGN KEY(Cno)REFERENCES Course(Cno)
);
ALTER TABLE Student DROP constraint PRIMARY KEY(Sno);
ALTER TABLE Student ADD PRIMARY KEY (Sname);
三、用SQL完成下列查询
求选修了课程的学生的学号,要求: (1) 不用distinct消除重复元组,写出其SQL语句
select Student.Sno from Student, SC where Student.Sno!=SC.Sno
(2) 用distinct消除重复元组,写出其SQL语句
SELECT Sno FROM SC;
(3) 如果该查询写成: select Students.Sno from Students, SC where Students.Sno=SC.Sno
请问该查询结果和上面哪个结果是相同的?
2、求开设的课程号、课程名、学时和学分,要求对查询结果的列重新命名
select Course.Cno,Cname,Cpno,Ccredit from Course
3、求计算机系和数学系的学生学号、姓名和年龄
Select Sno,Sname,Sage from Student where Sdept in ('CS','MA');
4、求不是数学系、计算机系的学生的情况,要求select后写*代替列出所有的
列名 select * from Student where Student.Sdept !='CS'and Student.Sdept !='MA'
5、求全体学生的信息,要求按年龄升序排列
select * from Student select * from Student where Sdept='IS' and Sname like '
马%';order by Sage;
6、求计算机系年龄在20~23岁之间的学生姓名和年龄
select Sname,Sage from Student where Sage>=20 and Sage<=23 and Sdept='CS';
7、求姓名时以马开头的IS系学生
select * from Student where Sdept='IS' and Sname like '马%';
8、求选修了2课程的学生的学号、姓名、成绩
select student.Sno,student.Sname,SC.Grade from Student,SC
where student.Sno=SC.Sno and SC.Cno=2
9、求学号为200827开头的学生的学号和所选修的课程的学分
select student.Sno, SC.Grade from Student,SC
where student.Sno=SC.Sno and SC.Sno like'200827%'
10、求选修数学课程且成绩为80分以上的学生的学号、姓名和成绩
select Student.Sno,Sname, SC.Grade from Student,SC,Course
where Student.Sno=SC.Sno and SC.Cno=Course.Cno and Course.Cname='数学'and SC.Grade>80
11、求计算机系每个学生的姓名,选修的课程名和成绩
Select student.Sname,SC.Grade ,Course.Cname
FROM SC,Course,student Where Student.Sdept='CS'and Student.Sno=SC.Sno and SC.Cno=Course.Cno
12、求每个学生的学号及平均成绩
Select Sno,AVG(Grade)
From SC
Group by Sno
13、求男学生每一年龄组中超过50人的年龄组及人数
select Sage,count(*) from student where Student.Ssex='男' group by Sage having
count(*)>=1;
14、求每一门课程的间接先行课号
15、求选修了全部课程的学生的学号
Select Sname
From Student Where not
实验(二):数据库的安全性和完整性
实验目的:了解和使用安全子系统;进行完整性定义和检查。
实验内容:具体包括如下三部分。
一 熟练掌握SQL(续) 1. 修改表St`udents,在其中加入一个字段性别sex char(1)
2. 创建索引:在Students表的Sno上创建唯一聚簇索引, 在SC表的(Sno, Cno)
上创建唯一索引. 查询Students表的内容, 记录的顺序有变化吗? 查询SC表
的内容, 记录的顺序有变化吗? create unique clustered index Stusno on student(sno);