mysql concat group_concat functions with examples
Denna handledning förklarar hur man använder MySQL CONCAT med Select- och GROUP_CONCAT-funktioner med syntax och praktiska exempel:
CONCAT är en strängfunktion som stöds av MySQL för att kombinera eller sammanfoga två eller flera strängar tillsammans och returnera som ett enda värde. Namnet CONCAT kommer från verbsammankopplingen, vilket innebär att man sammanfogar två eller flera enheter.
I denna handledning lär vi oss användningen av CONCAT med frågeexempel och andra varianter av CONCAT-funktionen från MySQL.
Vad du kommer att lära dig:
MySQL CONCAT-funktion
Syntax:
Syntaksen för CONCAT-funktionen är enkel. Den innehåller bara en kommaseparerad lista över de strängar som behöver förenas.
CONCAT(string1, string2, ------ stringN)
Både ingångs- och utgångstyperna som förväntas av CONCAT-funktionen är strängar. Även om den levereras med siffror kommer den slutliga utmatningen att vara Sträng.
Till exempel:
# 1) Med ingångstyper som strängar.
SELECT CONCAT('string1', 'string2'); //Output string1string2
#två) Med inmatning som nummer / flytande nummer.
SELECT CONCAT(1,2); //Output 12 SELECT CONCAT(1.1234,2); //Output 1.12342
Använda CONCAT med SELECT-uttalanden
CONCAT används mest tillsammans med SELECT-frågorna, där den kan kombinera data från två eller fler kolumner i en enda kolumn.
Ett klassiskt exempel kan vara, antag att vi har en tabell som har separata kolumner för förnamn och efternamnfält. Så när du visar data, antar att det är önskan att visa Fullnamn istället för förnamn och efternamn. Vi kan använda CONCAT och visa valda data därefter.
Låt oss se detta i aktion.
vad gör en betatestare
Skapa först en studenttabell med fält - id, förnamn, efternamn, ålder, födelsedatum och avdelning.
CREATE TABLE student (id INT PRIMARY KEY, fname VARCHAR(100), lname VARCHAR(100), age INT, dob DATE, department VARCHAR(100));
Infoga lite dummydata i tabellen.
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');
Skriv nu en SELECT-fråga för att få ett fullständigt namn som en sammanhängande sträng som kombinerar förnamn och efternamn.
SELECT CONCAT(fname,lname) as fullName from student
//Produktion
fullständiga namn |
---|
DarrenStill |
AbhishekKumar |
AmitSingh |
StevenJohnson |
KartikShamungam |
Som du kan se i ovanstående utdata finns det inget avstånd mellan förnamn och efternamn, vilket gör det oläsligt. Vi kan lägga till avstånd genom att uppdatera CONCAT-funktionen för att få ett extra mellanslagstecken som en sträng som ska sammanfogas.
SELECT CONCAT(fname, ' ', lname) as fullName from student
Detta skulle säkerställa att du får extra avstånd mellan varje post.
Använda CONCAT med GROUP
MySQL tillhandahåller en annan funktion som heter GROUP_CONCAT.
Det liknar CONCAT, men det skiljer sig åt på det sättet att CONCAT används för att kombinera värden över kolumner, medan funktionen GROUP_CONCAT oftast används för att sammanfoga värden över rader.
MySQL GROUP_CONCAT Syntax
SELECT col1, col2, ..., colN GROUP_CONCAT ( (DISTINCT) col_name1 (ORDER BY clause) (SEPARATOR str_val) ) FROM table_name GROUP BY col_name2;
Så i GROUP_CONCAT-funktionen kan du se:
- kol_namn: Det här är den kolumn som du vill sammanfoga. Det finns en valfri DISTINCT-sats för att undvika upprepade värden.
- SORTERA EFTER: ORDER BY-klausulen används för att specificera ordningen i den sammanhängande listan och är valfri.
- SEPARATOR: Detta är återigen en valfri sats som kan användas för att definiera en anpassad separator mellan de sammanhängande värdena. Som standard är komma (,) avgränsaren.
MySQL GROUP_CONCAT Exempel
Anta att vi vill i studenttabellsexemplet ovan ta reda på en lista över sammankopplade avdelningar .
SELECT GROUP_CONCAT(department) as departments FROM student //Output ENGINEERING,ACCOUNTING,ENGINEERING,HUMAN RESOURCES,TRAINEE
I ovanstående fråga,
- Utdata innehåller en kommaseparerad lista över alla avdelningar som finns tillgängliga i avdelningskolumnen.
- Det finns också upprepande värden ( Till exempel, ENGINEERING) eftersom vi inte har specificerat en DISTINCT-klausul.
Låt oss prova samma exempel med DISTINCT-klausulen:
SELECT GROUP_CONCAT(DISTINCT department) as departments FROM student //Output ACCOUNTING,ENGINEERING,HUMAN RESOURCES,TRAINEE
Detta skulle bara returnera distinkta värden i avdelningskolumnen.
Lägg nu till en anpassad separator som '|' och ORDER BY-satsen för att sortera avdelningsnamnen i stigande ordning
SELECT GROUP_CONCAT(DISTINCT department separator ' | ') as departments FROM student //Output ACCOUNTING | ENGINEERING | HUMAN RESOURCES | TRAINEE
Så i ovanstående fråga,
- Avdelningsnamn sorteras i stigande ordning.
- Inga upprepande värden returneras.
- Avgränsaren ändras från ',' till '| '.
Låt oss se ett annat exempel för att lista ned de sammanhängande värdena för studenter i varje institution.
Här skulle vi inte vilja ha så DISTINCT som två studenter i en institution kan ha samma namn.
SELECT department, GROUP_CONCAT(fname ORDER BY fname ASC SEPARATOR ' | ') AS students FROM student GROUP BY department
// Output
avdelning | studenter |
---|---|
BOKFÖRING | Abhishek |
TEKNIK | Amit | Darren |
PERSONALAVDELNING | Steven |
PRAKTIKANT | Kartik |
Kombinera CONCAT och GROUP_CONCAT
Anta i exemplet ovan att vi vill visa de CONCATENATED värdena för namn och efternamn tillsammans med varje avdelning.
För att uppnå detta kan vi använda CONCAT i kommandot GROUP_CONCAT.
Låt oss se detta i aktion nedan:
SELECT department, GROUP_CONCAT(CONCAT(fname, ' ', lname) order by fname asc SEPARATOR ' | ') as students from student group by department
//Produktion
avdelning | studenter |
---|---|
BOKFÖRING | Abhishek kumar |
TEKNIK | Amit Singh | Darren Still |
PERSONALAVDELNING | Steven Johnson |
PRAKTIKANT | Kartik shamungam |
Hantering av NULL-värden med CONCAT
CONCAT förväntar sig strängargument och returnerar utdata som sträng.
Om någon ingång till CONCAT-funktionen är NULL, skulle utgången också vara NULL.
SELECT CONCAT('string1','string2', NULL); //Output NULL
För att hantera NULL-värden kan du använda ett ifNull-uttalande inom CONCAT-funktionen som skulle säkerställa ett standardvärde eller ett tomt värde om NULL-värdet från kolumnen.
Antag att vi har 2 strängar och 1 NULL-värde för CONCAT, som exemplet ovan.
SELECT CONCAT('string1','string2', ifNull(NULL,'hello')); //Output string1string2hello
I ovanstående fråga har vi lagt till en ifNull-funktion som omger NULL-värdet (eller en kolumn som kan vara NULL) - om NULL-matchningen är framgångsrik skulle den returnera 'hej' annars det faktiska kolumnvärdet.
Så i utgången kan du se för NULL-strängen, 'hej' skrivs ut.
Vanliga frågor
F # 1) Hur slår jag samman kolumner i MySQL?
Svar: MySQL tillhandahåller en CONCAT-funktion för att kombinera eller slå samman två eller flera kolumner från en eller flera tabeller och returnera de sammanslagna värdena i utdata.
F # 2) Var och när måste jag använda concat-metoden i MySQL?
Svar: CONCAT-metoden används vanligtvis mot visning av frågeresultat där du vill gå med i två eller flera kolumner och representera dem som en enda kolumn.
Till exempel, antar att du har en tabell som innehåller förnamn och efternamn som separata kolumner och att du vill visa dem som en enda enhet som heter fullnamn - då kan du använda CONCAT-funktionen för att slå samman värdena för förnamn och efternamnkolumn och visa dem tillsammans som en enda kolumn.
F # 3) Vad är MySQL GROUP_CONCAT?
Svar: I likhet med CONCAT används MySQL GROUP_CONCAT också för att sammanfoga värden över en tabell. Skillnaden här är medan CONCAT används för att kombinera värden över kolumner, GROUP_CONCAT ger dig möjlighet att kombinera värden över rader.
Det är också viktigt att notera att både GROUP_CONCAT och CONCAT kan kombineras för att ge önskat resultat.
GROUP_CONCAT används generellt i scenarier där du vill gruppera eller kombinera värden över rader. Till exempel - du har en produkttabell med produktnamn och kategori och du vill lista alla produkter mot en viss kategori som kommaseparerade värden - sedan kan du använda GROUP_CONCAT.
Fråga:
SELECT categoryName, GROUP_CONCAT(itemName) AS itemList FROM products GROUP BY categoryName
F # 4) Hur kan jag ange en separator med CONCAT-kommandot?
Svar: Med CONCAT kan du ange separator som en separat sträng som ska sammanfogas.
Till exempel: Antag att du vill använda '|' som en avgränsare, så i CONCAT-kommandot kan du ange den här strängen mellan kolumnnamnen du sammanfogar.
SELECT CONCAT(fname, '| ', lname) as fullName from student
F # 5) Vad är skillnaden mellan CONCAT och CONCAT_WS kommandon?
Svar: CONCAT_WS är en annan variant av CONCAT som tillhandahålls av MySQL, vilket gör det möjligt för en användare att ange en separator för de kolumner som sammanlänkas.
Detta föredras framför CONCAT i situationer där du vill slå samman fler kolumner och använda samma avgränsare för alla kolumner som sammanfogas.
Exempel: Antag att det finns en tabellstudent med fält - fname, lname och address.
Nu vill vi sammanfoga alla dessa tre fält och separera med '|'.
Använder sig av CONCAT måste vi ange separatorn som en separat sträng som ska sammanfogas.
SELECT CONCAT(fname, '|', lname, '|', address) as mergedColumn from student
Medan med CONCAT_WS du behöver bara ange avgränsaren en gång.
SELECT CONCAT_WS('|', fname, lname, address) as mergedColumn from student
Slutsats
I denna handledning lärde vi oss om MySQL CONCAT-funktionen och dess användning. Denna funktion är i allmänhet mycket användbar när du visar frågeresultat för att slå samman värden mot olika kolumner.
Vi lärde oss också om två olika varianter av CONCAT-funktionen - en sammanfogas med en avgränsare med CONCAT_WS och en annan sammanfogar värden på rader med MySQL GROUP_CONCAT-funktionen.
Rekommenderad läsning
- MySQL JOIN Handledning: Inre, yttre, kors, vänster, höger och själv
- MySQL UNION - Omfattande handledning med exempel på fackföreningar
- MySQL-datumformat och tidsstämpelfunktioner med exempel
- MySQL Insert In Table - Insert Statement Syntax & Exempel
- MySQL Update Statement Tutorial - Update Query Syntax & Exempel
- MySQL Skapa vyhandledning med kodexempel
- C # -funktioner / metodhandledning med kodexempel