这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
本模块主要用于记录在平时学习或编码中了解到的mysql的一些十分好用的函数。正所谓好记性不如烂笔头,因此我把学习到的这些函数记录下来方便日后的复习回顾。
1.IF()、IFNULL()、NULLIF()、ISNULL()函数的使用
IF(expr1,expr2,expr3)- 相当于Java里面的
boolean ? a : b - 如果expr1的值为true,则返回expr2的值,如果expr1的值为false,则返回expr3的值
- 相当于Java里面的
IFNULL(expr1,expr2)- 如果expr1的值为null,则返回expr2的值,如果expr1的值不为null,则返回expr1的值
NULLIF(expr1,expr2)- 如果expr1=expr2成立,那么返回值为null,否则返回值为expr1的值
ISNULL(expr)- 如果expr的值为null,则返回1,如果expr1的值不为null,则返回0
2.NUION、NUION ALL函数的使用
- 两者都是将两个select语句的结果作为一个整体显示出来
- 区别
UNION:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序,筛选掉重复的记录UNION ALL:对两个结果集进行并集操作,包括重复行,不进行排序; 如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了
- 注意事项
- 两者内部的SELECT语句必须拥有相同数量的列
- 两者内部的SELECT语句中列的顺序必须相同
- 若顺序不同,结果字段的顺序以union all前面的表字段顺序为准,union all 后面的表的数据会按照顺序依次附在后面
3.CONCAT()
concat(str1,str2,...)- 用途:将多个字符串连接成一个字符串
- 返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null
concat_ws(separator, str1, str2, ...)- 将多个字符串连接成一个字符串,且可以指定分隔符
- 第一个参数指定分隔符。需要注意的是分隔符不能为null,如果为null,则返回结果为null
group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator] )- 将group by产生的同一个分组中的值连接起来,返回一个字符串结果
- distinct可以排除重复值;如果希望对结果中的值进行排序,可以使用order by子句;separator分隔符是一个字符串值,默认为一个逗号
concat_ws()和group_concat()联合使用- 查询以name分组的所有组的id和score:
select name,group_concat(concat_ws('-',id,score) order by id) as 别名 from 表名 group by name;
- 查询以name分组的所有组的id和score: