本文中使用的例子均在下面的數據庫表tt2下執行:sql
一、功能:將多個字符串鏈接成一個字符串。數據庫
二、語法:concat(str1, str2,...)ide
返回結果爲鏈接參數產生的字符串,若是有任何一個參數爲null,則返回值爲null。函數
三、舉例:spa
例1:select concat (id, name, score) as info from tt2;orm
中間有一行爲null是由於tt2表中有一行的score值爲null。blog
例2:在例1的結果中三個字段id,name,score的組合沒有分隔符,咱們能夠加一個逗號做爲分隔符:排序
這樣看上去彷佛順眼了許多,可是輸入sql語句麻煩了許多,三個字段須要輸入兩次逗號,若是10個字段,要輸入九次逗號...教程
這種狀況,可使用指定參數之間分隔符的concat_ws()。字符串
一、功能:和concat()同樣,將多個字符串鏈接成一個字符串,可是能夠一次性指定分隔符(concat_ws就是concat with separator)
二、語法:concat_ws(separator, str1, str2, ...)
說明:第一個參數指定分隔符。須要注意的是分隔符不能爲null,若是爲null,則返回結果爲null。
三、舉例:
例3:咱們使用concat_ws()將 分隔符指定爲逗號,達到與例2相同的效果:
例4:把分隔符指定爲null,結果所有變成了null:
前言:在有group by的查詢語句中,select指定的字段要麼就包含在group by語句的後面,做爲分組的依據,要麼就包含在聚合函數中。(有關group by的知識請戳:淺析SQL中Group By的使用)。
例5:
該例查詢了name相同的的人中最小的id。若是咱們要查詢name相同的人的全部的id呢?
固然咱們能夠這樣查詢:
例6:
可是這樣同一個名字出現屢次,看上去很是不直觀。有沒有更直觀的方法,既讓每一個名字都只出現一次,又可以顯示全部的名字相同的人的id呢?——使用group_concat()
一、功能:將group by產生的同一個分組中的值鏈接起來,返回一個字符串結果。
二、語法:group_concat( [distinct] 要鏈接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )
說明:經過使用distinct能夠排除重複值;若是但願對結果中的值進行排序,可使用order by子句;separator是一個字符串值,缺省爲一個逗號。
三、舉例:
例7:使用group_concat()和group by顯示相同名字的人的id號:
例8:將上面的id號從大到小排序,且用'_'做爲分隔符:
例9:上面的查詢中顯示了以name分組的每組中全部的id。接下來咱們要查詢以name分組的全部組的id和score: