• 数据库---实验二 数据查询


    (一)多表连接查询
    i.    查询每个选课学生的学生姓名、课程号和分数。(2表连接)
    SQL> select student.sname,sc.cno,sc.grade from student,sc where student.sno=sc.sno;
    ii.    求学生的学号、姓名、选修课程的课程名及成绩。(3表连接)
    SQL> select student.sno,student.sname,course.cname,sc.grade from student,course,sc where student.sno=sc.sno and sc.cno=course.cno;
    iii.    求选修课程号为1或课程号为2的学生姓名和学号。
    SQL> select distinct student.sname,student.sno from student,sc where student.sno=sc.sno and (sc.cno=1 or sc.cno=2);
    iv.    查询每一门课程的间接先行课的课程号。
    SQL> select first.cno,second.cpno from course first,course second where first.cpno=second.cno;
    v.    查询与’刘晨’在同一个系学习的学生。
    SQL> select * from student where sdept=(select sdept from student where sname='李佳');
    vi.    查询选修了课程名为’C语言’的学生学号和姓名。
    SQL> select student.sno,student.sname from student,sc,course where student.sno=sc.sno and sc.cno=course.cno and course.cname='PASCAL语言';
    vii.    查询平均成绩在80分以上的学生学号和平均成绩。
    SQL> select sno,avg(grade) avg_grade from sc group by sno having avg(grade)>=80;
    viii.    查询选修了1门且平均分在85分以下课程的学生的学号。
    SQL> select distinct sc.sno from student,sc where student.sno=sc.sno and cno in (select cno from sc group by cno having avg(grade)<85);
    ix.    以学生为主体显示学生的信息及其选课的信息。
            SQL> select * from student,sc where student.sno=sc.sno(+);
    x.    对学生表和选课表做自然连接,并输出结果。
    SQL> select student.sno,student.sname,student.ssex,student.sage,student.sdept,sc.cno,sc.grade from student,sc where student.sno=sc.sno;
    xi.    输出学号大于’ 刘晨’的学生的姓名和学号。
    SQL> select sname,sno from student where sno>(select sno from student where sname='刘明');
    xii.    查询数学系的学生每个人所选课程的平均成绩。
    SQL> select sc.sno,avg(sc.grade) from (select sno from student where sdept='MA')S,sc where S.sno=sc.sno group by sc.sno;
    xiii.    查询选修2号课程且成绩高于“20070001”号学生成绩(2号课程的成绩)的所有学生记录。
          SQL> select student.* from student,sc where student.sno=sc.sno and sc.cno=2 and sc.grade>(select grade from sc where cno=2 and sno='20070001');
    
    (二)选做(使用from子句,通过inner join,left join,right join,cross join完成多表连接查询)
    1.    以学生为主体显示学生的信息及其选课的信息。
    SQL> select * from student left join sc on student.sno=sc.sno;
    2.    查询选修了2号课程的学生姓名。
    SQL> select student.sname from student inner join sc on student.sno=sc.sno and sc.cno=2;
    3.    学生表和课程表做笛卡尔积。
           SQL> select * from student cross join course;
    
    (三)思考题:
    1.Where子句中能否用聚集函数作为条件表达式。
    答:不能。
    2.多表连接查询中如果显示的某一属性不止一个表中出现,应如何处理。
            答:应该用表名加上点,再加上属性名表示。

    实验分析与讨论:

          在本次数据库试验中,我完成了实验要求。本次实验内容是关于多表的连接查询及投影、选择条件。在课堂上,老师讲授了多表连接查询的相关知识,我也用笔练习写了sql语句,但是感觉印象还不是很深刻,有些不太理解。在实验课中我练习了sql语句,对课堂上所学的知识有了更深的理解,收获很多。实验中,我遇到了一些问题,通过查询资料和老师同学帮助最终解决了。遇到的问题如下:

          1、在多表查询时,我不太清楚怎么为表取别名,在实验中,我查询资料明白了在一个查询得到的表后可以直接加上别名。

          2、在做第二题时,我对外连接不太清楚,通过一个个测试,了解了inner join,

    left join, right join和cross join的用法。

  • 相关阅读:
    BFPRT(中位数的中位数算法)
    View的事件体系
    Android的消息机制
    BInder机制总结
    Service总结
    IPC机制总结
    AIDL使用绑定启动远程Service出现Service Intent must be explicit: Intent
    线程协作与并发流程控制&AQS
    TCP相关问题整理
    USACO 2015 US OPEN Gold T3: Trapped in the Haybales
  • 原文地址:https://www.cnblogs.com/chen9510/p/6028286.html
Copyright © 2020-2023  润新知