发布时间 : 星期日 文章实验四 SQL(三) SQL进行复杂查询实验报告更新完毕开始阅读
实验四 SQL(三) SQL进行复杂查询实验报告
实验目的:
1. 熟练掌握各种连接查询及其连接条件。 2. 掌握各种嵌套查询的使用。 3. 掌握复杂的集合查询。
实验内容:
1.实验一中的数据为基础
2.对各表中的数据进行不同条件的连接查询和嵌套查询; 1) 查询每个学生及其选课情况; 2) 3) 4) 5) 6) 7) 8) 9) 10) 11) 12)
查询每门课的间接先修课 将STUDENT,SC进行右连接
查询有不及格的学生姓名和所在系
查询所有成绩为优秀(大于90分)的学生姓名
查询既选修了2号课程又选修了3号课程的学生姓名、学号; 查询和刘晨同一年龄的学生
选修了课程名为“数据库”的学生姓名和年龄 查询其他系比IS系任一学生年龄小的学生名单
查询其他系中比IS系所有学生年龄都小的学生名单 查询选修了全部课程的学生姓名
查询计算机系学生及其性别是男的学生
13) 查询选修课程1的学生集合和选修2号课程学生集合的差集 14) 查询李丽同学不学的课程的课程号
15) 查询选修了3号课程的学生平均年龄 16) 求每门课程学生的平均成绩 17) 统计每门课程的学生选修人数(超过3人的才统计)。要求输出课程号和选修人数,结果按人数降序排列,若人数相同,按课程号升序排列 18) 查询学号比刘晨大,而年龄比他小的学生姓名。 19) 求年龄大于女同学平均年龄的男同学姓名和年龄 20) 求年龄大于所有女同学年龄的男同学姓名和年龄 21) 查询至少选修了95002选修的全部课程的学生号码 22) 查询95001和95002两个学生都选修的课程的信息
实验步骤与过程:
1.创建学生表student、课程表course和选课表SC,可以用使用实验一中已经建立的表和数据。 2.并输入数据,设置主键。 3.建立索引及三表之间关系。
4.按照SQL语句格式及题目要求输入语句进行不同条件的连接查询(SELECTFROM和WHERE等查询的语句)和嵌套查询:
1、查询每个学生及其选课情况;2、查询每门课的间接先修课;3、将STUDENT,SC进行右连接;4、查询有不及格的学生姓名和所在系;5、查询所有成绩为优秀(大于90分)的学生姓名;6、查询既选修了2号课程又选修了3号课程的学生姓名、学号;7、查询和刘晨同一年龄的学生;8、选修了课程名为“数据库”的学生姓名和年龄;9、查询其他系比IS系任一学生年龄小的学生名单;10、查询其他系中比IS系所有学生年龄都小的学生名单;11、查询选修了全部课程的学生姓名;
12、查询计算机系学生及其性别是男的学生;13、查询选修课程1的学生集合和选修2号课程学生集合的差集;14、查询李丽同学不学的课程的课程号;15、查询选修了3号课程的学生平均年龄;16、求每门课程学生的平均成绩;17、统计每门课程的学生选修人数(超过3人的才统计)。要求输出课程号和选修人数,结果按人数降序排列,若人数相同,按课程号升序排列;18、查询学号比刘晨大,而年龄比他小的学生姓名;19、求年龄大于女同学平均年龄的男同学姓名和年龄;20、求年龄大于所有女同学年龄的男同学姓名和年龄;21、查询至少选修了95002选修的全部课程的学生号码;22、查询95001和95002两个学生都选修的课程的信息;
5、进行数据的修改与更新,查询输入SQL语句的正确性,并进行修改. 6.熟练使用逻辑运算符的使用可以利用逻辑运算符(AND OR NOT)在WHERE之举中建立符合条件
7.符合条件是指含有两个或者两个以上条件的表达式的条件。AND表示连接的条件都为真时整个条件才为真,OR表示连接的条件只要有个为真就能为真而not为相反。
实验结果:
利用实验中所建立的表设置主键,建立索引及三表之间关系。编写SQL查询语句。实现了题目了所给的22种复杂的查询。实现的查询内容为:
1、查询每个学生及其选课情况;2、查询每门课的间接先修课;3、将STUDENT,SC进行右连接;4、查询有不及格的学生姓名和所在系;5、查询所有成绩为优秀(大于90分)的学生姓名;6、查询既选修了2号课程又选修了3号课程的学生姓名、学号;7、查询和刘晨同一年龄的学生;8、选修了课程名为“数据库”的学生姓名和年龄;9、查询其他系比IS系任一学生年龄小的学生名单;10、查询其他系中比IS系所有学生年龄都小的学生名单;11、查询选修了全部课程的学生姓名;
12、查询计算机系学生及其性别是男的学生;13、查询选修课程1的学生集合和选修2号课程学生集合的差集;14、查询李丽同学不学的课程的课程号;15、查询选修了3号课程的学生平均年龄;16、求每门课程学生的平均成绩;17、统计每门课程的学生选修人数(超过3人的才统计)。要求输出课程号和选修人数,结果按人数降序排列,若人数相同,按课程号升序排列;18、查询学号比刘晨大,而年龄比他小的学生姓名;19、求年龄大于女同学平均年龄的男同学姓名和年龄;20、求年龄大于所有女同学年龄的男同学姓名和年龄;21、查询至少选修了95002选修的全部课程的学生号码;22、查询95001和95002两个学生都选修的课程的信息;
掌握各种连接查询。根据连接,选择连接条件。掌握各种套查询的使用。理清集合查询的过程。运用SQL的select、from、where、group by、having、order by等语句进行相关数据地操作;
完成了试验地连接查询及连接条件,达到了要求地嵌套操作;能够查询集合地交差操作;
主要SQL语句:
1.SELECT student.*, sc.* FROM student, sc
WHERE student.sno=sc.sno; 2.SELECT first.cno, second.cpno FROM course AS [first], course AS [second] WHERE first.cpno=second.cno; 3.SELECT student.*, sc.*
FROM student RIGHT JOIN sc ON student.sno=sc.sno; 4.SELECT sname, sdept FROM student
WHERE sno in(select sno from sc where grade < 60 or grade is null); 5.SELECT sname
FROM student, sc
WHERE student.sno=sc.sno and student.sno not in(select sno from sc where grade is null) GROUP BY sname HAVING MIN(grade)>90; 6.SELECT a.sno
FROM sc AS a, sc AS b
WHERE a.cno='002' And b.cno='003' And a.sno=b.sno; 7.SELECT s2.*
FROM student AS s1, student AS s2
WHERE s1.sname='刘晨' And s1.sage=s2.sage; 8.SELECT * FROM student WHERE sno in ( select sno from sc
where cno in(
select cno from course where cname='数据库' ) );
9.SELECT *
FROM student
WHERE sage
FROM student
WHERE sage
11.SELECT sname FROM student
WHERE sno in(select sno from sc
group by sno
having count(*)=(select count(*) from course)); 12.SELECT student.* FROM student
WHERE sdept='IS' And ssex='男'; 13.SELECT sno FROM sc
WHERE cno='001'and sno not in(select sno from sc where cno='002'); 15.SELECT avg(sage)
FROM student, sc
WHERE cno='003' And student.sno=sc.sno; 16.SELECT avg(grade), cno FROM sc
GROUP BY cno;
17.SELECT cno, count(sno) FROM sc
GROUP BY cno
HAVING count(sno)>3
ORDER BY count(sno) DESC , cno; 18.SELECT sname
FROM student
WHERE sno>(select sno from student where sname='刘晨' ) and sage>(select sage from student where sname='刘晨'); 19.SELECT sname, sage FROM student
WHERE ssex='男' and sage>(select avg(sage) from student where ssex='女'); 20.SELECT sname, sage
FROM student
WHERE sage>all(select sage from student where ssex='女')and ssex='男';
疑难与小结: 通过本次试验掌握了:
1.如何设置主键,并建立索引及表之间关系; 2.SELECTFROM和WHERE等查询的语句;
3.进行不同条件的连接查询和嵌套查询,实现复杂查询; 4.熟练了掌握各种查询条件的表示;
5.基本掌握了集函数的使用;
6.Group by 语句一般用于每个,每门的情况;
7使用聚合函数时,一定要在group by语句后的having 语句中;
8.嵌套语句使用时,应注意个父子嵌套语句中的条件,理清嵌套语句的执行过程;
在集函数的使用方面和个别较复杂的查询语句(实现查询差集合时实现多项输出)不够熟练,需要多加练习。