SQL语句(十四)子查询

时间:2022-12-30 23:43:36
--1. 使用IN关键字 --例1 查询系别人数不足5人的系别中学生的学号、姓名和系别 --系别人数不足5人的系别 ==>选择条件 select Sdept from Student Group by Sdept Having Count(*) < 5 --显示这些系别的学生信息 Select sno, sname, sdept From Student WHERE sdept IN ( select Sdept from Student Group by Sdept Having Count(*) < 5 ) --2. 使用EXISTS关键字 --例2 如果“MA"系别有人的成绩大于等于90 --就把全系别的学号,姓名、班级、课程号、成绩显示出来 --查询"MA"系别成绩大于90的学生信息 select * from Student INNER JOIN SC ON Student.Sno = SC.Sno WHERE Student.Sdept = 'MA' and SC.Grade >= 90 --结果有,则显示全班信息 select Sdept, SC.Sno, Sname, Cno, Grade from Student INNER JOIN SC ON Student.Sno = SC.Sno WHERE Student.Sdept = 'MA' and EXISTS ( --exists 里是一个子查询 select * from Student INNER JOIN SC ON Student.Sno = SC.Sno WHERE Student.Sdept = 'MA' and SC.Grade >= 90 )
--(4)所有课程都被选修的学生学号 select Sno From Student Where not EXISTS ( Select * From Course where not Exists ( Select * From SC where Sno = Student.Sno and Cno = Course.Cno ) )
--3. 比较运算 --例3 显示航天班成绩在平均成绩以上的人的 --班级、学号、姓名、课程号和成绩 --所有参加考试的人的所有课程的总平均 select AVG(Grade) from SC --平均成绩以上的人的信息 select S.Sdept, S.Sno, S.Sname, SC.Cno, SC.Grade from Student as S INNER JOIN SC on S.Sno = SC.Sno WHERE SC.Grade > ANY( -- any, 表示集合里头的任何一个都可以 select AVG(Grade) from SC ) AND S.Sdept = 'IS' --例4 查询学生的班级数 --首先, 查询学生来自哪些不同的班级 --该查询的结果,像是统计的数据源 SELECT distinct Sdept From Student --然后统计这个的个数 --把这个结果看作类似一个表一样 --写在FROM子句中 Select count(*) as 班级数 FROM ( --查询的是哪些班级 SELECT distinct Sdept From Student ) AS S