mysql concat group_concat functions with examples
Tento tutoriál vysvetľuje, ako používať MySQL CONCAT s funkciami Select a GROUP_CONCAT so syntaxou, a praktické príklady:
CONCAT je funkcia String podporovaná MySQL, ktorá umožňuje kombinovať alebo spájať dva alebo viac reťazcov a vracať sa ako jedna hodnota. Názov CONCAT pochádza zo slovesa zreťazenie, čo znamená spojenie dvoch alebo viacerých entít.
V tomto tutoriáli sa dozvieme použitie CONCATu s príkladmi dotazov a ďalšími variáciami funkcie CONCAT poskytovanou MySQL.
Čo sa dozviete:
Funkcia MySQL CONCAT
Syntax:
Syntax funkcie CONCAT je jednoduchá. Obsahuje iba zoznam reťazcov oddelených čiarkami, ku ktorým je potrebné sa pripojiť.
CONCAT(string1, string2, ------ stringN)
Vstupné aj výstupné typy očakávané funkciou CONCAT sú reťazce. Aj keď je dodávaný s číslami, konečný výstup bude String.
Napríklad:
# 1) S typmi vstupu ako reťazce.
SELECT CONCAT('string1', 'string2'); //Output string1string2
#dva) So vstupom ako čísla / čísla s pohyblivou rádovou čiarkou.
SELECT CONCAT(1,2); //Output 12 SELECT CONCAT(1.1234,2); //Output 1.12342
Používanie CONCATU s príkazmi SELECT
CONCAT sa najbežnejšie používa popri dotazoch SELECT, kde môže kombinovať údaje z 2 alebo viacerých stĺpcov do jedného stĺpca.
Klasickým príkladom môže byť, predpokladajme, že máme tabuľku, ktorá má samostatné stĺpce pre polia meno a priezvisko. Takže pri zobrazovaní údajov predpokladajme, že chcete zobraziť celé meno namiesto krstného mena a priezviska. Môžeme využiť CONCAT a podľa toho zobraziť vybrané dáta.
Pozrime sa na to v akcii.
otázky a odpovede na otázky týkajúce sa dátových záznamov pre skúsených
Najskôr vytvorte študentskú tabuľku s poľami - id, meno, priezvisko, vek, dátum narodenia a oddelenie.
CREATE TABLE student (id INT PRIMARY KEY, fname VARCHAR(100), lname VARCHAR(100), age INT, dob DATE, department VARCHAR(100));
Vložte do tabuľky nejaké fiktívne údaje.
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');
Teraz napíšte výraz SELECT, aby ste získali celé meno ako zreťazený reťazec kombinujúci meno a priezvisko.
SELECT CONCAT(fname,lname) as fullName from student
//Výkon
celé meno |
---|
DarrenStill |
AbhishekKumar |
AmitSingh |
StevenJohnson |
KartikShamungam |
Ako vidíte na výstupe vyššie, medzi menom a priezviskom nie sú medzery, vďaka čomu je nečitateľný. Medzery môžeme pridať aktualizáciou funkcie CONCAT, aby sme mali reťazec, ktorý sa má zreťaziť, získať ďalší znak medzery.
SELECT CONCAT(fname, ' ', lname) as fullName from student
Takto by ste zabezpečili, že pri každom vstupe budete mať medzi sebou extra medzery.
Používanie CONCATU so SKUPINOU
MySQL poskytuje ďalšiu funkciu s názvom GROUP_CONCAT.
Je to podobné ako CONCAT, ale líši sa spôsobom, akým sa CONCAT používa na kombinovanie hodnôt naprieč stĺpcami, zatiaľ čo funkcia GROUP_CONCAT sa väčšinou používa na spájanie hodnôt naprieč riadkami.
Syntax MySQL GROUP_CONCAT
SELECT col1, col2, ..., colN GROUP_CONCAT ( (DISTINCT) col_name1 (ORDER BY clause) (SEPARATOR str_val) ) FROM table_name GROUP BY col_name2;
Vo funkcii GROUP_CONCAT teda môžete vidieť:
- col_name: Toto je stĺpec, s ktorým chcete spojiť. Existuje voliteľná klauzula DISTINCT, ktorá zabráni opakovaniu hodnôt.
- ZORADIŤ PODĽA: Klauzula ORDER BY sa používa na určenie poradia v zreťazenom zozname a je voliteľná.
- SEPARÁTOR: Toto je opäť voliteľná klauzula, ktorú je možné použiť na definovanie vlastného oddeľovača medzi zreťazenými hodnotami. Predvolene je oddeľovač čiarka (,).
Príklady MySQL GROUP_CONCAT
Vo vyššie uvedenom príklade tabuľky pre študentov predpokladajme, že chceme zisti zoznam zreťazených oddelení .
SELECT GROUP_CONCAT(department) as departments FROM student //Output ENGINEERING,ACCOUNTING,ENGINEERING,HUMAN RESOURCES,TRAINEE
Vo vyššie uvedenom dotaze
- Výstup obsahuje zoznam všetkých oddelení oddelených čiarkami, ktoré sú k dispozícii v stĺpci oddelenie.
- Existujú aj opakujúce sa hodnoty ( Napríklad, ENGINEERING), pretože sme nešpecifikovali klauzulu DISTINCT.
Skúsme ten istý príklad s klauzulou DISTINCT:
SELECT GROUP_CONCAT(DISTINCT department) as departments FROM student //Output ACCOUNTING,ENGINEERING,HUMAN RESOURCES,TRAINEE
To by len vrátilo zreteľné hodnoty stĺpca oddelenia.
Teraz pridajte vlastný oddeľovač ako „|“ a klauzulu ORDER BY, aby boli názvy oddelení zoradené vzostupne
SELECT GROUP_CONCAT(DISTINCT department separator ' | ') as departments FROM student //Output ACCOUNTING | ENGINEERING | HUMAN RESOURCES | TRAINEE
Takže vo vyššie uvedenom dotaze
- Názvy oddelení sú zoradené vzostupne.
- Nie sú vrátené žiadne opakujúce sa hodnoty.
- Oddeľovač sa zmenil z „,“ na „| „.
Pozrime sa ďalší príklad na vypísanie zreťazených hodnôt študentov na jednotlivých katedrách.
Tu by sme nechceli, aby boli DISTINCTOVÉ, pretože 2 študenti v odbore môžu mať rovnaké meno.
SELECT department, GROUP_CONCAT(fname ORDER BY fname ASC SEPARATOR ' | ') AS students FROM student GROUP BY department
// Výkon
oddelenie | študentov |
---|---|
ÚČTOVNÍCTVO | Abhishek |
INŽINIERSTVO | Amit | Darren |
ĽUDSKÉ ZDROJE | Steven |
TRÉNING | Kartik |
Kombinácia CONCAT a GROUP_CONCAT
Vo vyššie uvedenom príklade predpokladajme, že spolu s každým oddelením chceme zobraziť KONCATENOVANÉ hodnoty mena a priezviska.
Aby sme to dosiahli, môžeme v príkaze GROUP_CONCAT použiť CONCAT.
Pozrime sa na to v akcii nižšie:
SELECT department, GROUP_CONCAT(CONCAT(fname, ' ', lname) order by fname asc SEPARATOR ' | ') as students from student group by department
//Výkon
oddelenie | študentov |
---|---|
ÚČTOVNÍCTVO | Abhishek kumar |
INŽINIERSTVO | Amit Singh | Darren Stále |
ĽUDSKÉ ZDROJE | Steven Johnson |
TRÉNING | Kartik šamungam |
Zaobchádzanie s NULL hodnotami s CONCAT
CONCAT očakáva reťazcové argumenty a vráti výstup ako reťazec.
Ak je akýkoľvek vstup do funkcie CONCAT NULL, potom by výstup mal tiež NULL.
SELECT CONCAT('string1','string2', NULL); //Output NULL
Na spracovanie hodnôt NULL môžete vo funkcii CONCAT použiť príkaz ifNull, ktorý zabezpečí predvolenú alebo prázdnu hodnotu v prípade hodnoty NULL zo stĺpca.
Predpokladajme, že máme 2 reťazce a 1 NULL hodnotu pre CONCAT, ako je to v príklade vyššie.
SELECT CONCAT('string1','string2', ifNull(NULL,'hello')); //Output string1string2hello
Vo vyššie uvedenom dotaze sme pridali funkciu ifNull obklopujúcu hodnotu NULL (alebo stĺpec, ktorý by mohol byť NULL) - ak je zhoda NULL úspešná, potom vráti hodnotu „ahoj“, inak skutočnú hodnotu stĺpca.
Na výstupe teda môžete vidieť, že pre reťazec NULL je vytlačené slovo „ahoj“.
často kladené otázky
Otázka č. 1) Ako zlúčim stĺpce v MySQL?
Odpoveď: MySQL poskytuje funkciu CONCAT na kombinovanie alebo zlúčenie 2 alebo viacerých stĺpcov z jednej alebo viacerých tabuliek a vrátenie zlúčených hodnôt do výstupu.
Otázka 2) Kde a kedy musím použiť metódu concat v MySQL?
Odpoveď: Metóda CONCAT sa zvyčajne používa na zobrazenie výsledkov dotazu, kde by ste chceli spojiť 2 alebo viac stĺpcov a reprezentovať ich ako jeden stĺpec.
Napríklad, Predpokladajme, že máte tabuľku, ktorá obsahuje meno a priezvisko ako samostatné stĺpce a chcete ich zobraziť ako jednu entitu s názvom fullName - potom môžete pomocou funkcie CONCAT zlúčiť hodnoty stĺpca s menom a priezviskom a zobraziť ich spolu. ako jeden stĺpec.
Otázka 3) Čo je to MySQL GROUP_CONCAT?
Odpoveď: Podobne ako CONCAT, aj MySQL GROUP_CONCAT sa používa na zreťazenie hodnôt v tabuľke. Rozdiel je v tom, že zatiaľ čo CONCAT sa používa na kombinovanie hodnôt medzi stĺpcami, GROUP_CONCAT vám dáva možnosť kombinovať hodnoty medzi riadkami.
Je tiež dôležité poznamenať, že GROUP_CONCAT a CONCAT možno kombinovať, aby sa dosiahli požadované výsledky.
GROUP_CONCAT sa používa všeobecne v scenároch, kde by ste chceli zoskupiť alebo skombinovať hodnoty naprieč riadkami. Napríklad - máte produktovú tabuľku s názvom a kategóriou produktu a chcete uviesť zoznam všetkých produktov oproti danej kategórii ako hodnoty oddelené čiarkami - potom môžete použiť GROUP_CONCAT.
Dopyt:
SELECT categoryName, GROUP_CONCAT(itemName) AS itemList FROM products GROUP BY categoryName
Otázka č. 4) Ako môžem určiť oddeľovač pomocou príkazu CONCAT?
Odpoveď: S CONCAT môžete určiť oddeľovač ako samostatný reťazec, ktorý sa má zreťaziť.
Napríklad: Predpokladajme, že chcete použiť „|“ ako oddeľovač, potom v príkaze CONCAT môžete tento reťazec určiť medzi názvami stĺpcov, ktoré zreťazujete.
SELECT CONCAT(fname, '| ', lname) as fullName from student
Otázka č. 5) Aký je rozdiel medzi príkazmi CONCAT a CONCAT_WS?
Odpoveď: CONCAT_WS je ďalšou variáciou CONCAT poskytovanou serverom MySQL, ktorá umožňuje používateľovi určiť oddeľovač stĺpcov, ktoré sú zreťazené.
Toto je preferované pred CONCAT v situáciách, keď chcete zlúčiť väčší počet stĺpcov a použiť rovnaký oddeľovač pre všetky zreťazené stĺpce.
Príklad: Predpokladajme, že je tu študent tabuľky s poľami - meno, priezvisko a adresa.
Teraz chceme spojiť všetky tieto tri polia a oddeliť ich znakom „|.
Použitím KONCÁT , musíme určiť oddeľovač ako samostatný reťazec, ktorý sa má zreťaziť.
SELECT CONCAT(fname, '|', lname, '|', address) as mergedColumn from student
Zatiaľ čo s CONCAT_WS oddeľovač stačí zadať raz.
SELECT CONCAT_WS('|', fname, lname, address) as mergedColumn from student
Záver
V tomto tutoriáli sme sa dozvedeli o funkcii MySQL CONCAT a jej použití. Táto funkcia je všeobecne veľmi užitočná pri zobrazovaní výsledkov dotazu na zlúčenie hodnôt proti rôznym stĺpcom.
Dozvedeli sme sa tiež o 2 rôznych variáciách funkcie CONCAT - jedna je zreťazená so separátorom pomocou CONCAT_WS a druhá je zreťazená hodnoty riadkov pomocou funkcie MySQL GROUP_CONCAT.
Odporúčané čítanie
- Výukový program MySQL JOIN: Vnútorný, Vonkajší, Krížový, Ľavý, Pravý a Ja
- MySQL UNION - komplexný návod s príkladmi Únie
- Funkcie formátu dátumu a časovej pečiatky MySQL s príkladmi
- MySQL Vložiť do tabuľky - Vložiť syntax príkazov a príklady
- Výukový program pre vyhlásenie o aktualizácii MySQL - aktualizácia syntaxe dotazov a príklady
- Výukový program na vytvorenie prehľadu MySQL s príkladmi kódu
- Výukový program pre funkcie / metódy C # s príkladmi kódu