实验五 数据库综合查询(学生)

  • 格式:doc
  • 大小:71.50 KB
  • 文档页数:5

精品文档

. 实验五 数据库综合查询

一、实验目的

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 sage

(select min(sage)

from student

where sdept='cs'

and sdept<>'cs')

select sname,sage

from student

where sage

(select sage

from student

where sdept='cs'

and 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'