数据库实验报告

  • 格式: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);