实验六:数据库综合查询
一、实验目的
1.掌握SELECT语句的基本语法和查询条件表示方法;
2.掌握查询条件种类和表示方法;
3.掌握连接查询的表示及使用;
4.掌握嵌套查询的表示及使用;
5.了解集合查询的表示及使用。
二、实验环境
已安装SQL Server 2005 企业版的计算机(13台);
具有局域网环境,有固定IP;
三、实验学时
2学时
四、实验要求
1.了解SELECT语句的基本语法格式和执行方法;
2.了解连接查询的表示及使用;
3.了解嵌套查询的表示及使用;
4.了解集合查询的表示及使用;
5.完成实验报告;
五、实验内容及步骤
以数据库原理实验5数据为基础,请使用T-SQL 语句实现进行以下操作:
1.查询以‘DB_’开头,且倒数第3个字符为‘s’的课程的详细情况;
select*from course10where Cname like'DB\_%s_'escape'\'
2.查询名字中第2个字为‘茹’的学生姓名和学号及选修的课程号、课程名;select Sname,Sno,Cno,Cname
from student10,course10
where Sname like'_茹%'
3.列出选修了‘数学’或者‘大学英语’的学生学号、姓名、所在院系、选修课程号及成绩;
select student10.Sno,Sname,Sdept,Cno,Grade from student10,sc10
where student10.Sno=sc10.Sno and Cno in(select Cno from course10where Cname='数学'or Cname='大学英语')
4.查询缺少成绩的所有学生的详细情况;
SELECT[Sno]
,[Sname]
,[Ssex]
,[Sage]
,[Sdept]
FROM student10
where not exists
(select*from sc10
where Sno=student10.Sno
2.and Grade is not null)查询与‘张茹英’(假设姓名唯一)年龄不同的所有学生的
信息;
SELECT b.*
FROM student10a,
Student10b where a.Sname='李凯丽'
and a.Sage<>b.Sage
3.查询所选课程的平均成绩大于张茹英的平均成绩的学生学号、姓名及平均成绩;
SELECT student10.Sno,Sname,平均成绩=avg(Grade)
FROM student10,sc10
where sc10.Sno=student10.Sno
group by student10.Sno,Sname having avg(Grade)>
(select avg(Grade)from sc10where Sno=(select Sno from student10where Sname='李凯丽')) 4.按照‚学号,姓名,所在院系,已修学分‛的顺序列出学生学分的获得情况。其中已修学分为考试已经及格的课程学分之和;
SELECT student10.Sno学号,Sname姓名,Sdept系部,已修学分=(Ccredit)
FROM sc10,student10,course10
where student10.Sno=sc10.Sno
and course10.Cno=sc10.Cno
and Grade>=60 group by student10.Sno,Sname,Sdept,Ccredit;
5.列出只选修一门课程的学生的学号、姓名、院系及成绩;
SELECT student10.Sno学号,Sname姓名,Sdept系部,Grade
FROM sc10,student10
where student10.Sno=sc10.Sno
and sc10.Sno in(select Sno from sc10group by Sno having count(Cno)=1)
3.查选修了至少一门和张茹英选修课程一样的学生的学号、姓名及课程号;
4.只选修‚数据库‛和‚数据结构‛两门课程的学生的基本信息;
5.至少选修‚数据库‛或‚数据结构‛课程的学生的基本信息;
SELECT distinct student10 .*
FROM [sqll].[dbo].[student10 ]
(select Sno from sc10 where Cno in(select Cno from course10
where Cname='数据库'or Cname='数据结构'))
6.列出所有课程被选修的详细情况,包括课程号、课程名、学号、姓名及成绩;
7.查询只被一名学生选修的课程的课程号、课程名;
SELECT [Cno]
,[Cname]
FROM [sqll].[dbo].[course10]
where Cno in(select Cno from sc10
group by Cno having count(Sno)=1)
8.检索所学课程包含学生‘张向东’所学课程的学生学号、姓名;
select distinct fromSELECT [Sno]
,[Sname]
FROM [sqll].[dbo].[student10 ]
where Sno in(select Sno from sc10 where Cno in
(select Cno from sc10 where Sno=(select Sno from student10 where Sname='李凯丽')))
9.使用嵌套查询列出选修了‚数据结构‛课程的学生学号和姓名;
SELECT [Sno]
,[Sname]
FROM [sqll].[dbo].[student10 ]
where Sno in(select Sno from sc10 where Cno in
(select Cno from course10 where Cname='数据结构'))
10.使用嵌套查询查询其它系中年龄小于CS系的某个学生的学生姓名、年龄和
院系;
SELECT姓名=Sname,年龄=Sage,院系=Sdept
FROM [sqll].[dbo].[student10 ]
where Sage<
(select max(Sage)
FROM [sqll].[dbo].[student10 ]
where Sdept='cs')and Sdept<>'cs'
11.使用ANY、ALL 查询,列出其他院系中比CS系所有学生年龄小的学生;
SELECT Sname Sage
FROM [sqll].[dbo].[student10 ]
where Sage<any
(select min(Sage)
FROM [sqll].[dbo].[student10 ]
where Sdept='cs')and Sdept<>'cs';
select姓名=Sname,年龄=Sage
FROM [sqll].[dbo].[student10 ]
(select Sage
FROM student10
where Sdept='cs')and Sdept<>'cs';
12.分别使用连接查询和嵌套查询,列出与‘张力’在一个院系的学生的信息;
连接查询
SELECT first.*
FROM student10 first,student10 second
where first.Sdept=second.Sdept and second.Sname='李凯丽'
嵌套查询
SELECT*
FROM student10
where Sdept=(select Sdept from student10 where Sname='李凯丽')
13.使用集合查询列出CS系的学生以及性别为女的学生名单;
SELECT Sname
FROM student10
where Sdept='cs'
union
select Sname
FROM student10
where Ssex='女'
14.使用集合查询列出CS系的学生与年龄不大于19岁的学生的交集、差集;
SELECT*
FROM student10
where Sdept='cs'
intersect
select*
FROM student10
where Sage<=1990
SELECT*
FROM student10
where Sdept='cs'
except
select*
FROM student10
where Sage<=1990
15.**使用集合查询列出选修课程1的学生集合与选修课程2的学生集合的交
集;
SELECT [Sno]
FROM [sqll].[dbo].[sc10]
where Cno='1'
intersect
SELECT [Sno]
FROM [sqll].[dbo].[sc10]
where Cno='2';
16.思考题:按照课程名顺序显示各个学生选修的课程(如数据库数据结构数
学);
六、出现问题及解决办法
如:某些查询操作无法执行,如何解决?
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论