1.查询选修了课程的学生人数
select count(distinct sno)
from sc
2.查询选修了2号课程的学生的平均成绩
/*where 语句中不能出现 聚集函数*/
select avg(grade)/*sum 总成绩 max 最大成绩*/
from sc
where cno = '2'
select avg(grade),getdate()/*显示当前时间*/
from sc
where cno = '2'
3.查询各个课程号及其相应的选课人数
select语句中只能出现 分组属性 和 聚集函数
--对查询结果分组 group by
select cno,count(sno)
from sc
group by cno /*cno为分组属性;select语句中只能出现 分组属性 和 聚集函数*/
4.查询各个系有多少个学生
select sdept,count(*)
from student
group by sdept
5.查询选修了3门以上的学生的学号
select sno,count(*)
from sc
group by sno having count(*)>=3 /*先按学生学号分组,然后进行筛选*/
多表连接查询
1.查询每个同学及其选修课程的情况
select student.*,sc.* /*这样会导致出现两列Sno*/
from student,sc
where student.sno=sc.sno /*连接条件*/
2.查询每个同学及其选修课程的情况
select student.*,sc.* /*这样会导致出现两列Sno*/
from student,sc
where student.sno=sc.sno /*连接条件*/
3.查找学生信息,所选课程的课程号以及分数
select student.*,cno,grade/*但是sno必须指定属于谁,因为它在两个表中都有*/
from student,sc
where student.sno=sc.sno /*连接条件*/
4.求每一门课程的间接选修课
select first.cno 课程号,second.cpno 间接先修课 /*列别名*/
from Course first,course second/*给表加别名*/
where first.cpno = second.cno
5.查询每名同学的选课情况,包括没有选修课程的同学
select student.*,cno,grade
from student left outer join sc /*左外链接*/
on student.sno = sc.Sno /*on*/
--上下两种查询等价
select student.*,cno,grade
from student,sc
where student.sno=sc.sno
6.查询选修2号课程且成绩在90分以上的学生的学号和姓名
select sc.sno,sname
from student,sc
where student.sno = sc.sno and sc.cno = '2' and grade >60
7.查询每个学生的学号姓名以及选修课程的课程名及其成绩
select student.sno,sname,cname,grade
from student,sc,course
where student.sno = sc.sno and course.cno = sc.cno/*连接三个表*/
- where 与having的区别
having在分组后使用,作用域是目标分组
where作用在整个表