• 数据库实验报告(六)


    实验报告(六)

    1、实验目的

    (1)    掌握关联查询的用法

    (2)    掌握集合查询的区别和用法

    (3)    掌握EXISTS的用法

    2、实验预习与准备

    (1)    了解ANY,ALL的用法

    (2)    了解Max,Min,In与ANY,ALL的等价规则

    (3)    了解子查询的使用限制

    (4)    了解非关联子查询的特点

    (5)    了解关联子查询的特点

    3、实验内容及步骤

    (1)       查询入学成绩比本班平均入学成绩高的学生学号,姓名,班级和入学成绩(使用关联子查询)

    1. select s.sno,s.sname,s.clno,sc.score
    2. from student s,score sc
    3. where sc.score > (select avg(score) from score) and s.sno=sc.sno;

    (2)       查询没有选修“010002”号课程的学生姓名(使用Exists)

     

    1. SELECT DISTINCT s.sno, s.sname
    2. FROM student s
    3. WHERE NOT EXISTS (
    4. SELECT *
    5. FROM score sc
    6. WHERE sc.sno = s.sno AND sc.cno = '010002'
    7. );

    (3)  查询至少选修了姓名为“耿明”的学生所选修课程中一门课的学生的学号和姓名(使用Exists)

     

    1. SELECT DISTINCT s.sno, s.sname
    2. FROM student s
    3. WHERE EXISTS (
    4. SELECT *
    5. FROM score sc
    6. WHERE sc.sno = s.sno
    7. AND EXISTS (
    8. SELECT *
    9. FROM score sc2
    10. WHERE sc2.sno = '耿明'
    11. AND sc2.cno = sc.cno
    12. )
    13. );

    (4) 查询教授过张丹丹老师教授过的所有班级的教师姓名(使用Exists)

     

    1. SELECT DISTINCT t.tname
    2. FROM teacher t
    3. WHERE EXISTS (
    4. SELECT *
    5. FROM class cl
    6. WHERE EXISTS (
    7. SELECT *
    8. FROM course_class cc
    9. WHERE cc.tno = t.tno
    10. AND cc.clno = cl.clno
    11. )
    12. AND EXISTS (
    13. SELECT *
    14. FROM course_class cc2
    15. WHERE cc2.tno = '张丹丹'
    16. AND cc2.clno = cl.clno
    17. )
    18. );

    (5) 查询入学成绩最高的和最低的学生的学号、姓名和入学成绩(集合查询)

     

    select sno,sname,point from student where point=(select MAX(point) from student) or point=(select MIN(point) from student);

    (6)查询期末平均成绩在85分以上的学生学号、姓名和出生日期

     

    1. SELECT s.sno, s.sname, s.birth
    2. FROM student s
    3. JOIN score sc ON s.sno = sc.sno
    4. GROUP BY s.sno, s.sname, s.birth
    5. HAVING AVG(sc.score) > 85;

    (7)查询每门课程最高分的学生的学号

    1. SELECT cno, MAX(score) AS max_score
    2. FROM score
    3. GROUP BY cno;

    (8)查询既选修了“大学英语”又选修了“金融学”的学生学号(至少写出使用连接查询、嵌套查询两种方法。思考:如果还要查询学生姓名呢?

    1. SELECT s.sno
    2. FROM student s
    3. JOIN score sc1 ON s.sno = sc1.sno
    4. JOIN score sc2 ON s.sno = sc2.sno
    5. JOIN course c1 ON sc1.cno = c1.cno
    6. JOIN course c2 ON sc2.cno = c2.cno
    7. WHERE c1.cname = '大学英语' AND c2.cname = '金融学';

    (9)查询没有任何学生选修的课程编号和课程名称及学分(写出使用外连接, in+非关联子查询和exists+关联子查询三种方法)

    1. -- Using LEFT JOIN
    2. SELECT c.cno, c.cname, c.credit
    3. FROM course c
    4. LEFT JOIN score sc ON c.cno = sc.cno
    5. WHERE sc.sno IS NULL;
    6. -- Using IN with a subquery
    7. SELECT cno, cname, credit
    8. FROM course
    9. WHERE cno NOT IN (
    10. SELECT cno
    11. FROM score
    12. );
    13. -- Using EXISTS with a subquery
    14. SELECT c.cno, c.cname, c.credit
    15. FROM course c
    16. WHERE NOT EXISTS (
    17. SELECT *
    18. FROM score sc
    19. WHERE sc.cno = c.cno
    20. );

  • 相关阅读:
    使用git命令提交代码到gitee码云仓库
    shell基本编程与trap的命令,用户在线例子
    MAC 地址简化概念(有线 MAC 地址、无线 MAC 地址、MAC 地址的随机化)
    【单调栈】【概念讲解&&模板代码】
    英语考试的作文模板
    ABAP内表操作
    机器学习 | Python实现GA-XGBoost遗传算法优化极限梯度提升树特征分类模型调参
    C 运算符
    uniapp开发的微信小程序如何上传至微信小程序平台-完整简单步骤
    提pr,push 的时候网络超时配置方法
  • 原文地址:https://blog.csdn.net/Hubery_sky/article/details/134459114