mysql中group_concat()函数,concat_ws()函数的使用及组合使用

我创建了两个表分别是员工表和部门表来做例子:
员工表:
在这里插入图片描述
部门表:

在这里插入图片描述

一、concat_ws()函数

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

2、语法:concat_ws(separator, str1, str2, …)

现在我要查询员工的id和名称并连接成一字符串

SELECT CONCAT_WS('-',id ,NAME ) AS '员工id-员工' FROM  employee 

在这里插入图片描述

二、group_concat()函数

现在我要查询部门相同下的所有员工可以这样写查询:

    SELECT dept_name AS '部门',NAME AS '员工'
   FROM dept d LEFT JOIN employee e  ON e.dept_id=d.dept_id 
   GROUP BY NAME

在这里插入图片描述
但是这样同一个部门名称出现多次,看上去非常不直观。有没有更直观的方法,既让每个部门名字都只出现一次,又能够显示所有的部门相同下的员工名字呢?——使用group_concat()

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

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

例子1:使用group_concat()和group by显示相同部门下的员工:

 SELECT d.dept_name AS '部门',GROUP_CONCAT(NAME) AS '员工' FROM employee e LEFT JOIN dept d
     ON e.dept_id=d.dept_id  GROUP BY d.dept_name

在这里插入图片描述
例2:也可以自定义分隔符,用’-'作为分隔符:

   SELECT  d.dept_name AS '部门',GROUP_CONCAT(NAME SEPARATOR'-') AS '员工' FROM employee e LEFT JOIN dept d
    ON e.dept_id=d.dept_id  GROUP BY d.dept_name

在这里插入图片描述
例子3:将员工的id号从大到小排序

使用order by 默认升序(ASC)

 SELECT  d.dept_name AS '部门',GROUP_CONCAT(NAME,id  SEPARATOR'-') AS '员工' FROM employee e LEFT JOIN dept d
    ON e.dept_id=d.dept_id  GROUP BY d.dept_name

在这里插入图片描述
使用order by 降序(DESC)

   SELECT  d.dept_name AS '部门',GROUP_CONCAT(NAME,id ORDER BY id DESC  SEPARATOR'-') AS '员工' FROM employee e LEFT JOIN dept d
ON e.dept_id=d.dept_id  GROUP BY d.dept_name

在这里插入图片描述

例子4:group_concat()函数,concat_ws()函数的组合使用,接下来我们要查询以部门名称分组的所有组的员工名称和员工id:

 SELECT d.dept_name AS '部门',GROUP_CONCAT(CONCAT_WS('-',id,NAME))AS '员工id-员工' FROM employee e LEFT JOIN dept d
    ON e.dept_id=d.dept_id GROUP BY d.dept_name   

在这里插入图片描述

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值