• 数据库作业7:SQL练习4-SELECT2


    查询每个学生及其选修课程的情况

    SELECT Student., SC.
    FROM Student, SC
    WHERE Student.Sno = SC.Sno;
    

    通过学生的学号将Student表与SC表连接起来。
    对上例用自然连接完成

    SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
    FROM Student,SC
    WHERE Student.Sno = SC.Sno;
    

    省去了一列学号,表确实美观了许多。
    查询选修2号课程且成绩在90分以上的所有学生的学号和姓名。

    SELECT Student.Sno, Sname
    FROM Student, SC
    WHERE Student.Sno=SC.Sno AND
    SC.Cno=’ 2 ’ AND SC.Grade>90;
    

    在SC中找Cno=2和Grade>90组成个关系再连接Student中满足关系的元组。

    查询每一门课的间接先修课

    SELECT FIRST.Cno, SECOND.Cpno
    FROM Course FIRST, Course SECOND
    WHERE FIRST.Cpno = SECOND.Cno;
    

    表里面有3号课,它的对应先行课是2号课,2号的先行课为1号课,则1号就是3号的间接先行课。

    SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
    FROM Student LEFT OUT JOIN SC ON (Student.Sno=SC.Sno);
    

    内容为空的数据显示出来了,这是因为外连接的关系。

    查询每个学生的学号、姓名、选修的课程名及成绩

    SELECT Student.Sno, Sname, Cname, Grade
    FROM Student, SC, Course /多表连接/
    WHERE Student.Sno = SC.Sno
    AND SC.Cno = Course.Cno;
    

    查询与“刘晨”在同一个系学习的学生。

    SELECT Sdept
    FROM Student
    WHERE Sname= ’ 刘晨 ';
    SELECT Sno, Sname, Sdept
    FROM Student
    WHERE Sdept= ’ CS ';
    

    将第一步嵌入到第二步查询的条件中:

    SELECT Sno, Sname, Sdept
    FROM Student
    WHERE Sdept IN
    (SELECT Sdept
    FROM Student
    WHERE Sname= ’ 刘晨 ');
    

    查询选修了课程名为“信息系统”的学生学号和姓名

    SELECT Sno,Sname
    FROM Student
    WHERE Sno IN
    (SELECT Sno
    FROM SC
    WHERE Cno IN
    (SELECT Cno
    FROM Course
    WHERE Cname= ‘信息系统’));
    

    1、Course表中找到信息系统的课程号;
    2、在SC表中找到选了3的学生学号;
    3、在Student表中找到对应的学生学号和姓名。

    找出每个学生超过他选修课程平均成绩的课程号。

    
    SELECT Sno, Cno
    FROM SC x
    WHERE Grade >=(SELECT AVG(Grade)
    FROM SC y
    WHERE y.Sno=x.Sno);
    

    带有ANY(SOME)或ALL谓词的子查询
    使用ANY或ALL谓词时必须同时使用比较运算
    语义为:

    ANY 大于子查询结果中的某个值
    ALL 大于子查询结果中的所有值
    < ANY 小于子查询结果中的某个值
    < ALL 小于子查询结果中的所有值
    = ANY 大于等于子查询结果中的某个值
    = ALL 大于等于子查询结果中的所有值
    

    查询非计算机科学系中比计算机科学系任意一个学生年龄小的学生姓名和年龄

    SELECT Sname,Sage
    FROM Student
    WHERE Sage < ANY (SELECT Sage
    FROM Student
    WHERE Sdept= ’ CS ')
    AND Sdept <> ‘CS ’ ; 
    

    查询非计算机科学系中比计算机科学系所有学生年龄都小的学生姓名及年龄。
    两种方法:

    SELECT Sname,Sage
    FROM Student
    WHERE Sage < ALL
    (SELECT Sage
    FROM Student
    WHERE Sdept= ’ CS ')
    AND Sdept <> ’ CS ’
    
    SELECT Sname,Sage
    FROM Student
    WHERE Sage <
    (SELECT MIN(Sage)
    FROM Student
    WHERE Sdept= ’ CS ‘)
    AND Sdept <>’ CS ';在这里插入代码片
    

    使用了ALL谓词和聚集函数

  • 相关阅读:
    Oracle exp/imp导出导入工具的使用
    导入导出数据语句小结
    改变一生的五句话
    给年轻工程师的十大忠告
    项目经理三步曲(项目经理成长版)
    写作、写程序的快乐和痛苦
    《Excel与VBA程序设计(mini版)》
    《3S新闻周刊》第三期发布: 解密Google Earth
    《Excel与VBA程序设计》进度(2006.3.8)
    Arc2Earth正式发布
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13285173.html
Copyright © 2020-2023  润新知