例3.48:查询平均成绩大于等于80分的学生学号和平均成绩
注意:聚合不应出现在 WHERE 子句中,除非该聚合位于 HAVING 子句或选择列表所包含的子查询中,并且要对其进行聚合的列是外部引用。
正确写法:
select Sno,AVG(Grade)
from sc
group by Sno
having avg(grade)>=80;
WHERE子句作用于表或视图,从中选择满足条件的元组
HAVING短语作用于组,从中选择满足条件的组。
多表查询_连接查询
等值连接与非等值连接
例3.49:査询每个学生及其选修课程的情况
select *
from student,sc
where student.sno=sc.sno;
例3.50:对例3.49用自然连接完成
select student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
from student,sc
where student.sno=sc.sno;
例3.51:查询选修2号课程且成绩在80分以上的所有学生的学号和姓名。
select student.Sno,Sname
from student,sc
where student.Sno=sc.Sno AND Cno='2' AND Grade>80;
自身链接
例3.52:查询每一门课的间接先修课(即先修课的先修课)
select first_table.Cno,second_table.Cpno
from course first_table,course second_table
where first_table.Cpno=second_table.Cno;
外连接
例3.53:左外连接,这个左右针对的是 left_table on right_table,和后面的on里面的表的顺序无关。
select student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
from student left outer join sc ON(student.Sno=Sc.Sno);
多表连接
例3.54:查询每个学生的学号、姓名、选修的课程名及成绩
select *
from student,sc,course
where student.Sno=sc.Sno AND course.Cno=sc.Cno;