数据库实验三报告

  • 格式:doc
  • 大小:287.00 KB
  • 文档页数:8

数据库实验报告
实验三
实验题目:SQL 基本表查询
指导老师:李萍
专业班级:计算机科学与技术系1001班
姓名:关宇婷(2010100153)
2012年10月13日
实验类:验证实验室:软件实验室一指导教师:李萍实验名称:SQL 基本表查询
实验目的:熟练掌握查询语句的一般格式。

实验任务:熟练掌握连接、嵌套和集合查询的使用。

实验内容: 1. 查询STUDENT表中的所有信息、部分信息。

注意:*的作用
2.查询STUDENT表中计算机系学生的全部信息、查询STUDENT
表中计算机系年龄在20岁以上的学生名单。

3.查询选修了2号课程的学生名单。

注:分别用连接查询、嵌套查询实现,并比较
4.求每个学生的平均成绩和每一门课的平均成绩。

注:集函数的使用、列别名的使用
5.查询没有选修2号课程的学生姓名。

注:用相关子查询和不相关子查询两种方法实现
6.查询选修了全部课程的学生姓名。

注:全称量词的实现5.实验中存在的问题
以下为选做内容:
1.查询至少选修了1号和2号课程的学生名单
2.查询选修了3门或3门以上课程的学生学号(Sno) 3.查询全部学生都选修的课程名
实验步骤:
一.建立数据库students
二.建立STUDENT表、SC表、COURSE表
三.按要求查询表中信息
实验过程代码及效果图:
一.建立数据库students
二.建立STUDENT表、SC表、COURSE表
STUDENT表
Create table STUDENT
(Sno char(10)primary key,
Sname char(20),
Ssex char(5),
Sage smallint,
Sdept char(20));
效果截图:
COURSE表
Create table COURSE
(Cno char(4)primary key,
Cname char(40),
Cpno char(4),
Ccredit smallint
);
效果截图:
SC表
Create table SC
(Sno char(10),
Cno char(4),
Grade smallint,
primary key(Sno,Cno),
foreign key(Sno)references STUDENT(Sno) );
效果截图:
1.查询STUDENT表中的所有信息、部分信息。

注意:*的作用
查询STUDENT表中全体学生的学号与姓名信息
select Sno,Sname from STUDENT
效果截图:
查询STUDENT表中的所有信息
select*from STUDENT
效果截图:
2.查询STUDENT表中计算机系学生的全部信息、查询STUDENT表中计算机系年龄在20岁以上的学生名单。

查询STUDENT表中计算机系学生的全部信息
select*from student where Sdept='计科系'
效果截图:
查询STUDENT表中计算机系年龄在20岁以上的学生名单
select Sname,Sage from student where Sage>20 and Sdept='计科系'
效果截图:
3.查询选修了2号课程的学生名单。

注:分别用连接查询、嵌套查询实现,并比较
连接查询
select Sname,cno from student,sc where student.sno=sc.sno and cno=2
效果截图:
嵌套查询
select Sname from student where sno in(select sno from sc where cno=2) 效果截图:
比较:连接查询的语句比较简单,而嵌套查询的语句更好理解4.求每个学生的平均成绩和每一门课的平均成绩
每个学生的平均成绩
select student.sno,sname,avg(grade)avggrade from student,sc
where student.sno=sc.sno
group by student.sno,sname
效果截图:
每一门课的平均成绩
select cno,avg(grade)avgg from sc group by cno
效果截图:
注:集函数的使用、列别名的使用
5.查询没有选修2号课程的学生姓名。

注:用相关子查询和不相关子查询两种方法实现
不相关子查询
select Sname from student where sno not in
(select sno from sc where cno=2)
效果截图:
相关子查询
SELECT sname FROM student
WHERE NOT EXISTS
(SELECT*FROM sc
WHERE sc.sno=student.sno AND cno='2');
效果截图:
6.查询选修了全部课程的学生姓名。

注:全称量词的实现5.实验中存在的问题
select sname from student
where not exists
(select*from course
where not exists
(select*from sc
where sno=student.sno and
cno=o))
效果截图:
以下为选做内容:
1.查询至少选修了1号和2号课程的学生名单
SELECT SNAME FROM STUDENT WHERE SNO IN
(SELECT SNO FROM SC SC1 WHERE CNO=1 AND EXISTS
(SELECT*FROM SC WHERE CNO=2 AND SNO=SC1.SNO))order by Sno desc 效果截图
2.查询选修了3门或3门以上课程的学生学号(Sno)
select sno from student where sno in(
select sno from sc group by sno
having count(*)>=3)
效果截图
3.查询全部学生都选修的课程名
select cname from course where not exists
(select*from student where not exists
(select*from sc where sno=student.sno and cno=o))
效果截图
实验总结:本次实验也相对简单,但是有个别几个写的时候出现了问题,以下
是实验中出错的问题语句:
1、错误语句分析:
1、select Sname,cno from student,sc where
student.sno=sc.sno and cno=2
开始的时候,把and写成了‘,’结果实现不出来
2、SELECT sname FROM student
WHERE NOT EXISTS
(SELECT * FROM sc
WHERE sc.sno=student.sno AND cno='2');
关于这个相关子查询,开始的时候设置了很多别名,后来语句
就乱七八糟的,验证的时候语句没问题,但结果不是要求的结
果。

经过一定的调整,写出了正常的代码。