mysql concat group_concat functions with examples
Denne vejledning forklarer, hvordan man bruger MySQL CONCAT med Select- og GROUP_CONCAT-funktioner med syntaks og praktiske eksempler:
CONCAT er en strengfunktion understøttet af MySQL til at kombinere eller sammenføje to eller flere strenge sammen og returnere som en enkelt værdi. Navnet CONCAT kommer fra verbet sammenkædning, hvilket betyder at forbinde 2 eller flere enheder sammen.
I denne vejledning lærer vi brugen af CONCAT med forespørgselseksempler og andre variationer af CONCAT-funktionen leveret af MySQL.
Hvad du lærer:
MySQL CONCAT-funktion
Syntaks:
Syntaksen for CONCAT-funktionen er ligetil. Den indeholder bare en komma-adskilt liste over de strenge, der skal sammenføjes.
CONCAT(string1, string2, ------ stringN)
Både de input- og outputtyper, der forventes af CONCAT-funktionen, er Strings. Selvom den leveres med tal, bliver den endelige output streng.
For eksempel:
# 1) Med inputtyper som strenge.
SELECT CONCAT('string1', 'string2'); //Output string1string2
#to) Med input som tal / flydende numre.
SELECT CONCAT(1,2); //Output 12 SELECT CONCAT(1.1234,2); //Output 1.12342
Brug af CONCAT med SELECT-udsagn
CONCAT er mest udbredt sammen med SELECT-forespørgsler, hvor den kan kombinere data fra 2 eller flere kolonner i en enkelt kolonne.
Et klassisk eksempel kan være, antag, at vi har en tabel, der har separate kolonner til fornavn og efternavn felter. Så mens du viser data, antager det, at det er ønsket om at vise Fuldnavn i stedet for fornavn og efternavn. Vi kan gøre brug af CONCAT og vise de valgte data i overensstemmelse hermed.
Lad os se dette i aktion.
hvad er en dat-fil mac
Opret først en elevtabel med felter - id, fornavn, efternavn, alder, fødselsdato og afdeling.
CREATE TABLE student (id INT PRIMARY KEY, fname VARCHAR(100), lname VARCHAR(100), age INT, dob DATE, department VARCHAR(100));
Indsæt nogle dummy-data 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-forespørgsel for at få et fuldt navn som en sammenkædet streng, der kombinerer fornavn og efternavn.
SELECT CONCAT(fname,lname) as fullName from student
//Produktion
fulde navn |
---|
DarrenStill |
AbhishekKumar |
AmitSingh |
StevenJohnson |
KartikShamungam |
Som du kan se i ovenstående output, er der ingen afstand mellem fornavn og efternavn, hvilket gør det ulæseligt. Vi kan tilføje afstand ved at opdatere CONCAT-funktionen for at have et ekstra mellemrumstegn som en streng, der skal sammenkædes.
SELECT CONCAT(fname, ' ', lname) as fullName from student
Dette vil sikre, at du med hver post får ekstra afstand imellem.
Brug af CONCAT med GROUP
MySQL giver en anden funktion kaldet GROUP_CONCAT.
Det svarer til CONCAT, men det adskiller sig på den måde, at CONCAT bruges til at kombinere værdier på tværs af kolonner, mens GROUP_CONCAT-funktionen mest bruges til sammenkædning af værdier på tværs af rækker.
MySQL GROUP_CONCAT Syntaks
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:
- col_name: Dette er den kolonne, som du vil sammenkæde. Der er en valgfri DISTINCT-klausul for at undgå gentagne værdier.
- BESTIL AF: ORDER BY-klausulen bruges til at specificere rækkefølgen inden for den sammenkædede liste og er valgfri.
- SEPARATOR: Dette er igen en valgfri klausul, der kan bruges til at definere en brugerdefineret separator mellem de sammenkædede værdier. Som standard er komma (,) separatoren.
MySQL GROUP_CONCAT Eksempler
Antag, at vi i studenttabeleksemplet ovenfor vil find ud af en liste over sammenkædede afdelinger .
SELECT GROUP_CONCAT(department) as departments FROM student //Output ENGINEERING,ACCOUNTING,ENGINEERING,HUMAN RESOURCES,TRAINEE
I ovenstående forespørgsel
- Outputtet indeholder en komma-adskilt liste over alle de afdelinger, der er tilgængelige i afdelingskolonnen.
- Der er også gentagne værdier ( For eksempel, ENGINEERING) da vi ikke har specificeret en DISTINCT-klausul.
Lad os prøve det samme eksempel med DISTINCT-klausulen:
SELECT GROUP_CONCAT(DISTINCT department) as departments FROM student //Output ACCOUNTING,ENGINEERING,HUMAN RESOURCES,TRAINEE
Dette vil bare returnere de forskellige værdier i afdelingskolonnen.
Tilføj nu en brugerdefineret separator som '|' og ORDER BY-klausul for at få sorteret afdelingens navne i stigende rækkefølge
SELECT GROUP_CONCAT(DISTINCT department separator ' | ') as departments FROM student //Output ACCOUNTING | ENGINEERING | HUMAN RESOURCES | TRAINEE
Så i ovenstående forespørgsel
- Afdelingsnavne er sorteret i stigende rækkefølge.
- Ingen gentagne værdier returneres.
- Separatoren ændres fra ',' til '| '.
Lad os se et andet eksempel for at liste de sammenkædede værdier for studerende i hver afdeling.
Her ønsker vi ikke, at DISTINCT som 2 studerende i en afdeling måske har samme navn.
SELECT department, GROUP_CONCAT(fname ORDER BY fname ASC SEPARATOR ' | ') AS students FROM student GROUP BY department
// Output
afdeling | studerende |
---|---|
REGNSKAB | Abhishek |
INGENIØRARBEJDE | Amit | Darren |
MENNESKELIGE RESSOURCER | Steven |
PRAKTIKANT | Kartik |
Kombinerer CONCAT og GROUP_CONCAT
I det ovenstående eksempel antager vi, at vi vil vise de CONCATENATED-værdier for navn og efternavn sammen med hver afdeling.
For at opnå dette kan vi bruge CONCAT i GROUP_CONCAT-kommandoen.
Lad os se dette i aktion nedenfor:
SELECT department, GROUP_CONCAT(CONCAT(fname, ' ', lname) order by fname asc SEPARATOR ' | ') as students from student group by department
//Produktion
afdeling | studerende |
---|---|
REGNSKAB | Abhishek kumar |
INGENIØRARBEJDE | Amit Singh | Darren Still |
MENNESKELIGE RESSOURCER | Steven Johnson |
PRAKTIKANT | Kartik shamungam |
Håndtering af NULL-værdier med CONCAT
CONCAT forventer argumenter for streng og returnerer output som streng.
Hvis noget input til CONCAT-funktionen er NULL, vil output også være NULL.
SELECT CONCAT('string1','string2', NULL); //Output NULL
For at håndtere NULL-værdier kan du gøre brug af en ifNull-sætning inden for CONCAT-funktionen, som ville sikre en standard- eller blank værdi i tilfælde af NULL-værdien fra kolonnen.
Antag, at vi har 2 strenge og 1 NULL-værdi til CONCAT, som eksemplet ovenfor.
SELECT CONCAT('string1','string2', ifNull(NULL,'hello')); //Output string1string2hello
I ovenstående forespørgsel har vi tilføjet en ifNull-funktion, der omgiver NULL-værdien (eller en kolonne, der kan være NULL) - hvis NULL-matchet er vellykket, ville det returnere 'hej' ellers den faktiske kolonneværdi.
Så i output kan du se for NULL-strengen, 'hej' udskrives.
Ofte stillede spørgsmål
Q # 1) Hvordan fletter jeg kolonner i MySQL?
Svar: MySQL giver en CONCAT-funktion til at kombinere eller flette 2 eller flere kolonner fra en eller flere tabeller og returnere de flettede værdier i output.
Q # 2) Hvor og hvornår skal jeg bruge concat-metoden i MySQL?
Svar: CONCAT-metoden bruges generelt mod visning af forespørgselsresultater, hvor du ønsker at deltage i 2 eller flere kolonner og repræsentere dem som en enkelt kolonne.
For eksempel, Antag, at du har en tabel, der indeholder fornavnet og efternavnet som separate kolonner, og at du vil vise dem som en enkelt enhed kaldet fuldnavn - så kan du bruge CONCAT-funktionen til at flette værdierne for fornavn og efternavns kolonne og vise dem sammen som en enkelt kolonne.
Q # 3) Hvad er MySQL GROUP_CONCAT?
Svar: I lighed med CONCAT bruges MySQL GROUP_CONCAT også til at sammenkæde værdier på tværs af en tabel. Forskellen her er, mens CONCAT bruges til at kombinere værdier på tværs af kolonner, giver GROUP_CONCAT dig muligheden for at kombinere værdier på tværs af rækker.
Det er også vigtigt at bemærke, at både GROUP_CONCAT og CONCAT kan kombineres for at give de ønskede resultater.
GROUP_CONCAT bruges generelt i scenarier, hvor du vil GROUP eller kombinere værdier på tværs af rækker. For eksempel - du har en produkttabel med produktnavn og kategori, og du vil liste alle produkter i en given kategori som kommaseparerede værdier - så kan du bruge GROUP_CONCAT.
Forespørgsel:
SELECT categoryName, GROUP_CONCAT(itemName) AS itemList FROM products GROUP BY categoryName
Q # 4) Hvordan kan jeg angive en separator ved hjælp af CONCAT-kommandoen?
Svar: Med CONCAT kan du angive separator som en separat streng, der skal sammenkædes.
For eksempel: Antag at du vil bruge '|' som en separator, så i CONCAT-kommandoen kan du angive denne streng mellem de kolonnenavne, du sammenkæder.
SELECT CONCAT(fname, '| ', lname) as fullName from student
Q # 5) Hvad er forskellen mellem CONCAT og CONCAT_WS kommandoer?
Svar: CONCAT_WS er en anden variant af CONCAT leveret af MySQL, som gør det muligt for en bruger at specificere en separator for de kolonner, der bliver sammenkædet.
Dette foretrækkes frem for CONCAT i situationer, hvor du vil flette flere antal kolonner og bruge den samme separator til alle de kolonner, der er sammenkædet.
Eksempel: Antag at der er en bordstudent med felter - fname, lname og adresse.
Nu ønsker vi at sammenkæde alle disse tre felter og adskille med '|'.
Ved brug af CONCAT , skal vi specificere separatoren som en separat streng, der skal sammenkædes.
SELECT CONCAT(fname, '|', lname, '|', address) as mergedColumn from student
Mens med CONCAT_WS du skal bare angive separatoren en gang.
SELECT CONCAT_WS('|', fname, lname, address) as mergedColumn from student
Konklusion
I denne vejledning lærte vi om MySQL CONCAT-funktionen og dens anvendelse. Denne funktion er generelt meget nyttig, når der vises forespørgselsresultater til fletning af værdier i forskellige kolonner.
Vi lærte også om 2 forskellige variationer af CONCAT-funktionen - den ene sammenkædes med en separator ved hjælp af CONCAT_WS, og den anden sammenkobles værdierne for rækker ved hjælp af MySQL GROUP_CONCAT-funktionen.
Anbefalet læsning
- MySQL JOIN Tutorial: Indre, ydre, kryds, venstre, højre og selv
- MySQL UNION - Omfattende vejledning med EU-eksempler
- MySQL datoformat og tidsstempelfunktioner med eksempler
- MySQL indsæt i tabel - Indsæt erklæringens syntaks og eksempler
- MySQL Update Statement Tutorial - Update Query Syntax & Eksempler
- MySQL Opret visningsvejledning med kodeeksempler
- C # Funktioner / Metoder Vejledning med kodeeksempler