本文中使用的例子均在下面的数据库表tt2下执行:sql
一、功能:将多个字符串链接成一个字符串。数据库
二、语法: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()。字符串
一、功能:和concat()同样,将多个字符串链接成一个字符串,可是能够一次性指定分隔符(concat_ws就是concat with separator)
二、语法:concat_ws(separator, str1, str2, ...)
说明:第一个参数指定分隔符。须要注意的是分隔符不能为null,若是为null,则返回结果为null。
三、举例:
例3:咱们使用concat_ws()将 分隔符指定为逗号,达到与例2相同的效果:
例4:把分隔符指定为null,结果所有变成了null:
前言:在有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: