Skip to content

https://www.jb51.net/article/249749.htm

group_concat 详解

''与null的区别

// '' 代表存入的是空的字符串  完全不占空间
select * from test where a = ''  

// 而字段中如果有null值,则要通过  is null进行判断,不能用=null
select * from test where a = null

select * from test where a is null

null值字段的排序

// null值默认被mysql认为是最小的值
// asc 升序排列,那么a字段中如果有null值的,则会排在最上面
// desc反之,在最后面
select * from test order by a asc;

count 统计

会将group_num为null的数据过滤掉

select count(group_num) from sc_base_color;

group by

会将null 进行分组统计

select count(*) from sc_base_color GROUP BY group_num;

where查询条件中>1 <1

会将null值也过滤掉

select  * from sc_base_color where  group_num<1;

null值字段如果是索引字段

  • 在mysql 5.7以及5.7以下的版本中 如果某一列上存在null值,并且该字段被设置成了索引字段,那么该字段在查询时被当做查询条件时,如果所查询出来的数据数量超过表总数据的30%,那么该字段的索引将会失效,将会进行全表扫描。 如果查询出来的数据量小于总数据量的30%,那么该字段的索引将会生效。

  • 在mysql8.0以及8.0+的版本中 如果a字段设置为索引字段,那么 is null 和is not null 索引将一直生效(可能有一些特殊的情况暂时没有遇到)

select * from test where a is null;

select * from test where a is not null;

索引跳跃

设置默认值

  • 1、比如int、bigint类型默认值为-1/0

  • 2、比如varchar类型默认值为空串

  • 3、bigdecimal类型为0等等。