//------------------------limit 分页关键字------------------------------------------------------------------
select * from t_student limit 0,10; //第一个0代表从哪个位置上获取数据 第二个10表示从那个位置开始取10条数据
limit主要用于MySQL数据库进行分页。
MySQL数据库中,from语句 + where语句执行之后,在内存中会针对数据进行编号,编号从0开始 ,我们分页的原理就是从编号中获取限制条数的数据回来
详情参见:《分页示意图.png》
select * from t_student where age between 18 and 20 limit 0,5; //between and 是区间取值
select * from t_student where age in (18,20) limit 0,5; //一种定值的取值方式 ==== age = 18 or age = 20
select * from t_student where age not in (18,20) limit 0,5; //一种定值的取值方式 ==== age != 18 and age != 20
//------------------------------模糊查询---------------------------------------------------------------------------------------------------
select * from t_student where stu_name like '王%'; // % 匹配0---n个字符
select * from t_student where stu_name like '王_'; // —— 匹配单个字符
% 或_ 在后面, 表示从什么开始向后匹配字符
select * from t_student where stu_name like '%10';
select * from t_student where stu_name like '_五';
% 或_ 在前面, 表示从什么开始向前匹配字符
select * from t_student where stu_name like '%五%';
select * from t_student where stu_name like '_五_';
% 或_ 在两边, 表示从什么开始向两端匹配字符
请大家注意:在使用模糊查询时,尽量不要在第一个字符上写%或_,因为这会导致索引失效
//------------------------------操作NULL值----------------------------------------------------------------------
select * from t_student where age IS NOT NULL;
select * from t_student where age IS NULL;
而不是 age = NULL 或者 age != NULL NULL和任意的运算符进行计算,得到的结果都是false
//--------------------------------------order by排序-------------------------------------------------------------
select * from t_student where age IS NOT NULL order by create_time desc;
执行步骤:
1、先执行from t_student
2、再执行where age IS NOT NULL
3、执行投影操作 select *
4、最后再投影列表中完成order by create_time desc;
select * from t_student where age IS NOT NULL order by create_time desc,age asc ;
排序可用于单列排序,也可以用于多列排序
多列排序:先按照create_time 进行降序排列,再将相同时间的数据,按照年龄进行升序排列……
//-------------------------------------------聚合函数--------------------------------------------------------------
count()函数,主要用于:统计满足条件的总行数有多少条
count(*) 表示,统计包括NULL值的总行数
count([ALL] 某一列)表示,针对某一列进行统计非NULL值的总行数
count([distinct] 某一列) 表示,针对某一列进行统计feiNULL值去重后的总行数
select count(*) from t_score where class_name = 'T40';
sum()函数,主要用于:针对某一个数值列进行求和计算
它没有sum(*)的用法,只有sum([ALL] 某一列) | sum([DISTINCT] 某一列)的用法
sum([ALL] 某一列) 针对该列中所有非NULL值进行数值求和
sum([DISTINCT] 某一列) 针对该列中所有非NULL值,去重后进行数值求和
SELECT sum(english) from t_score where class_name = 'T40';
avg()函数,主要用于:针对某一个数值列进行平均值计算
它没有avg(*)的用法,只有avg([ALL] 某一列) | avg([DISTINCT] 某一列)的用法
avg([ALL] 某一列) 针对该列中所有非NULL值进行数值求平均值计算
sum([DISTINCT] 某一列) 针对该列中所有非NULL值,去重后进行数值求平均值计算
SELECT avg(english) from t_score where class_name = 'T40';
//求某一数值列中数据的最大值,以及最小值
select max(english) from t_score;
select min(english) from t_score;
//--------------------------------------group by--------------------------------------------------
group by通常用于数据分组,放置在where语句之后,并且也是执行在where语句之后
分组可以作用于单列,也可以作用于多列(分组之后,再分组……)
通常配合聚合函数得到一些值
select后投影的列,除了聚合函数之外,其他列必须要跟分组字段相关
select class_name,max(english) as '英语最高成绩',min(english)as '英语最低成绩',sum(english)/count(*) as '英语平均成绩' from t_score group by class_name
//-------------------------------------having-----------------------------------------------------
having 用来过滤聚合函数的结果 ,放置在group by语句之后,也执行在group by语句之后,但是执行在投影数据之前
例如:筛选英语平均成绩在70分以上的班级:
select class_name,max(english) as '英语最高成绩',min(english)as '英语最低成绩',sum(english)/count(*) as '英语平均成绩'
from t_score group by class_name having sum(english)/count(*) >= 70;
//一个完整的语句:
select class_name,max(english) as '英语最高成绩',min(english)as '英语最低成绩',sum(english)/count(*) as '英语平均成绩'
from t_score group by class_name having sum(english)/count(*) >= 70 order by sum(english)/count(*) desc limit 0,2;
执行顺序:
1、from t_score
2、group by class_name
3.计算聚合函数的结果,并执行having sum(english)/count(*) >= 70
4、完成select class_name,max(english) as '英语最高成绩',min(english)as '英语最低成绩',sum(english)/count(*) as '英语平均成绩' 投影
5、order by sum(english)/count(*) desc
6、limit 0,2