mysql concat group_concat functions with examples
Овај водич објашњава како се користи МиСКЛ ЦОНЦАТ са функцијама Селецт и ГРОУП_ЦОНЦАТ са синтаксом и примери из праксе:
ЦОНЦАТ је Стринг функција коју МиСКЛ подржава да комбинује или споји две или више жица заједно и врати као једну вредност. Назив ЦОНЦАТ потиче од глагола цонцатенатион, што значи спајање 2 или више ентитета.
У овом упутству научићемо употребу ЦОНЦАТ-а са примерима упита и другим варијацијама функције ЦОНЦАТ које пружа МиСКЛ.
Шта ћете научити:
МиСКЛ ЦОНЦАТ функција
Синтакса:
Синтакса функције ЦОНЦАТ је јасна. Садржи само листу стрингова одвојених зарезом које треба спојити.
CONCAT(string1, string2, ------ stringN)
И улазни и излазни типови које очекује функција ЦОНЦАТ су Стрингс. Чак и ако је испоручен са бројевима, коначни излаз биће Стринг.
На пример:
# 1) Са врстама уноса као Стрингс.
SELECT CONCAT('string1', 'string2'); //Output string1string2
#два) Са уносом као бројеви / бројеви са покретном зарезом.
SELECT CONCAT(1,2); //Output 12 SELECT CONCAT(1.1234,2); //Output 1.12342
Коришћење ЦОНЦАТ-а са СЕЛЕЦТ изјавама
ЦОНЦАТ се највише користи заједно са СЕЛЕЦТ упитима, где може да комбинује податке из 2 или више колона у једну колону.
Класичан пример може бити, претпоставимо да имамо табелу која има засебне колоне за поља ФирстНаме и ластНаме. Дакле, док приказујемо податке, претпоставимо да је жеља да се прикаже ФуллНаме уместо фирстНаме и ластНаме. Можемо користити ЦОНЦАТ и у складу с тим приказати одабране податке.
Да видимо ово на делу.
бесплатне алтернативе за аваст премиум чишћење
Прво направите студентску табелу са пољима - ИД, име, презиме, старост, датум рођења и одељење.
CREATE TABLE student (id INT PRIMARY KEY, fname VARCHAR(100), lname VARCHAR(100), age INT, dob DATE, department VARCHAR(100));
У табелу убаците неке лажне податке.
INSERT INTO student values (1,'Darren', 'Still', 32, '1988-05-20', 'ENGINEERING'), (2,'Abhishek', 'Kumar', 28, '1992-05-20', 'ACCOUNTING'), (3,'Amit', 'Singh', 30, '1990-09-20', 'ENGINEERING'), (4,'Steven', 'Johnson', 40, '1980-05-21', 'HUMAN RESOURCES'), (5,'Kartik', 'Shamungam', 20, '2000-05-12', 'TRAINEE');
Сада напишите СЕЛЕЦТ упит да бисте добили пуно име као спојени низ који комбинује име и презиме.
SELECT CONCAT(fname,lname) as fullName from student
// излаз
пуно име |
---|
ДарренСтилл |
АбхисхекКумар |
АмитСингх |
СтевенЈохнсон |
КартикСхамунгам |
Као што видите у горњем излазу, нема размака између имена и презимена, што га чини нечитким. Размак можемо додати ажурирањем функције ЦОНЦАТ да би имао додатни размак као низ који треба да се споји.
SELECT CONCAT(fname, ' ', lname) as fullName from student
То би осигурало да са сваким уносом имате додатни размак између.
Коришћење ЦОНЦАТ-а са ГРОУП
МиСКЛ пружа још једну функцију која се зове ГРОУП_ЦОНЦАТ.
Слично је ЦОНЦАТ-у, али се разликује по начину на који се ЦОНЦАТ користи за комбиновање вредности у колонама, док се функција ГРОУП_ЦОНЦАТ углавном користи за спајање вредности у редовима.
Синтакса МиСКЛ ГРОУП_ЦОНЦАТ
SELECT col1, col2, ..., colN GROUP_CONCAT ( (DISTINCT) col_name1 (ORDER BY clause) (SEPARATOR str_val) ) FROM table_name GROUP BY col_name2;
Дакле, у функцији ГРОУП_ЦОНЦАТ можете видети:
- цол_наме: Ово је колона са којом желите да се повежете. Постоји опционална клаузула ДИСТИНЦТ да би се избегле понављане вредности.
- НАРУЧИ ПО: Клаузула ОРДЕР БИ користи се за специфицирање редоследа у спојеној листи и није обавезна.
- СЕПАРАТОР: Ово је опет необавезна клаузула која се може користити за дефинисање прилагођеног сепаратора између спојених вредности. Подразумевано је зарез (,) раздвајач.
Примери МиСКЛ ГРОУП_ЦОНЦАТ
Претпоставимо да у горњем примеру табеле Студент желимо сазнајте списак повезаних одељења .
SELECT GROUP_CONCAT(department) as departments FROM student //Output ENGINEERING,ACCOUNTING,ENGINEERING,HUMAN RESOURCES,TRAINEE
У горњем упиту,
- Излаз садржи листу одвојених зарезом свих одељења која су доступна у колони одељења.
- Такође, постоје понављајуће вредности ( На пример, ЕНГИНЕЕРИНГ) јер нисмо навели клаузулу ДИСТИНЦТ.
Покушајмо исти пример са клаузулом ДИСТИНЦТ:
SELECT GROUP_CONCAT(DISTINCT department) as departments FROM student //Output ACCOUNTING,ENGINEERING,HUMAN RESOURCES,TRAINEE
Ово би само вратило различите вредности колоне одељења.
Сада додајте прилагођени сепаратор као „|“ и клаузулу ОРДЕР БИ да би се имена одељења сортирала у растућем редоследу
SELECT GROUP_CONCAT(DISTINCT department separator ' | ') as departments FROM student //Output ACCOUNTING | ENGINEERING | HUMAN RESOURCES | TRAINEE
Дакле, у горњем упиту,
- Имена одељења сортирана су у растућем редоследу.
- Не враћају се понављајуће вредности.
- Сепаратор се мења из „,“ у „| ‘.
Хајде да видимо још један пример за набрајање спојених вредности ученика на сваком одељењу.
Овде не бисмо желели да РАЗЛИКУЈЕМО јер би 2 студента на одељењу могли имати исто име.
SELECT department, GROUP_CONCAT(fname ORDER BY fname ASC SEPARATOR ' | ') AS students FROM student GROUP BY department
// излаз
одељење | студенти |
---|---|
РАЧУНОВОДСТВО | Абхисхек |
ИНЖЕЊЕРИНГ | Амит | Даррен |
ЉУДСКИ РЕСУРСИ | Стевен |
ПРИПРАВНИК | Картик |
Комбиновање ЦОНЦАТ И ГРОУП_ЦОНЦАТ
У претходном примеру, претпоставимо да желимо да прикажемо КОНЦАТИРАНЕ вредности имена и презимена заједно са сваким одељењем.
Да бисмо то постигли, можемо да користимо ЦОНЦАТ у оквиру наредбе ГРОУП_ЦОНЦАТ.
Да видимо ово на делу у наставку:
SELECT department, GROUP_CONCAT(CONCAT(fname, ' ', lname) order by fname asc SEPARATOR ' | ') as students from student group by department
// излаз
одељење | студенти |
---|---|
РАЧУНОВОДСТВО | Абхисхек кумар |
ИНЖЕЊЕРИНГ | Амит Сингх | Даррен Стилл |
ЉУДСКИ РЕСУРСИ | Стевен Јохнсон |
ПРИПРАВНИК | Картик схамунгам |
Руковање НУЛЛ вредностима са ЦОНЦАТ-ом
ЦОНЦАТ очекује Стринг аргументе и враћа излаз као Стринг.
Ако је било који улаз у функцију ЦОНЦАТ НУЛЛ, онда би и излаз био НУЛЛ.
SELECT CONCAT('string1','string2', NULL); //Output NULL
Да бисте обрађивали НУЛЛ вредности, можете користити израз ифНулл унутар функције ЦОНЦАТ који би осигурао подразумевану или празну вредност у случају НУЛЛ вредности из колоне.
Претпоставимо да имамо 2 низа и 1 НУЛЛ вредност за ЦОНЦАТ, као горе наведени пример.
SELECT CONCAT('string1','string2', ifNull(NULL,'hello')); //Output string1string2hello
У горњи упит додали смо функцију ифНулл која окружује НУЛЛ вредност (или колону која може бити НУЛЛ) - ако је НУЛЛ подударање успешно, тада ће вратити „здраво“ у супротном стварну вредност колоне.
Дакле, у излазу можете видети за НУЛЛ низ, исписано је „здраво“.
Често постављана питања
П # 1) Како да објединим колоне у МиСКЛ?
Одговор: МиСКЛ пружа функцију ЦОНЦАТ за комбиновање или спајање 2 или више колона из једне или више табела и враћање спојених вредности у излаз.
П # 2) Где и када морам да користим методу цонцат у МиСКЛ?
Одговор: ЦОНЦАТ метода се обично користи за приказ резултата упита где желите да спојите 2 или више колона и представите их као једну колону.
На пример, претпоставимо да имате табелу која садржи име и презиме као засебне колоне и желите да их прикажете као један ентитет под називом пуно име - тада можете да користите функцију ЦОНЦАТ за спајање вредности колоне имена и презимена и њихово приказивање заједно као једна колона.
П # 3) Шта је МиСКЛ ГРОУП_ЦОНЦАТ?
Одговор: Слично као ЦОНЦАТ, МиСКЛ ГРОУП_ЦОНЦАТ се такође користи за спајање вредности у табели. Овде је разлика у томе што се ЦОНЦАТ користи за комбиновање вредности у колонама, ГРОУП_ЦОНЦАТ вам даје могућност комбиновања вредности у редовима.
Такође је важно напоменути да се и ГРОУП_ЦОНЦАТ и ЦОНЦАТ могу комбиновати да би се добили жељени резултати.
ГРОУП_ЦОНЦАТ се генерално користи у сценаријима у којима бисте желели ГРУПОВАТИ или комбиновати вредности у редовима. На пример - имате табелу производа са именом и категоријом производа и желите да све производе у датој категорији наведете као вредности одвојене зарезом - тада можете да користите ГРОУП_ЦОНЦАТ.
Упит:
SELECT categoryName, GROUP_CONCAT(itemName) AS itemList FROM products GROUP BY categoryName
П # 4) Како могу одредити сепаратор помоћу наредбе ЦОНЦАТ?
Одговор: Помоћу ЦОНЦАТ-а можете одредити сепаратор као засебан низ који се спаја.
На пример: Претпоставимо да желите да користите „|“ као сепаратор, а затим у наредби ЦОНЦАТ можете одредити овај низ између имена колона које повезујете.
SELECT CONCAT(fname, '| ', lname) as fullName from student
П # 5) Која је разлика између наредби ЦОНЦАТ и ЦОНЦАТ_ВС?
Одговор: ЦОНЦАТ_ВС је друга варијанта ЦОНЦАТ-а коју пружа МиСКЛ, а која омогућава кориснику да одреди сепаратор за колоне које се спајају.
Ово је пожељно у односу на ЦОНЦАТ у ситуацијама када желите да спојите већи број колона и користите исти сепаратор за све колоне које су повезане.
Пример: Претпоставимо да постоји ученик табеле са пољима - име, име и адреса.
Сада желимо да објединимо сва ова три поља и раздвојимо их са „|“.
Користећи ЦОНЦАТ , треба да одредимо сепаратор као засебан низ који треба да се спаја.
SELECT CONCAT(fname, '|', lname, '|', address) as mergedColumn from student
Док је са ЦОНЦАТ_ВС требало би само да одредите сепаратор једном.
SELECT CONCAT_WS('|', fname, lname, address) as mergedColumn from student
Закључак
У овом упутству смо сазнали о функцији МиСКЛ ЦОНЦАТ и њеној употреби. Ова функција је углавном корисна када приказује резултате упита за спајање вредности у различите колоне.
Такође смо сазнали за 2 различите варијације функције ЦОНЦАТ - једна се спаја помоћу сепаратора помоћу ЦОНЦАТ_ВС, а друга спаја вредности редова помоћу функције МиСКЛ ГРОУП_ЦОНЦАТ.
Препоручено читање
- МиСКЛ ЈОИН Туториал: Унутрашњи, спољашњи, попречни, леви, десни и сопствени
- МиСКЛ УНИОН - свеобухватан водич са примерима синдиката
- МиСКЛ функције формата датума и временске ознаке са примерима
- МиСКЛ Убаци у табелу - Убаци синтаксу и примере изјаве
- Водич за изјаву о ажурирању МиСКЛ - Синтакса упита и ажурирање примера
- МиСКЛ Водич за креирање погледа са примерима кода
- Водич за функције # методе и методе са примерима кода