\quad \quad 在Select数据时,我们往往需要将数据进行连接后进行回显。很多的时候想将多个数据或者多行数据进行输出的时候,需要使用字符串连接函数。在SQL中,常见的字符串连接函数有concat(),group_concat(),concat_ws()。
1、concat( )
\quad \quad 返回结果为连接参数产生的字符串。如有任何一个参数为NULL,则返回值为 NULL。可以有一个或多个参数。
语法:
CONCAT(str1,str2,…)
参数:
要连接的各个字符串
eg:
牛客网第50题
将employees表中的所有员工的last_name和first_name通过(’)连接起来。(sqlite不支持concat,请用||实现,mysql支持concat)
select concat(last_name,"'",first_name) as name from employees;
2、concat_ws( )
\quad \quad CONCAT_WS( )代表 CONCAT With Separator,是CONCAT()的特殊形式。
语法:
CONCAT_WS(separator,str1,str2,…)
参数:
separator
:第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL,则结果为 NULL。
str1,str2,…
:其他参数代表要连接的各个字符串。然而,函数会忽略任何分隔符参数后的 NULL 值。但是CONCAT_WS()不会忽略任何空字符串。 (然而会忽略所有的 NULL)。
eg
对于解答上述题,代码为:
select concat_ws("'",last_name,first_name) as name from employees;
3、group_concat( )
\quad \quad GROUP_CONCAT函数返回一个字符串结果,该结果由分组中的值连接组合而成。
语法:
group_concat( DISTINCT str1 Order BY 排序字段 ASC/DESC separator '分隔符')
参数:
[DISTINCT]
:可选关键字,如果想要一组内的结果没有重复元素,则就带上这个关键字
str1
:要连接的字符串
Order BY 排序字段 ASC/DESC
:可选关键字,如果组内元素需要排序,则带上它
separator '分隔符'
:一个组内以什么样的分割符进行连接,默认的情况下是以逗号的形式连接。
eg:
表结构以及数据如下:
SELECT * FROM testgroup;
1、每个id为一行 在前台每行显示该id所有分数,并按id进行排序
SELECT id,GROUP_CONCAT(score) FROM testgroup GROUP BY id;
可以看到,根据id 分成了三行,并且分数默认用 逗号 分割, 但是有每个id有重复数据 接下来可以考虑去重。
2、每个id为一行 在前台每行显示该id所有分数且分数不能重复,并按id进行排序。
select id group_concat(distinct score) from testgroup group by id;
3、每个id为一行 在前台每行显示该id所有分数且所有分数之间用“;”分割,不能重复,并按id进行排序。
select id,group_concat(score separator ';') from testgroup group by id;