SQL实训报告

  • 格式:docx
  • 大小:580.68 KB
  • 文档页数:9

民办四川天一学院
实训报告
学号:
姓名:
院系:
专业:
教师:
2018年月
实训一SQL数据查询实验
一、实训目的
1.熟练掌握基本查询命令select… from… where语法结构;
2.熟练掌握多表查询命令的设计方法;
3.熟练掌握分组聚合查询应用方式方法;
4.通过观察查询结果, 体会查询语句的实际应用。

二、实训原理和内容
(内容宋体小四号,行距固定值24磅,首行缩进2字符)
实训数据库为学生成绩管理数据库ScoreDB,数据库关系模式如下:
Student(studentNo, studentName, sex, birthday, native, nation, classNo)
Class(classNo, className, institute, grade, classNum)
Course(courseNo, courseName, creditHour, courseHour, priorCourse)
Score(studentNo, courseNo, score)
实训内容:
任务1:在学生Student表中查询年龄大于或等于19岁的同学学号、姓名和出生日期。

任务2:在选课Score表中查询成绩在80~90分之间的同学学号、课程号和相应成绩。

任务3:在班级Class表中查询班级名称中含有会计的班级信息。

任务4:在学生Student表中查询籍贯不是“南昌”或“上海”的同学姓名、
1
籍贯和所属班级编号,并按籍贯的降序排序输出。

任务5:查找会计学院全体同学的学号、姓名、籍贯、班级编号和所在班级名称。

任务6:查找选修了课程名称为“计算机原理”的同学学号、姓名。

任务7:查询每个同学的选课门数、平均分和最高分。

任务9:查询平均分在80分以上的每个同学的选课门数、平均分和最高分。

实训要求:设计T_SQL命令,并在SQL Server Management Studio的查询分析器中执行命令,观察并分析结果。

三、实训过程
任务1:在学生Student表中查询年龄大于或等于19岁的同学学号、姓名和出生日期。

任务分析:由任务可知,所需查询的属性都位于一张表student中,因此可以直接进行简单查询,查询条件是...
Year(getdate())-year(birthday)
查询语句设计如下:
select studentNo ,studentName from student where
year(getdate())-year(birthday)>19 and sex='女'
查询结果:
任务2:在选课Score表中查询成绩在80~90分之间的同学学号、课程号和相应成绩。

任务分析:由任务可知,所查询的属性都位于一张表Score中,因此可以直接进行简单查询,查询条件是:
2
3
Where (score>=80 and score<=90) 查询语句设计如下: use ScoreDB select * from Score
where score>=80 and score<=90 查询结果: …
任务3:在班级Class 表中查询班级名称中含有会计的班级信息。

任务分析:由任务可知,所查询的属性都位于一张表Score 中,因此可以直接进行简单查询,查询条件是:
Where (className like '%会计%') 查询语句设计如下: use ScoreDB
select * from Class where className like '%会计%' 查询结果: 任务4:在学生 Student
表中查询籍贯不
是“南昌”或“上海”的同学姓名、籍贯和所属班级编号,并按籍贯的降序排序输出。

任务分析:由任务可知,所查询的属性都位于一张表Score中,因此可以直接进行简单查询,查询条件是:
where [native] not in ('南昌','上海')
查询语句设计如下:
use ScoreDB
select StudentName,[native],classNo
from Student
where [native] not in ('南昌','上海')
查询结果:
任务5:查找会计学院全体同学的学号、姓名、籍贯、班级编号和所在班级名称。

任务分析:由任务可知,所查询的属性在两张关系中,要查询须使用交叉连接,查询条件是:
where a.classNo=b.classNo and institute='会计学院'
查询语句设计如下:
use ScoreDB
select studentno,studentname,[native],a.classno,classname
4
from Student a,Class b
where a.classNo=b.classNo and institute='会计学院'
查询结果:
任务6:查找选修了课程名称为“计算机原理”的同学学号、姓名。

任务分析:由任务可知,所查询的属性在三张关系中,所以要使用自然连接,查询条件是:
where a.studentNo=b.studentNo and
b.courseNo=
c.courseNo and courseName='计算机原理'
查询语句设计如下:
use ScoreDB
select a.studentName,studentName
from Student a,Score b,Course c
where a.studentNo=b.studentNo and
b.courseNo=
c.courseNo and
courseName='计算机原理'
查询结果:
5
任务7:查询每个同学的选课门数、平均分和最高分。

任务分析:由任务可知,所查询的属性都位于一张表Score中,因此可以使用使用直接进行简单查询,
使用简单查询,查询完了之后根据学号进行分组,查询条件是:
group by studentNo
查询语句设计如下:
use ScoreDB
select
Studentno,COUNT(studentno),MAX(score),AVG(score)
from Score
group by studentNo
查询结果:
6
7
任务9:查询平均分在80分以上的每个同学的选课门数、平均分和最高分。

任务分析:由任务可知,所查询的属性都位于一张表Score 中,因此可以使用简单查询,查询结果根据学号进行分组,最后进行筛选。

查询条件:
group by studentNo having avg(score)>80 查询语句设计如下: use ScoreDB
select Studentno,COUNT(studentno),MAX(score),A VG(score) from score group by studentNo having avg(score)>80 查询结果:
四、 实训总结
通过本次实训,掌握了SQL 查询命令的基本使用,以及语法结构 其中对SQL 的投影,连接,有了初步的认识。

相信在以后的实训任务中能够继续加强掌握SQL 查询的使用及理解。

在设计运行SQL 命令中发现有时候会查询不出来,出现错误等问题,主要原因是SQL;命令格式错误或语法和逻辑上的错误。

在实训中体会到SQL
这种中大型数据库使用非常方便,使用起来大大
提高了工作效率,且语法简单,但有些细节的逻辑问题还是要自己理解清楚,不然即使会使用SQL语句查询,但是思想上没有理解还是无法做到完全掌握。

8。