数据库函数查询的基本用法

//------------------------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
 

你可能感兴趣的:(数据库MYSQL)