《数据库系统原理及应用》实验报告 实验二:T-SQL简单数据库查询
专业班级:软件1402姓名 魏振方 学号 201416920306完成时间:2016.10.17 一、实验目的
牢记SELECT 语句的基本语法格式;掌握利用SQL语句进行多表内/外连接查询和嵌套查询的方法;掌握GROUP BY子句、HAVING子句、ORDER BY子句的用法;掌握(NOT)IN、(NOT)EXISTS等谓词的用法;掌握SUM、AVG、COUNT、MAX、MIN等集合函数的用法。 二、实验内容及要求
实验详细内容如下:在实验一中建立的三张表(student、course、sc)的基础上,完成如下内容的练习: 1.单表查询:
(1)查询计算机系学生的信息; (2)查询全体学生的人数; (3)查询全体男生人数和女生人数;
(4)查询每个系中的男生人数并按人数的降序排列; (5)查询名字中带“阳”的学生信息;
(6)求被选修的各门课程的平均成绩和选修该课程的人数; (7)查找选修课程超过2门且成绩都在80分以上的学生的学号。 2.多表查询:
(1)查询未选课的学生学号、姓名和所在系;
(2)查询每个学生的选课情况包含学生学号、姓名、所选课程、成绩;
(3)查询没有学生选的课程信息;
(4)查询每个学生选课的总学分数,并按总学分数的降序排列;
(5)查询选修了数据库课程且成绩在80分以上的学生的学号、姓名、课程名及成绩;
(6)查询选修数据库课程并且成绩在90分以上的学生学号和姓名; (7)查找每个学生的选修课程情况(只查看选课的学生情况); (8)查找所有学生的选课情况(若学生未选课也要包括在内); (9)查找被选修了的课程的选课情况和所有开设的课程名; 三、实验结果(包含每一个正确查询的sql语句和运行结果截屏) 1.单表查询:
(1)查询计算机系学生的信息;
select student.* from Student where Sdept='cs'
(2)查询全体学生的人数;
select count(*) 全体学生人数 from Student
(3)查询全体男生人数和女生人数;
select ssex, count(Ssex) 人数 from Student
group by ssex
(4)查询每个系中的男生人数并按人数的降序排列;
from Student
group by Ssex ,Sdept having Ssex='男'
select sdept,ssex,count(Sdept) 人数
(5)查询名字中带“阳”的学生信息;
select Student.* from Student
where Sname like '%阳'
(6)求被选修的各门课程的平均成绩和选修该课程的人数;
select cno 课程号,count(sno) 人数,AVG(grade) 平均成绩 from sc
where grade is not null group by Cno
(7)查找选修课程超过2门且成绩都在80分以上的学生的学号。
select sno from sc where Grade>80 group by sno
having count(Sno)>1
2.多表查询:
(1)查询未选课的学生学号、姓名和所在系;
select student.sno 学号,Sname 姓名,Sdept 系,Cno from student left outer join sc on(Student.sno=sc.Sno) where cno is nul
(2)查询每个学生的选课情况包含学生学号、姓名、所选课程、成绩;
select student.sno 学号,Sname 姓名,Cname,Grade
from student left outer join sc on(Student.Sno=sc.Sno) left outer join Course on(sc.Cno=course.Cno)
(3)查询没有学生选的课程信息;
select Course.Cno,Cname,Sno
from sc right outer join Course on(sc.Cno=Course.Cno) where Sno is null
(4)查询每个学生选课的总学分数,并按总学分数的降序排列;
select sum(Ccredit) 总学分,Sno from sc,Course
where sc.Cno=Course.Cno group by Sno
order by(sum(Ccredit))desc
(5)查询选修了数据库课程且成绩在80分以上的学生的学号、姓名、课程名及成绩;
select Student.Sno,Sname,Cname,grade from student,sc,Course where sc.Cno=Course.Cno and
Student.Sno=sc.Sno and Cname='数据库' and Grade>80
(6)查询选修数据库课程并且成绩在90分以上的学生学号和姓名;
select Student.Sno,Sname from student,sc,Course where sc.Cno=Course.Cno and
Student.Sno=sc.Sno and Cname='数据库' and Grade>90
(7)查找每个学生的选修课程情况(只查看选课的学生情况);
select Student.sno,Sname,Sdept,Cno,Grade
from Student left outer join sc on(student.sno=sc.sno) where cno is not null
(8)查找所有学生的选课情况(若学生未选课也要包括在内);
select Student.sno,Sname,Sdept,Cno,Grade
from Student left outer join sc on(student.sno=sc.sno)
(9)查找被选修了的课程的选课情况和所有开设的课程名;
select Course.cno,cname,sno
from Course left outer join sc on(Course.cno=sc.cno)
四、实验中遇到的问题及解决(或未解决)的方案
用了大量课余时间实践基本语法,题目要求的语句虽不能直接打出,但经过尝试并观察执行结果,修改后可实现题目要求,基本知识虽以大概掌握但经验不足,还需积累.
对count,group by,等语句还有不理解的地方,还需心存问题,在以后的使用中观察,思考.
因篇幅问题不能全部显示,请点此查看更多更全内容