数据库第三次试验:数据库的嵌套查询
前言
为了帮助同学们完成痛苦的实验课程设计,本作者将其作出的实验结果及代码贴至CSDN中,供同学们学习参考。如有不足或描述不完善之处,敬请各位指出,欢迎各位的斧正!
一、实验目的
使学生进一步掌握 SQL Server 查询分析器的使用方法,加深对 SQL 语言的嵌套查询语句的理解。
二、实验要求
在SQL Server查询分析器中使用IN、比较符、ANY或ALL和EXISTS操作符进行嵌套查询操作。
三、实验原理、方法和手段
将查询要求用SQL语句表示;在SQL Server查询分析器的输入区中输入SQL查询语句;设置查询分析器的结果区Standard Execute(标准执行)或Execute to Grid(网格执行)方式;发布执行命令,并在结果区中查看结果;如果结果不正确,要进行修改,直到正确为止。
四、实验组织运行要求
本实验属于验证型实验,通过实验,加强对课堂讲授知识的理解。开始实验前,必须进行预习,写出实现所有查询要求的 SQL 语句。实验过程中,先集中由老师进行具体要求和注意事项的讲解,然后各自独立在机器上完成实验。实验过程中出现问题,在实验指导老师帮助下解决。
五、实验条件
(1)硬件条件:个人计算机。
(2)软件条件:Windows;MS SQL Server。
六、实验步骤
1、基本操作实验
用SQL语句表示,在学生选课库中实现其数据嵌套查询操作。
(1)求选修了高等数学的学生学号和姓名。
(2)求8号课程的成绩高于张三的学生学号和成绩。
(3)求其它系中年龄小于计算机系年龄最大者的学生。
(4)求其它系中比计算机系学生年龄都小的学生。
(5)求选修了2号课程的学生姓名。
(6)求没有选修2号课程的学生姓名。
(7)查询选修了全部课程的学生姓名。
(8)求至少选修了学号为“15122“的学生所选修的全部课程的学生学号和姓名。
2、提高操作实验
对自自己设计的数据库应用项目的数据查询操作分类,用SQL语句表示其中的简单、连接和嵌套查询,并通过SQL Server查询分析器实现其查询操作。
七、实验总结
附1:ST.dbo.SC:
附2:ST.dbo.Course:
附3:ST.dbo.Student:
1、基本操作实验
用SQL语句表示,在学生选课库中实现其数据嵌套查询操作。
(1)求选修了Math的学生学号和姓名。
select sno,sname from st.dbo.Student where sno in(select sno from st.dbo.SC where cno in(select cno from st.dbo.Course where Cname='Math'))
运行结果如下:
(2)求123号课程的成绩高于李勇的学生的学号和成绩。
select sno,grade from st.dbo.SC where cno='123' and grade>(select grade from st.dbo.SC where cno='123' and sno=(select sno from st.dbo.Student where sname='李勇'))
运行结果如下:
(3)求其它系中年龄小于计算机系年龄最大者的学生。
select * from st.dbo.Student where sage < (select max(sage) from st.dbo.Student where Sdep='CS')and sdep<>'CS'
运行结果如下:
(4)求其它系中比计算机系学生年龄都小的学生。
select * from st.dbo.Student where sage < (select min(sage) from st.dbo.Student where Sdep='CS')and sdep<>'CS'
运行结果如下:
(5)求选修了120号课程的学生姓名。
select sname from st.dbo.Student where exists (select * from st.dbo.SC where st.dbo.Student.sno=sno and cno='120')
运行结果如下:
(6)求没有选修120号课程的学生姓名。
select sname from st.dbo.Student where not exists (select * from st.dbo.SC where st.dbo.student.sno=sno and cno='120')
运行结果如下:
(7)查询选修了全部课程的学生姓名。
select sname from st.dbo.Student where not exists(select * from st.dbo.Course where not exists(select * from st.dbo.sc where st.dbo.Student.sno=sno and st.dbo.Course.Cno=cno))
运行结果如下:
(8)求至少选修了学号为“15122“的学生所选修的全部课程的学生学号和姓名。
select sno,sname from st.dbo.Student where not exists(select * from st.dbo.sc a where a.Sno=15121 and not exists(select * from st.dbo.SC b where st.dbo.Student.sno=b.Sno and b.Cno=a.Cno))
运行结果如下:
2、提高操作实验
对自己设计的数据库应用项目的数据查询操作分类,用SQL语句表示其中的简单、连接和嵌套查询,并通过SQL Server查询分析器实现其查询操作。
附1:librarydb.dbo.Book
附2:librarydb.dbo.Reader
附3:librarydb.dbo.BORROW
简单查询:
select * from Book where Bno=3
运行结果截图:
连接查询:
select * from Book inner join BORROW on book.Bno=BORROW.Bno where Borrow.Bno=3
运行结果截图:
嵌套查询:
select * from book where Bprice < (select min(bprice) from book where Bclass='C')
运行结果截图:
八、实验总结
本次实验在宏观上增加了对SQL语句操作的熟练度,同时学习了表达同一目的而使用不同方式的不同SQL语句语法,并对数据库操作有了更深一步的了解。