MySQL中CONCAT()、CONCAT_WS()和GROUP_CONCAT()函数的区别和使用

一、MySQL中CONCAT函数

1.功能

将多个字符串连接成一个字符串

2.语法

CONCAT(str1,str2,…)

3.使用方法

返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。

mysql> SELECT CONCAT('张三','李四','王五');
	result> 张三李四王五
	//——————————————————————————————————————————————
	mysql> SELECT CONCAT('张三','李四',NULL);
	result> NUll

4.如果使用其函数进行模糊查询,其例子如下:

例如:表名(Student)

字段

类型

注释

fid

int

主键

name

`varchar

姓名

sex

int`

性别1男2女

age

int

年龄

c_fid

int

班级fid

表名(class)

字段

类型

注释

fid

int

主键

name

`varchar

班级名称

mysql>
	SELECT stu.* ,c.`name` cName FROM student AS stu 
	LEFT JOIN class c ON c.fid = stu.c_fid
	WHERE (stu.c_fid LIKE (CONCAT( '%', 1, '%')) OR stu.c_fid LIKE (CONCAT( '%', 2, '%' )));

result>

fid

name

sex

age

c_fid

cName

1

张三

1

20

1

一年一班

4

赵六

2

17

1

一年一班

5

杨雪

1

17

1

一年一班

2

李四

2

20

2

一年二班

3

王五

2

18

2

一年二班

二、MySQL中CONCAT_WS函数

1.功能

和concat()一样,将多个字符串连接成一个字符串,但是可以一次性指定分隔符~(concat_ws就是concat with separator)

2.语法

CONCAT_WS(separator,str1,str2,...)

3.使用方法

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

//默认分隔符为逗号
mysql> SELECT CONCAT_WS(',','张三','李四','王五');
result> 张三,李四,王五
//和MySQL中CONCAT函数不同的是, CONCAT_WS函数在执行的时候,不会因为NULL值而返回NULL 
mysql> SELECT CONCAT_WS(',','张三',NULL,'王五');
result> 张三,王五

三、MySQL中GROUP_CONCAT函数

1.功能

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

2.语法

GROUP_CONCAT( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )

3.使用方法

通过使用distinct可以排除重复值;如果希望对结果中的值进行排序,可以使用order by子句;separator是一个字符串值,缺省为一个逗号。

(1)以c_fid分组,把name字段的值打印在一行,逗号分隔(默认)

mysql> select c_fid,group_concat(name) sName from Student group by c_fid;

result>

c_fid

sName

1

张三,赵六,杨雪

2

李四,王五

(2)以c_fid分组,把name字段的值打印在一行,分号分隔

mysql> select c_fid,group_concat(name separator ';')  from Student group by c_fid;

result>

c_fid

Name

1

张三:赵六:杨雪

2

李四:王五

(3)以c_fid分组,把去冗余的age字段的值打印在一行,逗号分隔

mysql> select c_fid,group_concat(distinct age) sAge from Student group by c_fid;

result>

c_fid

sAge

1

17,20

2

18,20

(4)以c_fid分组,把sex 字段的值打印在一行,逗号分隔,以age排倒序

mysql> select c_fid,group_concat(sex order by sex desc) from student group by age;

result>

c_fid

sSex

1

2,1

2

2

2

2,1