mysql查询注意事项
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)当 or
和and
同时使用,先执行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、having
和where
区别
相同点:都是用来限制显示信息条件。
不同点: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
查询语句
select *,max(menu_order) from sys_admin_information group by info_type;
查询结果:menu
分组取的记录依然是第一条menu_order =1
的记录,而max作用的字段属性取的是最大值16。
2.9、union与union all区别
union把两个查询结果合并在一起,去除重复的记录。
union all 只将两个查询结果合并在一起,不做去重处理。