1. 排序查询
*语法:order by 子句
*order by 排序字段1 排序方式1, 排序字段2 排序方式2...
*排序方式
*ASC:升序,默认的
*DESC:降序
*注意:如果有多个排序条件,则当前面的条件一样时,才会判断第二个条件
*例:若按照数学成绩排名,如果数学成绩一样,则按英语成绩排名
SELECT * FROM student ORDER BY math ASC , english DESC;
2. 聚合函数:将一列数据作为一个整体,进行纵向计算
1. count:计算个数
1. 一般选择非空的列:主键
2. count(*);
2. max/min:计算最大值/最小值
3. sum:计算和
4. avg:计算平均值
*注意:聚合函数的计算会排除null值
解决方案:
1. 选择不包含非空的列进行计算
2. IFNULL函数
3. 分组查询
1. 语法:GROUP BY 分组字段;
2. 注意:
1. 分组之后查询的字段:分组字段、聚合函数
2. where 和 having 的区别
1. where 在分组之前进行限定,如果不满足条件,则不参与分组。
2. having在分组之后进行限定,如果不满足结果,则不会被查出来
3. where后不可以跟聚合函数,having可以进行聚合函数的判断。
*练习:按照性别分组,分别查询男、女同学的平均分,人数要求:
分数低于70分的人,不参与分组,分组之后,人数要大于两个人。
SELECT sex,AVG(math),COUNT(id) FROM student WHERE
math>70 GROUP BY sex HAVING COUNT(id)>2
4. 分页查询
1. 语法: limit 开始的索引,每页查询的条数;
2. 公式:开始的索引 = (当前的页码 - 1 ) * 每页显示的条数
每页显示3条记录
SELECT * FROM student LIMIT 0,3; 第一页
SELECT * FROM student LIMIT 3,3; 第二页
SELECT * FROM student LIMIT 6,3; 第三页
3. 分页操作是一个MySQL“方言”
DQL:查询表中记录
*select * from 表名;
1. 语法:
select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组之后的条件
order by
拍戏
limit
分页
2. 基础查询
1. 多个字段的查询
*select 字段名1, 字段名2,...from 表名;
*注意:如果查询所有字段,则可以用*来代替字段列表
2. 去除重复
*dintinct
3. 计算列
*一般可以使用四则运算法则计算一些列的值。(一般只会进行数值型的计算)
*ifnull(表达式1,表达式2):null参与1运算,计算结果都为null
*表达式1:哪个字段需要判断是否为null
*表达式2:如果该字段为null后的替换值
4. 起别名
*as:as也可以省略
3. 条件查询
1. where子句后跟条件
2. 运算符
*比较运算符
= 是否相等
< 小于
> 大于
<= 小于等于
>= 大于等于
<> != 不等于
*BETEEN...AND
SELECT * from result WHERE StudentResult >=60 and StudentResult<=80;--解决这类问题
SELECT * from result WHERE StudentResult BETWEEN 60 and 80; -- 等效
*is null 判断值是否为null
*逻辑运算符
and && 逻辑与
or || 或者
not ! 取反
*is not null
in
*SELECT * from result where SubjectId in(1,2,3,4,5);
not in
*SELECT * from result where SubjectId not in(1,2,3);-- 除1 2 3之外所有的科目
模糊查询like
*--% 表示0-n个字符
SELECT * from student where StudentName like '张%';-- 所有姓张的同学
SELECT * from student where Email like '%yahoo%'; -- 含有yhoo的邮箱
*-- '_'表示任意一个字符
SELECT * from student where StudentName LIKE '张_';-- 姓张的名字为两个字的同学