学生-课程数据库—初识sql语句(03)(注释版)

group by子句:
如果select选择列表的列,既有普通列,又有聚集函数的列,则一定要分组(即加group by子句)。

如何分组?
答:把select选择列表的普通列,全部作为group by子句的分组列。

注意:
where子句中不能用聚集函数作为条件表达式。聚集函数只能用于select子句和group by中的having子句。

/*查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列*/
select *
from Student
order by Sdept,Sage desc

--(聚集函数)
/*查询学生总人数*/
select COUNT(*) 学生总人数
from Student

/*查询选修了课程的学生人数*/
select COUNT(distinct sno) 
from SC

/*计算选修1号课程的学生的平均成绩*/
select AVG(grade) 
from SC
where Cno='1'

/*查询选修1号课程的学生最高分数*/
select MAX(grade) 
from SC
where Cno='1'

/*查询学生201215121选修课程的总学分数
select SUM(Ccredit) */
from Course,SC
where course.Cno=sc.Cno and Sno='201215121' and Grade>=60

/*求各个课程号及相应的选课人数*/
select Cno,COUNT(*) 
from SC
group by Cno

/*查询选修了三门及以上课程的学生学号*/
select Sno
from SC
group by Sno
having COUNT(*)>=3

/*求各个课程号,课程名及相应的选课人数*/
select SC.Cno,Cname,COUNT(*)
from Course,SC
where Course.Cno=SC.Cno
group by SC.Cno,Cname

/*查询平均成绩大于等于80分的学生学号和平均成绩*/
select Sno,AVG(grade)
from SC
group by Sno
having AVG(grade)>=80

--连接查询
/*查询每个学生及选课情况*/
select *
from Student,SC
where Student.Sno=SC.Sno

/*查询每个学生及选课情况(自然连接实现)*/
select Student.*,Cno,Grade
from Student,SC
where Student.Sno=SC.Sno

/*查询选修2号课程且成绩在90分以上的所有学生的学号和姓名*/
select SC.Sno,Sname
from Student,SC
where Student.Sno=SC.Sno and SC.Cno='2' and Grade>=90

/*查询每个学生及选课情况(左外连接)*/
select Student.*,Cno,Grade
from Student left outer join SC on (Student.Sno=SC.Sno)

/*sc表右外连接course表*/
select *
from SC right outer join Course on SC.Cno=Course.Cno

/*course表左外连接sc表*/
select *
from Course left outer join SC on SC.Cno=Course.Cno

/*查询每个学生的学号、姓名、选修的课程名及成绩*/
select SC.Sno,Sname,Cname,Grade
from Student,SC,Course
where student.Sno=SC.Sno and SC.Cno=Course.Cno

/*查询每个学生的学号、姓名、选修的课程名及成绩,包括没有选修课程的学生,包括没有被选修的课程(完整外连接)*/
select SC.Sno,Sname,Cname,Grade
from (Student full outer join SC on Student.Sno=SC.Sno)
      full outer join Course on SC.Cno=Course.Cno

附宝藏随笔:
传送门

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值