CONCAT,CONCAT_WS,GROUP_CONCAT使用

CONCAT()CONCAT_WS() 函数用于连接两个或多个串,但它们之间的基本区别是:

1、CONCAT_WS()函数可以执行级联与串之间的分离器沿,而在CONCAT()方法没有隔板的概念。

2、CONCAT()如果任何参数为NULL,则函数返回NULL;而CONCAT_WS()函数分隔符为NULL时,函数将返回才NULL。

GROUP_CONCAT()函数是mysql中非常实用的函数,它可以将同一个分组下的行拼接在一起。其完整语法:
GROUP_CONCAT([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator ‘分隔符’])

随意创建一张表,如下:

 CREATE TABLE `artist` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `art_name` varchar(50) DEFAULT NULL,
   `art_age` int(11) DEFAULT NULL,
   `art_sex` varchar(50) DEFAULT NULL,
   `art_addr` varchar(50) DEFAULT NULL,
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4;
 
 
 INSERT INTO `artist` VALUES ('1', '靳东', '30', '男', '北京');
 INSERT INTO `artist` VALUES ('2', '梁朝伟', '24', '男', '上海');
 INSERT INTO `artist` VALUES ('3', '刘德华', '19', '男', '重庆');
 INSERT INTO `artist` VALUES ('4', '成龙', '32', '男', '重庆');
 INSERT INTO `artist` VALUES ('5', '雷佳音', '26', '男', '成都');
 INSERT INTO `artist` VALUES ('6', '梅婷', '22', '女', '重庆');
 INSERT INTO `artist` VALUES ('7', '周润发', '22', '男', '贵州');
 INSERT INTO `artist` VALUES ('8', '周星驰', '28', '男', '海南');
 INSERT INTO `artist` VALUES ('9', '贾玲', '26', '女', '上海');
 INSERT INTO `artist` VALUES ('10', '张小斐', '17', '女', '贵阳');
 INSERT INTO `artist` VALUES ('11', '袁泉', '26', '女', '上海');
 INSERT INTO `artist` VALUES ('12', '马伊琍', null, '女', '北京');
SELECT * FROM artist;

CONCAT,CONCAT_WS,GROUP_CONCAT使用_第1张图片

CONCAT语法:

功能:将多个字符串连接成一个字符串。

语法:concat(str1,str2,...)

示例:

将每位明星的姓名、年龄、性别、地址连城字符串输出

SELECT id,CONCAT(art_name,art_age,art_sex,art_addr) FROM artist;

CONCAT,CONCAT_WS,GROUP_CONCAT使用_第2张图片

因为马伊琍art_age值为null,CONCAT()函数返回NULL。

CONCAT_WS语法:

表示concat with separator,即有分隔符的字符串连接。

功能:和concat()一样,将多个字符串连接成一个字符串,但可以指定分隔符。

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

和concat不同的是, concat_ws函数在执行的时候,不会因为NULL值而返回NULL;但会因为 分隔符为NULL,函数返回NULL。

示例:

将每位明星的姓名、年龄、性别、地址连城字符串输出,并逗号分隔

SELECT id,CONCAT_WS(',',art_name,art_age,art_sex,art_addr) FROM artist;

 CONCAT,CONCAT_WS,GROUP_CONCAT使用_第3张图片

GROUP_CONCAT语法:

group by 查询语句中,select 指定的查询字段,只能是 group by 语句的后面的字段,或包含在聚合函数中。

功能 :将group by 产生的同一个分组中的值连接起来,返回一个字符串结果(但返回的结果有长度限制)。

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

说明:

        通过使用distinct 可以排除重复值;

        如果希望结果中的只进行排序,可以使用 order by 子句;

        separator 是一个字符串值,缺省值为 一个逗号。

示例

1、以art_addr分组,把art_name字段的值拼成一行,逗号隔开(默认)。

SELECT art_addr, GROUP_CONCAT(art_name) AS names FROM artist GROUP BY art_addr;

CONCAT,CONCAT_WS,GROUP_CONCAT使用_第4张图片

2、以art_addr分组,把art_name字段值拼成一行,分号隔开,按art_age倒叙排列

SELECT art_addr, GROUP_CONCAT(art_name ORDER BY art_age DESC SEPARATOR ';') AS names FROM artist GROUP BY art_addr;

 CONCAT,CONCAT_WS,GROUP_CONCAT使用_第5张图片

 示例:

根据art_addr分组,将art_name,art_age用“|”分隔,拼接“实力派”,并换行。按年龄倒叙

SELECT art_addr, GROUP_CONCAT(CONCAT(art_name,' | ' ,art_age, ' | ', '实力派') ORDER BY art_age DESC SEPARATOR '\n') AS names FROM artist GROUP BY art_addr;

CONCAT,CONCAT_WS,GROUP_CONCAT使用_第6张图片

你可能感兴趣的:(java,数据库,前端)