数据库系统实验报告广东工业大学
数据库系统实验报告
学院计算机学院
专业计算机科学与技术班级级班
学号
姓名
指导教师
(2016 年12 月)
实验__一__题目数据库及基本表的建立
实验__二__题目查询数据库_
实验__三__题目创建和使用视图、索引、存储过程实验__四_题目小型数据库规划设计
实验平台:SQL Sever 2005
实验题目实验一数据库及基本表的建立
一、实验目的
1、掌握SQL SERVER的查询分析器和企业管理器的使用;
2、掌握创建数据库和表的操作;
二、实验内容和要求
1、分别使用SQL语句、企业管理器(Enterprise Manager)创建数据库;
2、使用SQL语句、企业管理器(Enterprise Manager)创建数据库表;
三、实验主要仪器设备和材料
1.计算机及操作系统:PC机,Windows 2000/xp;
2.数据库管理系统:SQL sever 2000/2003/2005;
四、实验方法、步骤及结果测试
创建一个教学管理数据库SC,其描述的信息有:学生信息、课程信息、教师信息、学生选课成绩、授课信息、班级信息、系部信息、专业信息。
创建:student表(学生信息表)、course表(课程信息表)、teacher表(教师信息表)、student _course表(学生选课成绩表)、teacher_course表(教师上课课表)等。
1、创建数据库:
确定数据库名称;数据库用于学生管理,命名为SC
确定数据库的位置;要求:数据文件和日志文件分别存储在E盘自己的目录下。
确定数据库的大小;根据实际的数据量确定数据文件的初始大小为30MB,日志文件的初始大小为3MB。
确定数据库的增长;根据实际情况,确定数据文件按20%增长,日志文件按1MB增长。(1)、利用查询分析器(Query Analyzer),使用SQL语句指定参数创建数据库;
利用查询分析器,使用SQL语句方式创建方式将下面各表建立到教学管理数据库中。
字段名代码类型约束
学号s_no char(8) 主键
姓名sname char(8) 非空
性别sex char(2)
出生日期sbirthday Smalldatetime
学生所在院系编号dno char(6) 外键专业代码spno char(8) 外键
班级编码class_no char(4)
字段名代码类型约束
课程编号cno char(10) 主键
课程名称cname char(20) 非空
专业代码spno char(8) 外键
课程类型编号ctno tinyint
理论学时lecture tinyint
实验学时experiment tinyint
开课学期semester tinyint
课程学分credit tinyint
字段名代码类型约束
学号s_no char(8) 主键,与student表中s_no 外键关联,级联删除上课编号tcid smallint 主键
学生成绩score tinyint
字段名代码类型约束
教师编号t_no char(8) 主键
教师姓名t_name char(8) 非空
(8)创建班级表(class)
class_3114006159
spno class_no header
course_3114006159
deparment_3114006159
dno dept_nam header
speciality_3114006159
spno dno spnam student_3114006159
student_course_3114006159
teacher_3114006159
teacher_course_3114006159
SQL语句
USE SC_3114006159
GO
CREATE TABLE student_3114006159 (s_no char(8)PRIMARY KEY,
sname char(8)NOT NULL,
sex char(2),
sbirthday smalldatetime,
dno char(6),
spno char(8),
class_no char(4)
);
CREATE TABLE course_3114006159 (cno char(10)PRIMARY KEY,
cname char(20)NOT NULL,
spno char(8),
ctno tinyint,
lecture tinyint,
experiment tinyint,
semester tinyint,
credit tinyint
);
CREATE TABLE
student_course_3114006159
(s_no char(8),
tcid smallint,
score tinyint,
PRIMARY KEY(s_no,tcid)
);
CREATE TABLE teacher_3114006159 (t_no char(8)PRIMARY KEY,
t_name char(8)NOT NULL,
t_sex char(2),
t_birthday smalldatetime,
dno char(6),
tech_title char(10)
);
CREATE TABLE
deparment_3114006159
(dno char(6)PRIMARY KEY,
dept_name char(20)NOT NULL,
header char(8)
); 查询分析器执行情况:
SQL语句及执行结果截图显示
ADD FOREIGN KEY(dno)
REFERENCES
deparment_3114006159 (dno);
ALTER TABLE
teacher_course_3114006159
ADD FOREIGN KEY(t_no)
REFERENCES
teacher_3114006159(t_no);
ALTER TABLE
teacher_course_3114006159
ADD FOREIGN KEY(spno)
REFERENCES
speciality_3114006159(spno);
ALTER TABLE
teacher_course_3114006159
ADD FOREIGN KEY(cno)
REFERENCES
course_3114006159(cno);
ALTER TABLE class_3114006159
ADD FOREIGN KEY(spno)
REFERENCES
speciality_3114006159(spno);
5、利用查询分析器修改上述各表。
(1)、用INSERT语句向各个表中插入数据录入5 条记录。录入时注意体会外键约束。
实验结果截图显示(插入数据的表格)查询分析器执行情况:
SQL语句及执行结果显示
insert into deparment_3114006159
values('659801','计算机','周杰伦');
insert into deparment_3114006159
values('659802','机电','陈奕迅');
insert into deparment_3114006159
values('659803','外国语','章子怡');
insert into deparment_3114006159
values('659804','土木','梁朝伟');
insert into deparment_3114006159
values('659805','环境','张国荣');
insert into teacher_3114006159
values('65980101','刘德华','男
','1975-03-25','659801','高级');
insert into teacher_3114006159
values('65980201','周润发','男
','1964-09-24','659802','高级');
insert into teacher_3114006159 values('65980301','张学友','男
','1956-06-15','659803','高级');
insert into teacher_3114006159 values('65980401','张曼玉','女
','1965-04-21','659804','高级');
insert into teacher_3114006159 values('65980501','陈坤','男
','1988-03-02','659805','高级');
insert into speciality_3114006159 values('65980110','659801','计算机科学与技术');
insert into speciality_3114006159 values('65980210','659802','自动化'); insert into speciality_3114006159 values('65980310','659803','商务英语'); insert into speciality_3114006159 values('65980410','659804','土木工程'); insert into speciality_3114006159 values('65980510','659805','环境工程');
insert into class_3114006159
values('65980110','1401','刘德华'); insert into class_3114006159
values('65980210','1402','周润发'); insert into class_3114006159
values('65980310','1403','张学友'); insert into class_3114006159
values('65980410','1404','张曼玉'); insert into class_3114006159
values('65980510','1405','陈坤');
insert into course_3114006159
values('6598011001','数据库
','65980110',1,48,12,1,2);
insert into course_3114006159
values('6598021001','制图
','65980210',2,56,6,2,2);
values(
'31140005','郭敬明','男
','1995-12-03','659805','65980510','1405')
;
insert into student_course_3114006159
values('31140001',1,96);
insert into student_course_3114006159
values('31140002',3,67);
insert into student_course_3114006159
values('31140003',2,91);
insert into student_course_3114006159
values('31140004',4,89);
insert into student_course_3114006159
values('31140005',5,96);
(2)、用UPDATE语句更改student表中数据;
实现代码:
use SC_3114006159
update student_3114006159
set sname='村上春树'
student表更改前的内容截图显示查询分析student表更改后的内容截图显示
实现代码:
use SC_3114006159
delete
where s_no in
(select s_no
from student_3114006159
where sname='郭敬明');
delete
from student_3114006159
student表更改前的内容截图显示查询分析student表更改后的内容截图显示
五、实验中出现的问题及解决方案
在插入数据时没注意外键约束,结果导致插入失败,于是根据数据表关系图先插入没有外键约束的表,再根据外键约束关系按照一定顺序插入表。在删除student的元组时,因为其主键被student_course表外键所参照,所以无法删除,于是先删除student_course 表中的元组,再删除student中的元组。
六、思考题
1、说明数据库中的表和数据文件的关系。
答:表存储于数据文件中,一个数据文件可以存储多个表。
2、数据库中的日志文件能否单独修改?
不能,SQL Server数据库都有log日志文件,log日志文件记录用户对数据库修改的操作,只有数据库发生更改时,日志文件才会发生更改,不能单独更改。
3、附加练习题.(代码以及运行结果采用截图显示)
(1) 将计算机专业所有学生的数据库原理的成绩增加10分
代码以及运行结果:
(2) 删除计算机专业所有学生的数据库原理的选修信息代码以及运行结果:
(3) 为speciality的spname添加唯一约束
代码以及运行结果:
(4) 为student_course的score设置检查约束代码以及运行结果:
实验题目实验二查询数据库
一、实验目的
熟悉SQL语句的基本使用方法,学习如何编写SQL语句来实现查询
1、掌握基本的SELECT查询及其相关子句的使用;
2、掌握复杂的SELECT查询,如多表查询、子查询、连接查询和嵌套查询。
二、实验内容和要求
使用SQL查询分析器查询数据,练习查询语句的使用,掌握SELECT 语句的完整结构,包括简单查询、嵌套查询、连接查询等基本实现方法,掌握存储查询结果的方法,体会各种查询的异同及相互之间的转换,体会各种查询的执行过程,为简单综合应用打下良好的基础。
三、实验主要仪器设备和材料
1.计算机及操作系统:PC机,Windows 2000/xp;
2.数据库管理系统:SQL sever 2000/2003/2005;
四、实验方法、步骤及结果测试
要求用SELECT完成以下查询,
1、对实验一建立的数据库表进行查询
简单查询:
(1)、查询全部学生的学号、姓名、性别和出身年月日。
查询结果截图显示
查询分析器执行情况:
SQL语句及执行结果显示
use SC_3114006159
select
s_no,sname,sex,sbirthday
from student_3114006159
(2)、查询全体学生的学号、姓名和年龄
use SC_3114006159
select
s_no,sname,sex,year(getdate())-year(sbirth
day)
from student_3114006159
(3)、查询院系编号为‘510000’(计算机学院)的全部学生的学号、姓名、性别和出身年月日。
实现代码及查询结果截图:
use SC_3114006159
select s_no,sname,sex,sbirthday
from student_3114006159
where dno='659801'
(4)、查询“计算机科学与技术”专业(专业代码为‘080605’)并且班级代码为‘0201’的学生的学号、姓名和出生日期。
实现代码及查询结果截图:
use SC_3114006159
select s_no,sname,sbirthday
from student_3114006159
where spno='65980110'and
class_no='1401'
(5)、查询在‘1983/01/10’以后出生的计算机学院(院系编号为‘510000’)学生的学号、姓名、性别和出身年月日。
use SC_3114006159
select s_no,sname,sex,sbirthday
from student_3114006159
where dno='659801'and
sbirthday>'1983-01-10'
(6)、查询全部学生的学号、姓名、性别和出身日期结果按照出生日期的升序排列。
use SC_3114006159
select s_no,sname,sex,sbirthday
from student_3114006159
order by sbirthday
连接查询:
(1)、查询全部学生的学号、姓名、性别、所在院系名称和专业名称
实现代码及查询结果截图:
use SC_3114006159
select s_no,sname,sex,dept_name,spname
from
student_3114006159,deparment_311400
6159,speciality_3114006159
where
student_3114006159.dno=deparment_31
14006159.dno and
deparment_3114006159.dno=speciality_3
114006159.dno
(2)、查询选修了课程1(上课编号)的学生的学号、姓名、专业名称和这门课的成绩
use SC_3114006159
select
student_3114006159.s_no,sname,spna
me,score
from
student_3114006159,student_course_3
114006159,speciality_3114006159
where
student_3114006159.s_no=student_cou
rse_3114006159.s_no and
student_3114006159.spno=speciality_3
114006159.spno and
tcid=1
(3)、查询学生不及格的情况列出不及格学生的学号、姓名和不及格的课程名称。
use SC_3114006159
select
student_3114006159.s_no,sname,cname
from
student_3114006159,student_course_31140
06159,course_3114006159
where
student_3114006159.s_no=student_course_
3114006159.s_no and
student_course_3114006159.tcid=course_31
14006159.ctno and
score<60
嵌套查询:
(1)、查询没有选修了课程1的学生,列出学生的学号和姓名。
use
SC_3114006159
select distinct student_3114006159.s_no,sname
from
student_3114006159,student_course_3114006159
where student_3114006159.s_no not in(
select s_no
from student_course_3114006159
where tcid=1)
(2)、查询每门课都是80分以上的学生的学号与姓名。
use SC_3114006159
select distinct student_3114006159.s_no,sname
from student_3114006159
where not exists(
select*
from student_course_3114006159
where
student_3114006159.s_no=student_course_3114006
159.s_no and score<80)
2、选用Northwind数据库进行查询
(1)、对NothWind. Products表进行简单查询;在查询分析器在窗口下用SELECT语句以下部分查询结果截图由于表格过长,所以只截取了部分表格内容,无法完整截图整个表格。完成单表查询:
查询所有Products的详细记录;
实现代码及查询结果截图:
use Northwind
select*
from Products
查询单价(UnitPrice)小于20的Products;
实现代码及查询结果截图:
use Northwind
select*
from Products
where UnitPrice<20
查询Products中最高单价(UnitPrice)是多少;
实现代码及查询结果截图:
use Northwind
select max(UnitPrice)
from Products
(2)、在查询分析器在窗口下用SELECT语句完成连接(嵌套)查询:查询所有被订购过得Products的ProductsID和ProductName;实现代码及查询结果截图:
use Northwind
select distinct Products.ProductID,Products.ProductName
from Products,[Order Details]
where Products.ProductID=[Order Details].ProductID