当前位置:   article > 正文

MySQL之concat函数_mysqlconcat函数

mysqlconcat函数

一、concat()函数
1、功能:将多个字符串连接成一个字符串。

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

返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。
例1:select concat (id, name, score) as info from tt2;

在例1的结果中三个字段id,name,score的组合没有分隔符,我们可以加一个逗号作为分隔符

但是输入sql语句麻烦了许多,三个字段需要输入两次逗号,如果10个字段,要输入九次逗号…麻烦死了啦,有没有什么简便方法呢?——于是可以指定 参数之间的分隔符的concat_ws() 来了!!!

二、concat_ws()函数(oracle将表的列名显示为一行)
1、功能:和concat()一样,将多个字符串连接成一个字符串,但是可以一次性指定分隔符~(concat_ws就是concat with separator)

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

select wm_concat(列名) from 表名;
  • 1

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

三、group_concat()函数
前言:在有group by的查询语句中,select指定的字段要么就包含在group by语句的后面,作为分组的依据,要么就包含在聚合函数中。。

但是这样同一个名字出现多次,看上去非常不直观。有没有更直观的方法,既让每个名字都只出现一次,又能够显示所有的名字相同的人的id呢?——使用group_concat()
一对多

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

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

例2:使用group_concat()和group by显示相同名字的人的id号:

select c.cid,c.cname,group_concat(s.sname) as sname from classes c left join student3 s on c.cid=s.cid group by c.cid,c.cname
  • 1

例3:将上面的id号从大到小排序,且用’_'作为分隔符:
在这里插入图片描述
例4:上面的查询中显示了以name分组的每组中所有的id。接下来我们要查询以name分组的所有组的id和score:
在这里插入图片描述

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

有重复数据主要有一下几种情况:
1.存在两条完全相同的纪录
这是最简单的一种情况,用关键字distinct就可以去掉
example: select distinct * from table(表名) where (条件)
2.存在部分字段相同的纪录(有主键id即唯一键)
如果是这种情况的话用distinct是过滤不了的,这就要用到主键id的唯一性特点及group by分组
example:

select * from table where id in (select max(id) from table group by [去除重复的字段名列表,…])
  • 1

3.没有唯一键ID
这种情况我觉得最复杂,目前我只会一种方法,有那位知道其他方法的可以留言,交流一下:
example:

select identity(int1,1) as id,* into newtable(临时表) from table
  • 1
select * from newtable where id in (select max(id) from newtable group by [去除重复的字段名列表,…])
  • 1

drop table newtable

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/1012211
推荐阅读
  

闽ICP备14008679号