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 |