年整理数据库嵌套查询实验报告
时间:2021-10-12 来源:博通范文网 本文已影响 人
实验三:数据库的嵌套查询实验
实验目的 :
加深对嵌套查询语句的理解。
实验内容:
使用 IN、比较符、ANY 或 ALL 和 EXISTS 操作符进行嵌套查询操作。
实验步骤:
一 .使用带 N IN 谓词的子查询
1.查询与’刘晨’在同一个系学习的学生的信息: 比较 select * from student where sdept in
(select sdept from student where sname="刘晨") 与: select * from student where sdept =
(select sdept from student where sname="刘晨") 的异同
比较: select * from student where sdept =
(select sdept from student where sname="刘晨") and sname <> ‘刘晨’ 与: select S1.* from student S1, student S2 where S1.sdept=S2.sdept and S2.sname="刘晨"的异同
2.查询选修了课程名为’信息系统’ 的学生的学号和姓名: 比较 select sno, sname from student where sno in (select sno from sc where cno in
(select cno from course where cname="信息系统")) 与: select sno, sname from student where sno in
(select sno from sc, course where sc.cno=course.cno and cname="信息系统")
3.查询选修了课程’1’和课程’2’的学生的学号: select sno from student where sno in (select sno from sc where cno="1") and sno in (select sno from sc where cno="2")
比较: 查询选修了课程’1’或课程’2’的学生的 sno: select sno from sc where cno="1" or cno="2"
比较连接查询:
select A.sno from sc A, sc B where A.sno=B.sno and A.cno="1" and B.cno="2"
二 .使用带比较运算的子查询 4.查询比’刘晨’年龄小的所有学生的信息: select * from student where sage<
(select sage from student where sname="刘晨")
三.使用带 Any, All 谓词的子查询 5.查询其他系中比信息系(IS)某一学生年龄小的学生姓名和年龄; select sname, sage from student where sage
(select sage from student where sdept="IS") and sdept<>"IS"
6.查询其他系中比信息系(IS)学生年龄都小的学生姓名和年龄: select sname, sage from student where sage "IS"
7.查询与计算机系(CS)系所有学生的年龄均不同的学生学号, 姓名和年龄: select sno,sname,sage from student where sage<>all (select sage from student where sdept="CS")
四 .使用带 s Exists 谓词的子查询和相关子查询
8.查询与其他所有学生年龄均不同的学生学号, 姓名和年龄: select sno,sname,sage from student A where not exists (select * from student B where A.sage=B.sage and A.sno<>B.sno)
9.查询所有选修了 1 号课程的学生姓名: select sname from student where exists (select * from sc where sno=student.sno and cno="1")
10.查询没有选修了 1 号课程的学生姓名: select sname from student where not exists (select * from sc where sno=student.sno and cno="1")
11.查询选修了全部课程的学生姓名: SQL Server 中:
select sname from student where not exists (select * from course where not exists ( select * from sc where sno=student.sno and cno=course.cno))
11.查询至少选修了学生 95002 选修的全部课程的学生的学号: SQL Server 中: select distinct sno from sc A where not exists
(select * from sc B where sno="95002"and not exists (select * from sc C where sno=A.sno and cno=B.cno))
12.求没有人选修的课程号 cno 和 cnamecname: select cno,cname from course C where not exists (select * from sc where sc.cno=C.cno )
13*.查询满足条件的(sno,cno)对, 其中该学号的学生没有选修该课程号 cno的课程 SQL Server 中: select sno,cno from student,course where not exists (select * from sc where cno=course.cno and sno=student.sno)
14*.查询每个学生的课程成绩最高的成绩信息(sno,cno,grade): select * from sc A where grade= (select max(grade) from sc where sno=A.sno )
思考: 如何查询所有学生都选修了的课程的课程号 cno? select cno
from sc
group by cno
having count(*)=(select count(*) from student)
中心突出,论据充足。
很成熟的语言。
实验五
数据库的嵌套查询实验
1、实验目的
本实验的目的是使学生进一步掌握SQL Server查询分析器的使用方法,加深SQL语言的嵌套查询语句的理解
2、实验时数
2学时
3、实验内容
本实验的主要内容是:在SQL Server查询分析器中使用IN、比较符、ANY或ALL和EXISTS操作符进行嵌套查询操作。
具体完成以下例题。将它们用SQL语句表示,在学生数据库中实现其数据嵌套查询操作。
1、查询选修了高等数学的学生学号和姓名 select Sno,Sname from Student where Sno in (select Sno from SC,Course where SC.Cno=Course.Cno and Cname=\\"数学\\")
2、查询1号课程的成绩高于刘晨的1号课程成绩的学生学号和成绩 select SC.Sno,Grade from SC,Student where Cno=\\"1\\" and SC.Sno=Student.Sno and Grade>all(select Grade from SC,Student where SC.Sno=Student.Sno and Sname=\\"刘晨\\")
3、查询其他系中比cs系某一学生年龄小的学生(即年龄小于计算机系年龄最大者的学生) select * from Student where Sdept!=\\"cs\\" and Sage
4、查询其他系中比cs系所有学生年龄都小的学生 select * from Student where Sdept!=\\"cs\\" and Sage
5、查询选修了2号课程的学生姓名 select Sname from Student where Sno in (select Student.Sno from SC,Student where SC.Sno=Student.Sno and Cno=\\"2\\")
6、查询没有选修2号课程的学生姓名 elect Sname from Student where exists (select SC.Sno from SC,Student where Cno!=\\"2\\" group by SC.Sno)
7、查询选修了全部课程的学生姓名 Select * from SC where Cno=all(select Cno from Course)
8、求至少选修了学号为“00215122”的学生所选修全部课程的学生学号和姓名 select Sno,Sname from Student where Sno in (select Student.Sno from Student,SC where Student.Sno=SC.Sno and Cno=any(select Cno from SC where Sno=\\"00215122\\"))
4、实验方法
将查询需求用SQL语言表示:在SQL Server查询分析器的输入区中输入SQL查询语句:设置查询分析器的结果区为Standard Execute(标准执行)或Execute to Grid(网格执行)方式;发布执行命令,并在结果区中查看查询结果;如果结果不正确,要进行修改,直到正确为止。
5、实验心得体会
本次实验还是进行查询操作,只是在第四次试验的基础上加入了嵌套,嵌套查询是在我们以后进行软件开发涉及数据库常用的查询操作,通过实验有助于我们对嵌套查询的理解,对我们熟练的使用SQL查询语句进行查询操作有很大帮助。