Mysql学习笔记—concat以及group_concat的用法(转载)

本文中使用的例子均在下面的数据库表tt2下执行:sql

 

1、concat()函数

一、功能:将多个字符串链接成一个字符串。数据库

二、语法:concat(str1, str2,...)ide

返回结果为链接参数产生的字符串,若是有任何一个参数为null,则返回值为null。函数

三、举例:spa

例1:select concat (id, name, score) as info from tt2;orm

中间有一行为null是由于tt2表中有一行的score值为null。blog

例2:在例1的结果中三个字段id,name,score的组合没有分隔符,咱们能够加一个逗号做为分隔符:排序

这样看上去彷佛顺眼了许多,可是输入sql语句麻烦了许多,三个字段须要输入两次逗号,若是10个字段,要输入九次逗号...教程

这种状况,可使用指定参数之间分隔符的concat_ws()。字符串

 

2、concat_ws()函数

一、功能:和concat()同样,将多个字符串链接成一个字符串,可是能够一次性指定分隔符(concat_ws就是concat with separator)

二、语法:concat_ws(separator, str1, str2, ...)

说明:第一个参数指定分隔符。须要注意的是分隔符不能为null,若是为null,则返回结果为null。

三、举例:

例3:咱们使用concat_ws()将 分隔符指定为逗号,达到与例2相同的效果:

例4:把分隔符指定为null,结果所有变成了null:

 

3、group_concat()函数

前言:在有group by的查询语句中,select指定的字段要么就包含在group by语句的后面,做为分组的依据,要么就包含在聚合函数中。(有关group by的知识请戳:浅析SQL中Group By的使用)。

例5:

该例查询了name相同的的人中最小的id。若是咱们要查询name相同的人的全部的id呢?

固然咱们能够这样查询:

例6:

可是这样同一个名字出现屡次,看上去很是不直观。有没有更直观的方法,既让每一个名字都只出现一次,又可以显示全部的名字相同的人的id呢?——使用group_concat()

一、功能:将group by产生的同一个分组中的值链接起来,返回一个字符串结果。

二、语法:group_concat( [distinct] 要链接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )

说明:经过使用distinct能够排除重复值;若是但愿对结果中的值进行排序,可使用order by子句;separator是一个字符串值,缺省为一个逗号。

三、举例:

例7:使用group_concat()和group by显示相同名字的人的id号:

例8:将上面的id号从大到小排序,且用'_'做为分隔符:

例9:上面的查询中显示了以name分组的每组中全部的id。接下来咱们要查询以name分组的全部组的id和score:

 
 
 
 
 
转载自:
相关文章
相关标签/搜索