本文最后更新于:1 个月前

实验八:数据库多表查询综合

实验目的

  1. 掌握SELECT语句的基本语法和查询条件表示方法;
  2. 掌握查询条件种类和表示方法;
  3. 掌握连接查询的表示及使用;
  4. 掌握嵌套查询的表示及使用;
  5. 了解集合查询的表示及使用。

实验环境

已安装SQL Server2008开版的计算机;
具有局域网环境,有固定IP;

实验学时

4学时

实验要求

  1. 了解SELECT语句的基本语法格式和执行方法;
  2. 了解连接查询的表示及使用;
  3. 了解嵌套查询的表示及使用;
  4. 了解集合查询的表示及使用;
  5. 完成实验报告;

实验内容及步骤

  • 以数据库原理实验五——学生选课库中,用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 ,sc
    where a.sno=sc.sno and sage<(select sage from student where sname='李勇')
  3. 查询其他系中比系编号为‘D1’的学生中年龄最小者要大的学生的信息。
    select * from student
    where sdept='D1' AND sage>(select min(sage) from student where sdept='D1' )
  4. 查询其他系中比系编号为‘D3’的学生年龄都大的学生的姓名。
    select * from student
    where sdept ='D3' AND sage> all(select sage from student where sdept='D3' )
  5. 查询‘C1’课程的成绩高于70的学生姓名。
    select sname from student
    where sno in(select sno from sc where cno='C1' and grade>70)
  6. 查询‘C1’课程的成绩不高于70的学生姓名。
    select sname from student
    where sno in(select sno from sc where cno='C1' and grade<=70)
  7. 查询没有选修的学生姓名。
    select sname from student where sno not in  
    (select sno from sc where sc.sno=student.sno)
  8. 查询学校开设的课程总数。
    select count(cno) from Course
  9. 查询选修两门及两门以上课程的学生姓名。
    select sname from student a,sc
    where a.sno=sc.sno 
    group by a.sno,sname having count(cno)>=2
  10. 查询开设的课程和选修该课程的学生的总成绩、平均成绩、最高成绩和最低成绩。
    select cno,sum(grade) as 总成绩,avg(grade) as 平均成绩 ,max(grade) as 最高成绩,min(grade) as 最低成绩 from sc 
    group by cno
  11. 查询以‘DB’开头,且倒数第3个字符为‘s’的课程的详细情况;
    select * from course 
    where Cname like 'DB_%s__'
  12. 查询名字中第2个字为‘阳’的学生姓名和学号及选修的课程号、课程名;
    select Sname ,student.Sno ,course.Cno ,course.Cname from Student,course,sc  
    where student.Sno=sc.sno and sc.cno=course.cno and Sname like '_阳%'
  13. 列出选修了‘数学’或者‘大学英语’的学生学号、姓名、所在院系、选修课程号及成绩;
    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='大学英语')
  14. 查询缺少成绩的所有学生的详细情况;
    select student.sno,student.sname,student.sage,student.ssex,student.sdept from sc
    right join  student on student.sno = sc.sno
    where grade is null
  15. 查询与‘张力’(假设姓名唯一)年龄不同的所有学生的信息;
    select b.* from student a,student b 
    where a.sname='张力' and a.sage!=b.sage
  16. 查询所选课程的平均成绩大于张力的平均成绩的学生学号、姓名及平均成绩;
    select a.sno,a.sname,avg(b.grade)as 平均成绩 from student a,sc b
    where a.sno=b.sno
    group by a.sno,a.sname
    having avg(b.grade)>(
    select avg(b.grade) from student a,sc b
    where a.sno=b.sno and a.sname='张力')
  17. 列出只选修一门课程的学生的学号、姓名、院系及成绩;
    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)
  18. 查询选修“数据库”或“数据结构”课程的学生的基本信息;
    select c.cno,c.cname,a.sno,a.sname,grade from student a,sc b,course c
    where a.sno=b.sno and b.cno=c.cno and c.cname in( '数据库系统','数据结构')
  19. 列出所有被选修课程的详细情况,包括课程号、课程名、学号、姓名及成绩;
    select course.cno,course.cname,student.sno,student.sname,grade from student,sc,course
    where student.sno=sc.sno and sc.cno=course.cno
  20. 查询只被一名学生选修的课程的课程号、课程名;
    select course.* from student,sc,course  
    where student.sno=sc.sno and sc.cno=course.cno and sc.cno in( select cno from sc  
    group by cno  
    having count(cno)=1)
  21. 使用嵌套查询列出选修了“数据结构”课程的学生学号和姓名;
    select sno,sname from student 
    where sno in (select sno from sc 
    where cno in (select cno from course 
    where cname='数据结构'))
  22. 列出与‘张力’在一个院系的学生的信息;
    select * from Student 
    where Sdept= (select Sdept from student 
    where Sname='张力')
  23. 使用集合查询列出CS系的学生以及性别为女的学生名单;
    select sname from student 
    where Sdept='CS'
    union 
    select sname from student
    where Ssex='女'

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

SQL 实验九—视图 上一篇
Python中二叉树的遍历 下一篇