实验四 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
ORDER BY sage DESC;
10.SELECT *
FROM student
WHERE sage
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.嵌套语句使用时,应注意个父子嵌套语句中的条件,理清嵌套语句的执行过程;
在集函数的使用方面和个别较复杂的查询语句(实现查询差集合时实现多项输出)不够熟练,需要多加练习。