数据库原理及应用
实验指导书
湖南工程学院计算机科学与通信学院
2011年9月
实验一
一、
实验目的:
掌握建立一个数据库表结构的方法和步骤 ,了解数据库表的基本组成。
二、 实验内容:
基本表的创建和修改。
三、 实验要求:(必做)
硬件:Intel Pentium 120或以上级别的CPU,大于16MB的内存。
软件:Windows 95/98/2000操作系统,关系数据库管理系统SQL SERVER 2000。 学时:2学时
四、 实验步骤:
1、用create建立教学数据库的五个基本表:
(1)学生表(学号,姓名,性别,年龄),student((Sno, sname, ssex,sage) ; (2)课程表(课程号,课程名,学分),Course (Cno, Cname, credit) ; (3)选课表(学号,课程号,成绩),SC (Sno,, Cno, grade ) ; (4) 教师表(教师号,姓名,性别,出生年月,系部,职称,地址),
T(Tno,Tname,ssex,birthday,dept,title,address) ; (5) 工资表(教师号,基本工资,职务工资,合计),
Salary(Tno,jbgz,zwgz,hj); 2、用alter修改基本表
(1)在已存在的学生表student中增加一个sdept(系)的新的属性列;
(2)将学生表student中sname属性列的数据类型修改为变长字符串varchar(10)。 3、建立一个临时表,然后将其删除
--------/*学生表*/
create table Student (Sno char(4)not null, Sname char(8), Ssex char(4), Sage smallint) ---------
create table Course (Cno char(4)not null, Cname char(40), Credit smallint)
create table SC (Sno char(9)not null, Cno char(4)not null, grade smallint ) ---------
create table T (Tno char(4)not null, Tname char(20), ssex char(4), birthday char(10), dept char(20), title char(10),
address varchar(40)) ---------/**/
create table Salary (Tno char(4)not null, jbgz money, zwgz money, hj money,)
--------------------------------------------------------- /*在已存在的学生表student中增加一个sdept(系)的新的属性列*/ Alter table Student add Sdept char(20)
--------------------------------------------------------
/*将学生表student中sname属性列的数据类型修改为变长字符串varchar(10)。*/ Alter table Student
alter column Sname char(10);
---------------------------------------------------------- /*3、建立一个临时表,然后将其删除*/
create table Student01 (Sno char(4), Sname char(8), Ssex char(4), Sage smallint, Sdept char(4))
drop table Student01
实验二
一、实验目的:
了解建立索引的目的,掌握建立索引与删除索引, 掌握创建、修改、删除约束。
二、实验内容:
建立聚簇索引、非聚簇索引、唯一索引、复合索引,删除索引,创建、修改、删除约束力。
三、实验要求:(必做)
硬件:Intel Pentium 120或以上级别的CPU,大于16MB的内存。
软件:Windows 95/98/2000操作系统,关系数据库管理系统SQL SERVER 2000。 学时:2学时
四、实验步骤:
1、用create index在学生表student的学号sno上建立聚簇索引。 2、在学生表student中,为姓名sname建立非聚簇索引。 3、在课程表的课程号Cno上建立唯一索引。
4、在选课表的学号sno、成绩Grade上建立复合索引,要求学号为升序,学号相同时成绩为
降序。
5、用drop删除学生表student的索引。 6、增加学生表student中姓名唯一约束。
7、增加学生表student中性别‘男’、‘女’唯一约束。 8、增加学生表student中年龄18~25岁约束。 9、增加选课表SC中学号sno的外码约束。
二、实验内容与步骤
/*用create index在学生表student的学号sno上建立聚簇索引。*/ create clustered index stuSno on Student(Sno)
/*-----在学生表student中,为姓名sname建立非聚簇索引。---*/ create index stuSname on Student(Sname)
/*在课程表的课程号Cno上建立唯一索引。*/
create unique index CoCno on Course(Cno)
/*在选课表的学号sno、成绩Grade上建立复合索引,要求学号为升序,学号相同时成绩为降序。*/
create index SCsg on SC(Sno ASC,grade DESC)-----
/*---、用drop删除学生表student的索引----*/ drop index student.stuSno drop index student.stuSname
/*---增加学生表student中姓名唯一约束。-----*/ alter table Student add unique(Sname)
/*---增加学生表student中性别‘男’、‘女’唯一约束。----*/ alter table student
add constraint ck_Ssex check(Ssex in('男','女')) /*---增加学生表student中年龄~25岁约束。-----*/ alter table student
add constraint ck_Sage check (Sage between 18 and 25) /*---增加选课表SC中学号sno的外码约束----*/ alter table Student
add constraint c3 primary key(Sno) alter table SC
add constraint ck_Sno foreign key(Sno) references Student(Sno)
实验三
一、实验目的:
掌握向数据表中输入、更新和删除记录的基本方法。
二、实验内容:
数据记录的插入、更新和删除 。
三、实验要求:(必做)
硬件:Intel Pentium 120或以上级别的CPU,大于16MB的内存。
软件:Windows 95/98/2000操作系统,关系数据库管理系统SQL SERVER 2000。 学时:2学时
四、实验步骤:
1、用insert输入数据。 学生表student的数据 991201 张三 991202 991101 991102 991103 000101
课程表course的数据 1 2 3 4 数学 数据结构 程序设计 数据库原理 5 4 2 3 3 李四 王五 陈六 吴七 刘八 22 21 23 19 24 22 男 男 男 男 女 女 计算机系 信息系 数学系 计算机系 数学系 信息系 5 操作系统
选课表SC的数据 991201 991201 1 5 90 80 991201 991201 991102 991102 000101 基本表T的数据 0001 0002 1001 1008
基本表Salary的数据 0001 0002 1001
1000 1500 800 张三 李四 王五 陈六 3 4 1 2 2 85 90 85 98 91 男 女 男 男 1968-10 1956-11 1973-07 1970-08 信息 信息 计算机 计算机 副教授 教授 讲师 副教授 湘潭 长沙 湘潭 北京 300 500 200 1300 2000 1000 2、用delete删除数据记录
(1)删除教师表T中教师号为0001的元组。 (2)删除教师表T中的全部数据。 3、用 update更新数据记录
(1) 把0001号教师的基本工资加100。 (2) 把所有教师的基本工资都加100。
二、实验内容与步骤
insert into dbo.Student(Sno,Sname,Sage,Ssex,Sdept) values('991201', '张三','22','男','计算机系') insert into dbo.Student(Sno,Sname,Sage,Ssex,Sdept) values('991202', '李四','21','男','信息系') insert into dbo.Student(Sno,Sname,Sage,Ssex,Sdept) values('991101', '王五','23','男','数学系') insert into dbo.Student(Sno,Sname,Sage,Ssex,Sdept) values('991102', '陈六','19','男','计算机系') insert into dbo.Student(Sno,Sname,Sage,Ssex,Sdept)
values('991103', '吴七','24','女','数学系') insert into dbo.Student(Sno,Sname,Sage,Ssex,Sdept) values('000101', '刘八','22','女','信息系')
--------------------------------------- insert into dbo.Course(Cno,Cname,Credit) values('1', '数学','5')
insert into dbo.Course(Cno,Cname,Credit) values('2', '数据结构','4')
insert into dbo.Course(Cno,Cname,Credit) values('3', '程序设计','2')
insert into dbo.Course(Cno,Cname,Credit) values('4', '数据原理','3')
insert into dbo.Course(Cno,Cname,Credit) values('5', '操作系统','3')
-------------------------
insert into dbo.SC(Sno,Cno,grade) values('991201', '1','90') insert into dbo.SC(Sno,Cno,grade) values('991201', '5','80') insert into dbo.SC(Sno,Cno,grade) values('991201', '3','85') insert into dbo.SC(Sno,Cno,grade) values('991201', '4','90') insert into dbo.SC(Sno,Cno,grade) values('991102', '1','85') insert into dbo.SC(Sno,Cno,grade) values('991201', '2','98') insert into dbo.SC(Sno,Cno,grade) values('000101', '2','91') ---------------------
insert into dbo.T(Tno,Tname,ssex,birthday,dept,title,address)
values('0001', '张三','男',convert(char(10),'1968-10'),'信息','副教授','湘潭')
insert into dbo.T(Tno,Tname,ssex,birthday,dept,title,address)
values('0002', '李四','女',convert(char(10),'1956-11'),'信息','教授','长沙')
insert into dbo.T(Tno,Tname,ssex,birthday,dept,title,address)
values('1001', '王五','男',convert(char(10),'1973-07'),'计算机','讲师','湘潭')
insert into dbo.T(Tno,Tname,ssex,birthday,dept,title,address)
values('1008', '陈六','男',convert(char(10),'1970-08'),'计算机','副教授','北京')
------------------------------------ insert into dbo.Salary(Tno,jbgz,zwgz,hj) values('0001', '1000','300','1300') insert into dbo.Salary(Tno,jbgz,zwgz,hj) values('0002', '1500','500','2000')
insert into dbo.Salary(Tno,jbgz,zwgz,hj) values('1001', '800','200','1000') /*删除教师表T中教师号为的元组*/ delete from T
where Tno = '0001';
/*删除教师表T中的全部数据。*/ delete from T
/*() 把号教师的基本工资加*/ update dbo.Salary
set jbgz = jbgz+100 where Tno = '0001'; /*() 把所有教师的基本工资都加*/
update dbo.Salary set jbgz = jbgz+100;
实验四
一、实验目的:
掌握数据表的简单查询和多表连接方法。
二、实验内容:
数据库文件的简单和多表连接查询。
三、实验要求:(必做)
硬件:Intel Pentium 120或以上级别的CPU,大于16MB的内存。
软件:Windows 95/98/2000操作系统,关系数据库管理系统SQL SERVER 2000。 学时:4学时
四、实验步骤:
1、简单查询,用select检索 (1)查询所有学生的基本情况。 (2)查询教师每月应交纳的个人所得税。 (3)查询张三与李四两位同学的基本情况。
(4)查询9911班学生的基本信息(规定学生学号的前四位是班级号)。 (5)查询所有年龄在20岁以下的学生姓名及其年龄。 (6)查询选修了2门以上课程的学生学号。 2、多表查询,用select检索
(1)查询教师的收入情况,包括教师号、姓名及月总收入。 (2)查询每个学生的学号、姓名、选修课程及成绩。 (3)查询每一门课的间接先修课。 (4)查询有相同地址的两位教师的信息。
(5)查询选修2号课程且成绩在90分以上的所有学生。 (6)查询与王五在同一个系学习的学生。
-------------------------------------------------------- /*查询所有学生的基本情况*/ select * from Student
/*查询教师每月应交纳的个人所得税*/ select Salary.hj,
(case when (hj>'500' and hj<='1500') then hj * 0
when (hj>'1500' and hj<='4500') then hj * 0.05 else 0 end) as '应缴个人所得税' from Salary
/*查询张三与李四两位同学的基本情况*/ select *
from Student
where Sname='张三'or Sname='李四'
/*查询班学生的基本信息(规定学生学号的前四位是班级号)*/ select * from Student
where Sno like '9911__'或者’9911%’ /*查询所有年龄在岁以下的学生姓名及其年龄*/ select Sname,Sage from Student where Sage<20
/*查询选修了门以上课程的学生学号*/ select Sno from SC group by Sno having count(*)>2
/*查询教师的收入情况,包括教师号、姓名及月总收入*/
select Tname,T.Tno,hj from T,Salary where T.Tno=Salary.Tno /*查询每个学生的学号、姓名、选修课程及成绩*/ select Student.Sno,Sname,SC.Cno,grade from Student,SC
where dbo.SC.Sno=dbo.Student.Sno /*查询每一门课的间接先修课*/
select First.Cno,Second.Credit from Course First,Course Second where First.Credit=Second.Cno /*查询有相同地址的两位教师的信息*/ select *
from dbo.T
where address =(select address from T
group by address having count(*)>=2) /*查询选修号课程且成绩在分以上的所有学生*/ select *
from Student
where Sno in(select Sno from SC where grade>=90 and Cno='2') /*查询与王五在同一个系学习的学生*/ select Sname from Student
where Sdept in(select Sdept from Student where Sname='王五')
因篇幅问题不能全部显示,请点此查看更多更全内容