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

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

实验目的:

1. 熟练掌握各种连接查询及其连接条件。

2. 掌握各种嵌套查询的使用。

3. 掌握复杂的集合查询。

实验内容:

1.实验一中的数据为基础

2.对各表中的数据进行不同条件的连接查询和嵌套查询;

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两个学生都选修的课程的信息

实验步骤与过程:

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 https://www.360docs.net/doc/692244379.html,o, second.cpno

FROM course AS [first], course AS [second]

WHERE first.cpno=https://www.360docs.net/doc/692244379.html,o;

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

HA VING MIN(grade)>90;

6.SELECT a.sno

FROM sc AS a, sc AS b

WHERE https://www.360docs.net/doc/692244379.html,o='002' And https://www.360docs.net/doc/692244379.html,o='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

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

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

相关文档
最新文档