SQL书写规则:
以英文分号结尾;不区分关键字的大小写;列名不能加单引号;符号只能使用英文符号。
练习一:汇总分析
汇总函数:count sum avg max min
1.教师人数(不含空字符串)
select count(教师人数) from teacher;
2.教师人数(含空字符串)
select count(*) from teacher;
3.所有课程总成绩、平均成绩、最高分、最低分
select sum(成绩) from score;
select avg(成绩) from score;
select max(成绩),min(成绩) from score;
4.输出不重复姓名
select count(distinct 姓名) from student;
5.查询课程编号为'0002'的总成绩
select sum(成绩) from score
where 课程号='0002';
6.查询选了课程的学生人数(在score表中选不重复学号值)
select count(distinct 学号) as 学生人数
from score;
练习二:分组
1.查询男生女生人数(按性别分组)
select 性别,count(*) from student
group by 性别;
2.对出生日期>'1990-01-01'的人按性别分组
select 性别,count(*) /*最后运行*/
from student/*第一步*/
where 出生日期>'1990-01-01'/*第二步*/
group by 性别;/*第三步*/
3.查询各科成绩最高和最低得分
select max(成绩),min(成绩) from score
group by 课程号;
4.查询每门课程被选修的学生数
select count(学号) from score
group by 课程号;
练习三:对分组结果指定条件
1.查询平均成绩大于60分学生的学号和平均成绩
select 学号,avg(成绩) from score
group by 学号
having avg(成绩)>60;
2.查询至少选修两门课程的学生学号
select 学号 from score
group by 学号
having count(课程号)>=2;
3.查询同名同姓学生名单并统计同名人数(按姓名分组,统计数量大于等于二的组)
select `姓名`,count(*) as `人数` from student
group by `姓名`
having count(*)>=2;
练习四:每门课程的平均成绩
如何计算每门课程的平均成绩并且平均成绩大于等于80分?
select `课程号`,avg(`成绩`) from score
group by `课程号`
having avg(`成绩`)>=80;
练习五:理解sql的运行顺序
1.查询不及格的课程并按课程号从小到大排列
select `课程号` from score
where `成绩`<60
order by `课程号` desc;
2.查询每门课程的平均成绩,结果按平均成绩升序排序。平均成绩相同时,按课程号降序排序。
select `课程号`,avg(`成绩`)/*第三步*/
/*第一步*/
group by `课程号`/*第二步*/
order by avg(`成绩`) asc,`课程号` desc;/*最后运行*/
练习六:如何看懂报错信息
select from nobel
sum and count