concat(arg1,arg2,....):將形參對應字段的值組合成一個字符串mysql
假設:如今有一張學生表(test_user)sql
將這三個字段組合成一個字符串做爲第四個字段函數
select test_user.*, concat(test_user.id,test_user.`name`,test_user.sex) as introduction from test_user GROUP BY `name`;
可是查詢出來的數據沒有分割符,能夠在concat中加入常量spa
select test_user.*, concat(test_user.id,',',test_user.`name`,',',test_user.sex) as introduction from test_user GROUP BY `name`;
這樣寫若是分隔符都同樣,又要一直加,那不是很麻煩。3d
mysql提供另外一個函數concat_ws(separator,arg1,arg2,.....),第一個參數爲分隔符,第二個之後的參數爲字段名code
select u.*, concat(u.id,',',u.`name`,',',u.sex) as introduction, CONCAT_WS('.',u.id,u.`name`,u.sex) as xinxi
from test_user u GROUP BY u.`name`;
這些只是對單條記錄數據的拼接。blog
如今多了張課程表(test_subject)字符串
想查詢每一個學生的課程有哪些io
select * from test_user LEFT JOIN test_subject on test_user.id = test_subject.user_id;
可是這樣看起來不夠直觀。那就乾脆先按名稱分組。class
select
*
from
test_user LEFT JOIN test_subject
on test_user.id = test_subject.user_id
GROUP BY test_user.`name`;
可是分完組以後,課程只剩下一個了,沒有達到預期的要求,
mysql提供一個函數GROUP_CONCAT(arg1),內部的形參在分組時,則在arg1字段中將屬於該分組的值字段進行拼接,拼接順序會被order by影響
select
test_user.*,
GROUP_CONCAT(test_subject.`subject`) as `subject`
from
test_user LEFT JOIN test_subject
on
test_user.id = test_subject.user_id
GROUP BY
test_user.`name`;
完成。清晰明瞭的顯示各個學生全部的科目。