数据库实验5答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五:数据库综合查询
一、实验目的
1.掌握SELECT语句的基本语法和查询条件表示方法;
2.掌握查询条件种类和表示方法;
3.掌握连接查询的表示及使用;
4.掌握嵌套查询的表示及使用;
5.了解集合查询的表示及使用。
二、实验环境
已安装SQL Server企业版的计算机(120台);
具有局域网环境,有固定IP;
三、实验学时
2学时
四、实验要求
1.了解SELECT语句的基本语法格式和执行方法;
2.了解连接查询的表示及使用;
3.了解嵌套查询的表示及使用;
4.了解集合查询的表示及使用;
5.完成实验报告;
五、实验内容及步骤
1.利用Transact-SQL嵌套语句实现下列数据查询操作。
1) 查询选修了计算机体系结构的学生的基本信息。
select*from student
where Sno in(select Sno from course
where Cno in(select Cno from sc where Cname='计算机体系结构'))
2) 查询年龄比李勇小的学生的学号和成绩。
select a.sno,grade from student a,course
where a.sno=course.sno and sage<(select sage from student where sname='李勇')
3) 查询其他系中比系编号为‘D1’的学生中年龄最小者要大的学生的信息。
select*from student where dnum<>'D1'AND SAGE>(select min(sage)from student where dnum='D1')
4) 查询其他系中比系编号为‘D3’的学生年龄都大的学生的姓名。
select*from student where dnum<>'D3'AND SAGE>all(select
sage from student where dnum='D3')
5) 查询‘C1’课程的成绩高于70的学生姓名。
select sname from student where sno in(select sno from course where cno='C1'and grade>70)
6) 查询‘C1’课程的成绩不高于70的学生姓名。
select sname from student where sno in(select sno from course where cno='C1'and grade<=70)
7) 查询没有选修的学生姓名。
select sname from student where sno not in
(select sno from course where course.sno=student.sno)
8)查询学校开设的课程总数。
select count(cno)from sc
9)查询选修两门及两门以上课程的学生姓名。
select sname from student a,course where a.sno=course.sno group by a.sno,sname having count(cno)>=2
10)查询开设的课程和选修该课程的学生的总成绩、平均成绩、最高成绩和最低成绩。
select cno,sum(grade),avg(grade),max(grade),min(grade) from course group by cno
(二)、以数据库原理实验4数据为基础,请使用T-SQL 语句实现进行以下操作(选做题):
1.查询以‘DB_’开头,且倒数第3个字符为‘s’的课程的详细情况;
select*from course
where Cnume like'DB\_%s__'escape'\'
2.查询名字中第2个字为‘阳’的学生姓名和学号及选修的课程号、课程名;select Sname,student.Sno,o,ame FROM Student,course,sc
WHERE student.Sno=sc.sno and o=o and Sname LIKE '__阳%'
3.列出选修了‘数学’或者‘大学英语’的学生学号、姓名、所在院系、选修
课程号及成绩;
SELECT student.Sno,Sname,Sdept,Cno,grade
FROM student,sc
WHERE student.sno=sc.sno and cno IN
(SELECT cno FROM course
WHERE cname='数学'OR cname='大学英语')
4.查询缺少成绩的所有学生的详细情况;
5.查询与‘张力’(假设姓名唯一)年龄不同的所有学生的信息;
select b.*from student a,student b where a.sname='张力'and
a.sage<>
b.sage
6.查询所选课程的平均成绩大于张力的平均成绩的学生学号、姓名及平均成
绩;
7.按照“学号,姓名,所在院系,已修学分”的顺序列出学生学分的获得情况。
其中已修学分为考试已经及格的课程学分之和;
8.列出只选修一门课程的学生的学号、姓名、院系及成绩;
9.查询选修“数据库”或“数据结构”课程的学生的基本信息;
10.列出所有课程被选修的详细情况,包括课程号、课程名、学号、姓名及成绩;
11.查询只被一名学生选修的课程的课程号、课程名;
12.检索所学课程包含学生‘张向东’所学课程的学生学号、姓名;★
13.检索所学课程包含学生‘张向东’所学全部课程的学生学号、姓名;★
14.使用嵌套查询列出选修了“数据结构”课程的学生学号和姓名;
select sno,sname from student where sno in(select sno from sc where cno in(select cno from course where cname='数据结构'))
15.使用嵌套查询查询其它系中年龄小于CS系的某个学生的学生姓名、年龄和
院系;
SELECT姓名=Sname,年龄=Sage,院系=Sdept
FROM Student
WHERE Sage<
(SELECT max(Sage)
FROM Student
WHERE Sdept='CS')AND Sdept<>'CS'
16.使用ANY、ALL 查询,列出其他院系中比CS系所有学生年龄小的学生;
17.分别使用连接查询和嵌套查询,列出与‘张力’在一个院系的学生的信息;SELECT*
FROM Student
WHERE Sdept=
(SELECT Sdept
FROM student
WHERE Sname='张力')
18.使用集合查询列出CS系的学生以及性别为女的学生名单;
select sname
from student
where Sdept='CS'
union
select sname
from student
where Ssex='女'
19.使用集合查询列出CS系的学生与年龄不大于19岁的学生的交集、差集;SELECT*
FROM Student
WHERE Sdept='CS'
intersect
select*
from student
where Sage<=19
20.使用集合查询列出选修课程1的学生集合与选修课程2的学生集合的交集;SELECT Sno
FROM SC
WHERE Cno='1'
intersect
SELECT Sno
FROM SC
WHERE Cno='2'。