先找条件==>再输出结果==>最后对结果排序
汇总函数:- count:计数函数
count(*)表示对所有行进行计数
2. sum:求和函数
3. aug:求平均数函数
4. max/min:求最大最小值函数
注意点:
对有指定列的函数汇总时,空值不计入内;对所有列函数汇总时,空值计入内。
sum和aug函数只能对数值类型进行计算
数据分组:对输出结果进行分组
关键词:group by
对分组结果指定条件
关键词:having
查询结果排序:不指定顺序时按系统顺序进行排序
关键词:order by
升序:asc ; 降序: desc
可以对多列进行排序,按order指定列依次排序
空值排在最前面
从查询结果中取出指定行
关键词:limit
一般报错信息:
报错界面会显示在第几行报错
按照SQL的运行顺序来看,group by子句在select之前,因此select语句中设定的别名不能用于group by的分组
用SQL解决实际问题:
- 把需求翻译成白话
- 设想分析思路
- 写SQL语句解决问题
根据navicat显示的数据:
- 教师号虽然用的是varchar类型的数据,还是可以用来计算的
2. 空值排在最前面
3. 数据库的字符集编码是utf-8,汉字排序不是按照字母顺序排列的。
练习题注意点:
- 有类似“每”“各”关键词的需要进行分组
2. 选出查询的是什么内容来进行列的选择
3. 输出格式需要带分组信息,比如每个学生的学号
- 查询课程编号为“0002”的总成绩:
2. 查询选了课程的学生人数:
3. 查询
各科成绩最高和最低分:
4. 查询
每门课程被选修的学生数:
5. 查询男生,女生人数
6. 查询平均成绩大于等于80分的学生学号和平均成绩:
round用于设置别名之前
7. 查询至少选修2门课程的学生学号:
8. 查询同名同姓学生名单并统计同名人数:
9. 每门课的平均成绩并且平均成绩大于等于80分:
10. 查询不及格的课程并按课程号从大到小排列:
desc和asc要写在列后面
11. 查询每门课的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列。
SELECT from Nobel 的习题: