最近可谓非常忙,一个人15天负责多个大屏的输出,还是挺辛苦的。在开发过程,为了满足条件,提高效率,使用sql提供的函数,还是能节省很多java代码的。
函数字一:union
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
使用场景:查询两个相似表的数据(例如项目中有活动告警表和历史告警表,表结构一样,但存的数据性质却不一样),直接用这个函数字拼接返回一个list,比在代码中拼接list省事的多了。
但是要注意还很容易被忽略的一个问题是:UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。该对应的对应不起来,数据就会出现偏差,比如张三年龄18,你给整成身高18,显然不合理。
union
和union all
的区别
两个函数都有连接的意思,不同点在于,union连接两个sql语句时,多sql的结果相同和不同的数据只返回一次,而union all是返回前一条语句执行的所有结果加后一条语句执行的所有结果,所以返回的数据是会重复的。
上查询示例:
表结构:test_p、test_c
union关联查询的结果
union all关联查询的结果
这俩关键字的另一用法则可以查出多表的全集数据,和其他数据库的full join函数一样效果
众所周知mysql没有全连接full join
函数的,所以想要返回两张表的所有数据,可以使用左连接加右链接然后使用union all函数关联两条sql的结果得到最终集。
函数字二:coalesce
查数据这真是个常用且超级好用的函数
返回参数中的第一个非空表达式(从左向右)
使用场景:在查询数据返回给前端时,某一项为空就可以用它进行判断返回固定的值给前端,可以让前端友好的显示,不显示null或者报错。
使用示例:select coalesce(cpu_num,0) from xxx
,这个sql的意思是查询cpu核数,为空时返回0
不仅可以设置返回一个默认值,也可以多个进行选择出一个不为空的,例如coalesce(username,english_name,nick_name,'no name')
:当用户名为空时,首先返回英文名,英文名也为空就返回昵称,昵称也为空则就显示no name了
这个函数和ifnull
差不多,但是ifnull
只能返回一个默认值。例:ifnull(age,0)
不定期持续更新…