实验四 SQL(三) SQL进行复杂查询实验报告

发布时间 : 星期日 文章实验四 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 'IS' ORDER BY sage DESC; 10.SELECT *

FROM student

WHERE sage 'IS' ORDER BY sage DESC;

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.嵌套语句使用时,应注意个父子嵌套语句中的条件,理清嵌套语句的执行过程;

在集函数的使用方面和个别较复杂的查询语句(实现查询差集合时实现多项输出)不够熟练,需要多加练习。

联系合同范文客服:xxxxx#qq.com(#替换为@)