南华大学计算机科学与技术学院实验报告(2013 ~2014 学年度第二学期)课程名称:数据库原理与技术实验名称:认识DBMS姓名:学号:专业:软件工程班级:2班地点:教师:刘征海实验一认识DBMS一、实验要求1、利用管理工具创建数据库、表和表间关系(1) 利用SQL Server Management Studio 创建数据库,名称为【学生选课YYXXXX】。
其中YY为专业代号,计算机为JS,软件工程为RJ,网络为WL,数媒为SM;XXXX为各位同学的学号中的最后四位(2) 在【学生选课YYXXXX】中建立数据表,表的定义如下所示。
学生YYXXXX(学号,姓名,性别,出生日期,院系名称,备注);课程YYXXXX(课程号,课程名,先行课,学分);选修YYXXXX(学号,课程号,分数)。
要求定义每张表的主码,为属性选择合适的数据类型,决定是否允许为空,为【性别】和【学分】属性定义默认值。
(3) 定义表之间的关系。
(4) 分别为表录入几行数据记录,同时练习数据的修改和删除操作。
1)实验操作过程截图如下:2、利用SQL 语句创建数据库、表和表间关系在SQL Server Management Studio 中新建查询,实现以下操作。
(1) 用SQL 语句创建数据库,名称为“StudentCourseYYXXXX”。
其中YYXXXX 为各位同学的学号中的最后四位。
(2) 用SQL 语句创建StudentCourseYYXXXX 中的3 张表,同时指定主码、外码、默认值等。
(3) 比较“学生选课YYXXXX”和StudentCourseYYXXXX 两个数据库是否一致。
二、实验代码及操作结果显示新建数据库:create database StudentCourseRJ0214新建StudentsRJ0214表:create table StudentsRJ0214(Sno nchar(10) primary key,Sname nchar(10) not null,Ssex nchar(10) ,Sbirthday date ,Sdept nchar(10) ,Memo nchar(10))新建CoursesRJ0214表:create table CoursesRJ0214(Cno nchar(10) ,Cname nchar(10) not null,PreCno nchar(10) ,Credit tinyint,primary key(Cno))新建SCRJ0214表:create table SCRJ0214(Sno nchar(10) not null,Cno nchar(10) not null,Grade tinyint,primary key(Sno,Cno),foreign key(Sno) references StudentsRJ0214 (Sno),foreign key(Cno) references CoursesRJ0214 (Cno))录入数据:use StudentCourseRJ0214insert into StudentsRJ0214 values ('0602001','钟文辉','男','1987-05-01','计算机','优秀毕业生') insert into StudentsRJ0214 values ('0602002','吴细文','女','1987-03-24','计算机','爱好:音乐') insert into StudentsRJ0214 values ('0602003','吴朝西','男','1988-07-01','计算机',null)insert into StudentsRJ0214 values ('0701001','王冲瑞','男','1988-05-04','机电','爱好:音乐') insert into StudentsRJ0214 values ('0701002','林滔滔','女','1987-04-03','机电','爱好:体育') insert into StudentsRJ0214 values ('0701003','李修雨','女','1986-03-03','机电',null)insert into StudentsRJ0214 values ('0703001','李奇','男','1988-09-17','商贸管理',null)insert into CoursesRJ0214 values ('C1','程序设计基础(C)',null,'4')insert into CoursesRJ0214 values ('C2','数据库原理','C1','4')insert into CoursesRJ0214 values ('C3','SQL 程序设计','C2','4')insert into CoursesRJ0214 values ('C4','音乐欣赏',null,'1')insert into SCRJ0214 values ('0602001','C1','61')insert into SCRJ0214 values ('0602001','C2','72')insert into SCRJ0214 values ('0602001','C3','88')insert into SCRJ0214 values ('0602002','C1',null)insert into SCRJ0214 values ('0602002','C2','61')insert into SCRJ0214 values ('0701001','C1','50')insert into SCRJ0214 values ('0701001','C2',null)insert into SCRJ0214 values ('0701002','C3','78')insert into SCRJ0214 values ('0701003','C1','52')insert into SCRJ0214 values ('0701003','C3','87')三、实验总结本次实验较为简单,主要是让我们了解DBMS。
使用DBMS新建数据库或者表等都有2种方式,一是直接可视化操作,在快捷菜单中选择新建数据库,然后在新建的数据库中新建表即可,这种方式比较简单,也容易操作。
第二种方式是新建查询,使用SQL语句,通过这种方式要求我们懂得基本的新建语句,当然,这些也不难掌握,使用create即可。
实验二交互式SQL(1)一、实验要求1、数据库单表查询(1) 选择要查询的数据库,右击【新建查询】,或者选择系统菜单中的【文件】|【新建】|【使用当前连接查询】命令,或者单击标准工具栏中的【新建查询】按钮,即可新建一个查询窗口。
如果查询数据库不是StudentCourseRJ0214,则可在可用数据库下拉列表中进行选择,或用USE 语句调用。
(2) 在查询窗口中输入SELECT 查询语句,对StudentCourseRJ0214 数据库进行查询操作。
①查询计算机系全体学生的信息②查询姓“李”的学生的学号和姓名。
③查询课程表中先行课为空的课程名。
④查询考试成绩有不及格的学生的学号。
⑤求选修了C1 课程或C2 课程的学生的学号及成绩。
⑥查询全体计算机系学生的姓名及其年龄。
⑦查询计算机系在1986-1987 年之间出生的学生的姓名。
⑧查询姓“李”的前两个学生的学号和姓名。
⑨查询选修了两门以上课程的学生学号与课程数。
⑩查询选修课程数大于等于2 的学生的学号、平均成绩和选课门数,并按平均成绩降序排列。
2、数据库多表连接查询新建查询窗口,选择StudentCourseRJ0214 为当前数据库,输入如下SELECT查询语句并执行,对数据库进行多表连接查询操作。
(1) 查询选修了【数据库原理】的计算机系的学生学号和姓名。
(2) 查询每一门课的间接先行课(即先行课的先行课)。
(3) 查询学生的学号、姓名、选修课程的名称和成绩。
(4) 查询选修了课程的学生姓名。
(5) 查询所有学生的信息和所选修的课程。
(6) 查询已被选修的课程的情况和所有课程的名字。
(7) 列出学生所有可能的选修情况。
(8) 查找计算机系的学生选修课程数大于2 的学生的姓名、平均成绩和选课门数,并按平均成绩降序排列。
二、实验代码及操作过程截图数据库单表查询:select * from StudentsRJ0214where Sdept = '计算机'②select Sno,Sname from StudentsRJ0214 where Sname like '李%'③select Cname from CoursesRJ0214 where PreCno is null④select Sno from SCRJ0214 where Grade < 60⑤select Sno,Grade from SCRJ0214 where Cno = 'C1' or Cno = 'C2'⑥select Sname ,DateDiff(year,Sbirthday,getchar()) as Sage from StudentsRJ0214 where Sdept=’计算机’⑦select Sname from StudentsRJ0214where Sbirthday between '1986-01-01' and '1987-12-31 ' and Sdept = '计算机'⑧select top 2 Sno, Sname from StudentsRJ0214where Sname like '李%'⑨select Sno,COUNT(Cno) 课程数from SCRJ0214 SC group by SC.Snohaving COUNT(Cno) > 2⑩select Sno,A VG(Grade) 平均成绩,COUNT(o) 选课门数from SCRJ0214 SC group by SC.Snohaving COUNT(o) >= 2order by A VG(Grade) desc数据库多表连接查询:(1)select S.Sno,Sname from StudentsRJ0214 Sjoin SCRJ0214 SC on S.Sno = SC.Snojoin CoursesRJ0214 C on o=owhere Sdept ='数据库原理’and Cname = '计算机'(2)select ame 课程名,ame 先行课的先行课from CoursesRJ0214 a left join CoursesRJ0214 b on a.PreCno = o(3)select S.Sno,Sname,Cname,Grade from StudentsRJ0214 S join SCRJ0214 SC on S.Sno = SC.Snojoin CoursesRJ0214 C on o = o(4)select distinct Sname from StudentsRJ0214 Sleft join SCRJ0214 SC on SC.Sno = S.Snowhere Cno is not null(5)select S.Sno,Sname,Ssex,Sbirthday,Sdept,Memo,Cname from StudentsRJ0214 S join SCRJ0214 SC on S.Sno = SC.Snojoin CoursesRJ0214 C on o = o(6)select distinct Cname,count(Sno) 选课人数from CoursesRJ0214 C join SCRJ0214 SC on o = owhere o in(select Cno from SCRJ0214)group by Cname(7)select S.Sno,Sname,Ssex,Sbirthday,Sdept,Memo,Cname ,Grade from StudentsRJ0214 S join SCRJ0214 SC on S.Sno = SC.Snojoin CoursesRJ0214 C on o = o(8)select Sname,A VG(Grade) 平均成绩,COUNT(o) 选课门数from StudentsRJ0214 Sjoin SCRJ0214 SC on S.Sno = SC.Snojoin CoursesRJ0214 C on o = ogroup by .Snamehaving COUNT(o) > 2order by A VG(Grade) desc三、实验总结通过这次实验,我已经熟练掌握了单表查询SELECT、FROM、WHERE 的用法和比较运算符、逻辑运算符的使用方法。