關係型數據庫在應用時,有時想把結果進行一些鏈接,包括行鏈接,列鏈接等有時都會用到。本文介紹幾個經常使用的mysql鏈接函數。在此基礎上,能夠實現較豐富的mysql查詢。mysql
關係數據庫查詢時有時但願把查詢結果進行鏈接,常使用concat實現。sql
concat(String,String...)
concat函數支持將多個string參數鏈接成一個string。如:數據庫
|field1|field2| | tv1 | tv2 | | tv3 | tv4 |
select concat(filed1,field2) ftom tb;
將返回:函數
|tv1tv2| |tv3tv4|
不一樣類型的filed會有對應的轉碼方式。MySQL的concat函數在鏈接字符串的時候,只要其中一個是NULL,那麼將返回NULL。code
concat函數在鏈接字符串時沒有指定鏈接符的功能。concat_ws是concat with separator的意思。該函數功能和concat相似,只是在鏈接時能夠指定separator。排序
concat_ws(separator,string,string...)
select concat_ws(',',field1,field2) from tb;
將獲得字符串
|tv1,tv2| |tv3,tv4|
concat_ws不會忽略空值,但會忽略Null。string
前面兩個concat函數都是在不一樣的列上進行鏈接,或鏈接字符串,有時想把某一列的全部值鏈接起來。這時就要用到group_concat函數。it
group_concat其實是一個聚合函數,能夠實現把一列的值聚合到一塊兒,聚合的方法不一樣於count,sum等計數函數,而是concat。基礎
GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]] [SEPARATOR str_val])
最簡單的使用:
select group_concat(field1) from tb;
|tv1,tv3|
把field1這一列的全部值拿出來鏈接在一塊兒組成一個字符串返回。
由於是聚合函數,因此和group組合起來使用,將在組內對列進行鏈接。同時,也能夠傳多個field進去,此時把每一行的多列鏈接起來組成一個列,再對列進行鏈接。默認狀況下列內鏈接符號是',',也能夠在參數中指定separator。
鏈接過程當中還能夠指定組內排序。如:
select group_concat(field1 order by field1 desc SEPARATOR '-');
將獲得
|tv3-tv1|
除了在mysql中使用相似的函數以外,在hive中也有cancat,group_concat函數,使用方法相似,在odps中也有wm_concat具有和group_concat相似的功能。