数据库实验报告
班级:计算机 1404 班
学号:20143701
姓名:孟李
时间:2017 年 6 月 9 日
实验(一): 熟练掌握 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 图如下,请将其转化为用关系数据模
型 描 述
的关系模式
学号
姓名
年龄
学生
选修
课程
所在系
先行课号
学分
课程名
学时
成绩
课号
根据 E-R 图按如下代码建立三个表:
CREATE TABLE Student
(Sno CHAR(8) 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),
Credit SMALLINT,
FOREIGN KEY (Cpno) REFERENCES Course(Cno)
);
CREATE TABLE SC
(Sno CHAR(8),
Cno CHAR(4),
Grade SMALLINT,
PRIMARY KEY(Sno,Cno),
FOREIGN KEY(Sno) REFERENCES Student(Sno),
FOREIGN KEY(Cno) REFERENCES Course(Cno)
);
在 Course 表中插入学时字段
alter table Course add Ctime smallint NULL
运行后建表成功。
2.在数据库中定义这些关系模式,并向基本表中插入如下数据:
INSERT
INTO Student(Sno,Sname,Ssex,Sdept,Sage)
VALUES('201100001','张一','男','IS',18);
INSERT
INTO Student(Sno,Sname,Ssex,Sdept,Sage)
VALUES('201100002','张二','女','IS',18);
INSERT
INTO Student(Sno,Sname,Ssex,Sdept,Sage)
VALUES('201100003','张三','男','IS',18);
INSERT
INTO Student(Sno,Sname,Ssex,Sdept,Sage)
VALUES('201100004','张四','女','IS',18);
INSERT
INTO Student(Sno,Sname,Ssex,Sdept,Sage)
VALUES('201100005','张五','男','IS',18);
INSERT
INTO Student(Sno,Sname,Ssex,Sdept,Sage)
VALUES('201100006','张六','女','IS',18);
INSERT
INTO Course(Cno,Cname,Cpno,Credit)
VALUES('1','数据库原理',NULL,2);
INSERT
INTO Course(Cno,Cname,Cpno,Credit)
VALUES('2','数据结构',NULL,2);
INSERT
INTO Course(Cno,Cname,Cpno,Credit)
VALUES('3','C 语言',NULL,2);
INSERT
INTO Course(Cno,Cname,Cpno,Credit)
VALUES('4','算法',NULL,2);
INSERT
INTO Course(Cno,Cname,Cpno,Credit)
VALUES('5','高等数学',NULL,2);
INSERT
INTO SC(Sno,Cno)
VALUES('201100001','1');
INSERT
INTO SC(Sno,Cno)
VALUES('201100002','2');
INSERT
INTO SC(Sno,Cno)
VALUES('201100003','3');
INSERT
INTO SC(Sno,Cno)
VALUES('201100004','4');
INSERT
INTO SC(Sno,Cno)
VALUES('201100005','5');
3. 插入相应的数据,试着插入重复的元组,结果如何?
INSERT
INTO SC(Sno,Cno)
VALUES('20140005','5');
4. 在已建立的关系模式之上(已插入一些数据)建立主键约束,参
照约束和用户定义的约束(要求学生年龄不小于 14 岁,不大于
35 岁),如果约束不能建立,请分析原因,修改后建立上述约
束。
alter table student add check (Sage between 14 and 35)
在建立主键约束前如果存在数据不满足将要建立的主键约束条件,则不能建立主键约
束。先将相关数据修改为满足主键约束条件再建立主键约束则操作成功。
5. 如果约束建立后,请试着插入重复元组,结果如何?
试着插入重复元组,无法插入:
INSERT
INTO Student(Sno,Sname,Ssex,Sage,Sdept)
VALUES('20140005','Bob5','m',18,'IS');
实验(二): 熟练掌握 SQL 语言
用 SQL 完成下列查询
1. 求选修了课程的学生的学号,要求:
(1) 不使用 distinct 语句,写出其 SQL 语句
Select Sno from SC
(2) 使用 distinct 语句,消除重复元组,写出其 SQL 语句
select distinct Sno from SC
(3) 如果该查询写成:
select
Student.Sno
from Student,
SC where
Student.Sno=SC.Sno
请问该查询结果和上面哪个结果是相同的?
和(1)的结果相同
2. 求开设的课程号、课程名、学时和学分,要求对查询结果
的列重新命名。
select
MyCredict from Course
MyCno
Cno
,Cname
MyCname,Ctime
MyCtime,Credit