实验五 数据库综合查询
一、实验目的
1. 掌握SELECT语句的基本语法和查询条件表示方法; 2. 掌握查询条件种类和表示方法; 3. 掌握连接查询的表示及使用; 4. 掌握嵌套查询的表示及使用; 5. 了解集合查询的表示及使用。
二、实验内容
1. 了解SELECT语句的基本语法格式和执行方法;
2. 以数据库原理实验5数据为基础,请使用T-SQL 语句实现进行相应操作; 3. 完成实验报告。
三、实验步骤
1. 查询以‘数据_’开头,且倒数第3个字符为‘结’的课程的详细情况 select*
from course
where Cname like '数据\\_%结_'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. 查询缺少成绩的所有学生的详细情况;
select*
from student
where not exists(select* from sc
where sno=student.sno and grade is not null) select* from student where sno in( select sno from sc
where grade is null)
5. 查询与‘张力’(假设姓名唯一)年龄不同的所有学生的信息; select b.*
from student a,student b
where a.sname='张力'and a.sage<>b.sage
6. 查询所选课程的平均成绩大于张力的平均成绩的学生学号、姓名及平均成
绩;
select student.sno,sname,平均成绩=avg(grade)
from student,sc
where sc.sno=student.sno group by student.sno,sname having avg(grade)>( select avg(grade) from sc where sno=( select sno from student where sname='张力'))
7. 按照?学号,姓名,所在院系,已修学分?的顺序列出学生学分的获得情况。
其中已修学分为考试已经及格的课程学分之和;
select student.sno 学号,sname 姓名,sdept 院系,已修学分=sum(credit)
from student,course,sc
where student.sno=sc.sno and o=o and grade>=60 group by student.sno,sname,sdept
8. 列出只选修一门课程的学生的学号、姓名、院系及成绩; select student.sno 学号,sname 姓名,sdept 院系,grade
from student,sc
where student.sno=sc.sno and sc.sno in( select sno from sc group by sno
having count(cno)=1)
9. 查找选修了至少一门和张力选修课程一样的学生的学号、姓名及课程号; select distinct student.*
from student where sno in( select sno from sc
where cno in( select cno from course
where cname='数据库'or cname='数据结构'))
10. 只选修?数据库?和?数据结构?两门课程的学生的基本信息; select o,ame,x.sno,x.sname,grade
from student x,sc y,course z where x.sno=y.sno and o=o
11. 至少选修?数据库?或?数据结构?课程的学生的基本信息;
select *
from student,sc,course where student.sno=sc.sno and o=o and cname='数据库'or
cname='数据结构'
12. 列出所有课程被选修的详细情况,包括课程号、课程名、学号、姓名及成绩; select o,ame,student.sno,student.sname,grade
from student,sc,course where student.sno=o
and o=o
13. 查询只被一名学生选修的课程的课程号、课程名; select cno,cname
from course where cno in (select cno
from sc group by cno
having count(sno)=1)
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系所有学生年龄小的学生; select sname,sage
from student where sageand sdept<>'cs')
select sname,sage from student where sageand sdept<>'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'