美文网首页mysql数据库
mysql查询注意事项

mysql查询注意事项

作者: Geroge1226 | 来源:发表于2021-07-12 14:43 被阅读0次

    1、说明

    使用mysql数据库最多的是进行业务的查询写入。尤其是查询,我们会遇到各类场景特殊性。需要对数据按照各种方式筛选,以下是注意事项部分记录:

    2、select查询注意事项集

    常见的基础查询语句格式如下:

    select 属性列表
           from 表名或试图列表
           [where 条件表达式1]
           [group by 属性名1 [having 条件表达式2]]
           [order by 属性名2 [ASC | DESC]]
    

    其中,group by 子句,按照属性名1 字段进行分组,再满足HAVING后条件表达式才能够输出数据。order by字句, 默认按ASC 升序排序,DESC为倒序(值由大到小)。

    2.1 like 模糊匹配两种形式

    (1)使用通配符“ % ” 匹配一个或者多个字符。

    • like “%xxx”: 匹配xxx结尾的数据。
    • like “xxx%”: 匹配xxx开头的数据。
    • like “%xxx%”:匹配中间包含 xxx的数据。

    (2)单个匹配"_" 字符。

    • like "k_d":匹配首尾是kd的三个字符的字符串,但是,中文是占两个字符,需要用两个"_" 字符。 like "张 _ _" 匹配开头为张的两个字的中文。
    2.2、is [not] null 区别于 = null

    is null 表示值为null的记录,筛选不能替换成“ = null ”,否则数据无法获取到。显示数据记录为空。

    2.3、or关键词使用注意

    (1)当 orand同时使用,先执行and连接前后语句再执行or语句,与or所在位置无关。
    如下两条语句执行结果一致:

    select * from myexp_activity_page where  page_name like "树亮%" or id>'14' and page_remarks = '测试';
    
    select * from myexp_activity_page where   id>'14' and page_remarks = '测试' or page_name like "树亮%";
    

    两次运行结果如下:


    image.png
    2.4、order by中值为null的排序问题

    order by 按照某属性名排序时,属性名对应值有null情况。

    • 如果升序排序:null值记录展示在最前面。
    • 如果降序排序:null值记录展示在最后面。
    2.5 、group by使用问题

    (1)简单实用group by 只会显示每个分组的一条记录。

    • 原来表记录:


      image.png
    • 按照“status” 分组

    select id,status from myexp_activity_page group by status;  
    
    • 查询结果


      image.png

      目前表中status只有 “1,2”, 示了 “1” 和“2” 中的2条数据。

    (2)group_cancat (属性名)group by 同时使用。展示每个分组指定的属性字段所有值,多个按逗号隔开。

    select * , GROUP_CONCAT(id) from myexp_activity_page group by status;
    
    image.png

    (3)集合函数的意义:执行顺序,先按照属性名1 进行分组,然后再对每一组数据进行统计。

    select 属性名1 ,count(属性名1)   from group  by 属性名1;
    

    常见与group by 配合使用集合函数count(),max(),min(),svg(),sum()

    (4)group by 与 having 条件表达式使用
    先执行group by 分组,在筛选分组满足having条件表达式 的数据输出。

    • 原始表数据


      image.png
    • info_type分组筛选
    select * ,count(1) from sys_admin_information group by info_type having count(info_type) > 16;
    
    • 输出结果


      image.png

    (5)多属性分组注意点
    group by 字段1,字段2 执行顺序先按照字段1分组,如果遇到字段1相同情况,在按照字段2进行分组,依次类推。

    2.6、havingwhere 区别

    相同点:都是用来限制显示信息条件。
    不同点:where作用与表或试图,having作用与分组后的记录,用于筛选满足条件的分组。

    2.7、limit筛选事项

    (1)limit num:不指定初始位置,表示查询num条记录数
    (2)limit start,num:指定初始问题,从指定位置开始查找后面num条记录

    2.8、max()集合函数

    不仅可以作用于数字类似的属性,也可以作用于字符属性,作用字符类型上是作用与Asii码的排序。
    group by使用时候,依然遵循简单的group by 分组原则,会取第一条记录,而max()会将众多分组最大属性展示,不要以为会整条记录会取max最大的那一条,max只会取作用字段属性上最大的值。
    例如原表数据如下:info_type = menu 的最大menu_order 是16

    image.png

    查询语句

    select *,max(menu_order) from sys_admin_information group by info_type;
    

    查询结果:menu分组取的记录依然是第一条menu_order =1的记录,而max作用的字段属性取的是最大值16。

    image.png
    2.9、union与union all区别

    union把两个查询结果合并在一起,去除重复的记录。
    union all 只将两个查询结果合并在一起,不做去重处理。

    相关文章

      网友评论

        本文标题:mysql查询注意事项

        本文链接:https://www.haomeiwen.com/subject/xfrrpltx.html