- GROUP BY子句
GROUP BY子句主要用于根据字段对行分组。通常和聚合函数一起使用
举例一:将xscj数据库中各专业名输出。
select 专业名
from xs
group by 专业名;
举例二:求xscj数据库中各专业的学生数。
select 专业名,count(*) as '学生数'
from xs
group by 专业名;
举例三:求被选修的各门课程的平均成绩和选修该课程的人数。
select 课程号, avg(成绩) as '平均成绩' ,count(学号) as'选修人数'
from xs_kc
group by 课程号;
举例四:在xscj数据库上产生一个结果集,包括每个专业的男生人数、女生人数、总人数,以及学生总人数。
注意:使用带rollup操作符的group by子句,指定在结果集内不仅包含由group by提供的正常行,还包含汇总行。
select 专业名, 性别, count(*) as '人数'
from xs
group by 专业名,性别
with rollup;
举例五:在xscj数据库上产生一个结果集,包括每门课程各专业的平均成绩、每门课程的总平均成绩和所有课程的总平均成绩。
select 课程名, 专业名, avg(成绩) as '平均成绩'
from xs_kc, kc,xs
where xs_kc.课程号 = kc.课程号 and xs_kc.学号 = xs.学号
group by 课程名, 专业名
with rollup;
- HAVING 子句
使用having子句的目的与where子句类似,不同的是where子句是用来在from子句后面之后选择行,而having子句是用来在group by子句后选择行!
举例:查找通信工程专业平均成绩在85分以上的学生的学号和平均成绩。
子查询=>where结果集=>分组
select 学号,avg(成绩) as '平均成绩'
from xs_kc
where 学号 in
( select 学号
from xs
where 专业名 = '通信工程' )
group by 学号
having avg(成绩) >=85;
- ORDER BY子句
排序 关键字ASC表示升序排列,DESC表示降序排列,系统默认值为ASC。
举例一:将计算机专业学生的“计算机基础”课程成绩按降序排列。
select 姓名,课程名,成绩
from xs,kc,xs_kc
where xs.学号= xs_kc.学号
and xs_kc.课程号= kc.课程号
and 课程名= '计算机基础'
and 专业名= '计算机'
order by 成绩 desc;
举例二:将计算机专业学生按其平均成绩排列。
select 学号, 姓名, 专业名
from xs
where 专业名= '计算机'
order by ( select avg(成绩)
from xs_kc
group by xs_kc.学号
having xs.学号=xs_kc.学号
);
- LIMIT子句
LIMIT子句,主要用于限制被SELECT语句返回的行数。
举例:查找xs表中从第4位同学开始的5位学生的信息。
select 学号, 姓名, 专业名, 性别, 出生日期, 总学分
from xs
order by 学号
limit 3, 5;
- UNION子句
使用UNION语句,可以把来自许多SELECT语句的结果组合到一个结果集合中。
举例:查找学号为081101和学号为081210的两位同学的信息。
select 学号, 姓名, 专业名, 性别, 出生日期, 总学分
from xs
where 学号= '081101'
union
select 学号, 姓名, 专业名, 性别, 出生日期, 总学分
from xs
where 学号= '081210';