MySQL合并多列数据之CONCAT()函数和CONCAT_WS()函数(字符串连接函数)

一、函数描述

函数 描述
CONCAT(s1,s2…sn) 字符串 s1,s2 等多个字符串合并为一个字符串
CONCAT_WS(x, s1,s2…sn) 同 CONCAT(s1,s2,…) 函数,但是每个字符串之间要加上 x,x 可以是分隔符

二、创建表和添加测试数

1、创建表

  • 建表语句:
-- 人员信息表
CREATE TABLE `person` (
  `id` int(10) NOT NULL COMMENT '主键',
  `name` varchar(32) DEFAULT NULL COMMENT '姓名',
  `room_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '房间id',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-- 房间信息表
CREATE TABLE `room` (
  `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '房间表主键',
  `room_name` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '房间名称',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=203 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

2、添加测试数据

  • 测试数据:
-- 人员信息测试数据
insert  into `person`(`id`,`name`,`room_id`) values 
(1,'仪凯','101'),
(2,'包莉','102'),
(3,'李天斌','101'),
(4,'孙灿','103'),
(5,'宋凯','103'),
(6,'图谊','201'),
(7,'刘敏','202'),
(8,'王志成','202'),
(9,'王波','101'),
(10,'晨德峰','102');

--房间信息测试数据
insert  into `room`(`id`,`room_name`) values 
(101,'办公室101'),
(102,'办公室102'),
(103,'办公室103'),
(201,'办公室201'),
(202,'办公室202'),
(203,'办公室203');

3、表图

  • 人员信息表(左)和房间信息表(右)
    在这里插入图片描述

三、编写测试SQL语句

1、函数CONCAT()

  • 功能:将多列数据合并成一列;
  • 语法:CONCAT(s1,s2…sn);
  • 结果:将多列结果合并成一列进行展示,注意如果合并对象中有一列的值为null,那么返回结果也会为null;
  • 示例一:
    两表关联:
SELECT
  *
FROM
  room t1
  LEFT JOIN person t2
    ON t1.id = t2.room_id

结果:
在这里插入图片描述

  • 使用函数concat():
SELECT
  t1.id,
  CONCAT (t1.room_name, t2.name)
FROM
  room t1
  LEFT JOIN person t2
    ON t1.id = t2.room_id
  • 结果:可以看到房间表203人员表信息为null,在合并后结果显示为null;
    在这里插入图片描述
  • 示例二:在示例一种得到的结果将t1.room_name和t2.name两个字段合并成一个字段返回,两个字段间没有分隔符,接下来添加分隔符;
SELECT
  t1.id,
  CONCAT (t1.room_name, ',', t2.name)
FROM
  room t1
  LEFT JOIN person t2
    ON t1.id = t2.room_id
  • 结果:这种写法虽然可以达到想要的效果,但是如果合并n个字段就需要拼接n个分隔符,所以这就有了concat_ws()函数;
    在这里插入图片描述

2、函数CONCAT_WS()

  • 功能:将多列数据合并成一列,且可以指定分隔符
  • 语法:CONCAT_WS(x, s1,s2…sn);
  • 结果:第一个参数指定分隔符,将多列结果合并成一列且按指定分隔符进行分割展示,注意分隔符不能为null,如果为null,则返回结果为null。
  • 示例一:
SELECT
  t1.id,
  CONCAT_WS ('-', t1.room_name, t2.name)
FROM
  room t1
  LEFT JOIN person t2
    ON t1.id = t2.room_id
  • 结果:分隔符 ‘-’,结果可以看到房间表203合并后的值并是不null,合并值两列中有null,但是合并后结果并不为null
    在这里插入图片描述
  • 示例二:
SELECT
  t1.id,
  CONCAT_WS (NULL, t1.room_name, t2.name)
FROM
  room t1
  LEFT JOIN person t2
    ON t1.id = t2.room_id
  • 结果:分隔符null,得到结果全为null
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zhuzicc/article/details/105842736