mysql concat group_concat functions with examples
Tento kurz vysvětluje, jak používat MySQL CONCAT s funkcemi Select a GROUP_CONCAT se syntaxí a praktické příklady:
CONCAT je funkce String podporovaná MySQL, která kombinuje nebo spojuje dva nebo více řetězců dohromady a vrací se jako jedna hodnota. Název CONCAT pochází ze zřetězení slovesa, což znamená spojení 2 nebo více entit dohromady.
V tomto tutoriálu se naučíme použití CONCAT s příklady dotazů a dalšími variantami funkce CONCAT poskytované MySQL.
Co se naučíte:
Funkce MySQL CONCAT
Syntax:
Syntaxe funkce CONCAT je přímočará. Obsahuje pouze seznam řetězců oddělených čárkami, ke kterým je třeba se připojit.
CONCAT(string1, string2, ------ stringN)
Vstupní i výstupní typy očekávané funkcí CONCAT jsou řetězce. I když je dodáván s čísly, konečný výstup bude Řetězec.
Například:
# 1) S typy vstupu jako řetězce.
SELECT CONCAT('string1', 'string2'); //Output string1string2
#dva) Se vstupem jako čísla / čísla s plovoucí desetinnou čárkou.
SELECT CONCAT(1,2); //Output 12 SELECT CONCAT(1.1234,2); //Output 1.12342
Použití CONCAT s příkazy SELECT
CONCAT se nejčastěji používá vedle dotazů SELECT, kde může kombinovat data ze 2 nebo více sloupců do jednoho sloupce.
Klasickým příkladem může být, předpokládejme, že máme tabulku, která má samostatné sloupce pro pole křestního jména a příjmení. Takže při zobrazování dat předpokládejme, že je touha zobrazit celé jméno místo křestního jména a příjmení. Můžeme využít CONCAT a odpovídajícím způsobem zobrazit vybraná data.
Podívejme se na to v akci.
sql rozhovor otázky s odpověďmi pdf
Nejprve vytvořte studentskou tabulku s poli - id, křestní jméno, příjmení, věk, datum narození a oddělení.
CREATE TABLE student (id INT PRIMARY KEY, fname VARCHAR(100), lname VARCHAR(100), age INT, dob DATE, department VARCHAR(100));
Vložte do tabulky nějaké fiktivní ú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');
Nyní napište dotaz SELECT a získejte celé jméno jako zřetězený řetězec kombinující jméno a příjmení.
SELECT CONCAT(fname,lname) as fullName from student
//Výstup
celé jméno |
---|
DarrenStill |
AbhishekKumar |
AmitSingh |
StevenJohnson |
KartikShamungam |
Jak vidíte ve výše uvedeném výstupu, mezi jménem a příjmením nejsou mezery, což je činí nečitelnými. Můžeme přidat mezery aktualizací funkce CONCAT tak, aby měl znak mezery jako řetězec, který se má zřetězit.
SELECT CONCAT(fname, ' ', lname) as fullName from student
Tím by bylo zajištěno, že s každým vstupem budete mít mezery navíc.
Používání CONCATU se SKUPINOU
MySQL poskytuje další funkci nazvanou GROUP_CONCAT.
Je to podobné jako CONCAT, ale liší se ve způsobu, jakým se CONCAT používá ke kombinování hodnot napříč sloupci, zatímco funkce GROUP_CONCAT se většinou používá ke zřetězení hodnot napříč řádky.
Syntaxe 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;
Takže ve funkci GROUP_CONCAT můžete vidět:
- col_name: Toto je sloupec, se kterým chcete zřetězit. Aby se zabránilo opakování hodnot, existuje volitelná klauzule DISTINCT.
- SEŘADIT PODLE: Klauzule ORDER BY se používá k určení pořadí v zřetězeném seznamu a je volitelná.
- ODDĚLOVAČ: Toto je opět volitelná klauzule, kterou lze použít k definování vlastního oddělovače mezi zřetězenými hodnotami. Ve výchozím nastavení je oddělovač čárka (,).
Příklady MySQL GROUP_CONCAT
Ve výše uvedeném příkladu Studentská tabulka předpokládejme, že chceme zjistit seznam zřetězených oddělení .
SELECT GROUP_CONCAT(department) as departments FROM student //Output ENGINEERING,ACCOUNTING,ENGINEERING,HUMAN RESOURCES,TRAINEE
Ve výše uvedeném dotazu
- Výstup obsahuje čárkami oddělený seznam všech oddělení, která jsou k dispozici ve sloupci oddělení.
- Existují také opakující se hodnoty ( Například, ENGINEERING), protože jsme nezadali klauzuli DISTINCT.
Zkusme stejný příklad s klauzulí DISTINCT:
SELECT GROUP_CONCAT(DISTINCT department) as departments FROM student //Output ACCOUNTING,ENGINEERING,HUMAN RESOURCES,TRAINEE
To by jen vrátilo odlišné hodnoty sloupce oddělení.
Nyní přidejte vlastní oddělovač jako „|“ a klauzuli ORDER BY, aby byly názvy oddělení seřazeny vzestupně
SELECT GROUP_CONCAT(DISTINCT department separator ' | ') as departments FROM student //Output ACCOUNTING | ENGINEERING | HUMAN RESOURCES | TRAINEE
Takže ve výše uvedeném dotazu
- Názvy oddělení jsou seřazeny vzestupně.
- Žádné opakující se hodnoty se nevracejí.
- Oddělovač se změnil z „,“ na „| „.
Uvidíme další příklad pro výpis zřetězených hodnot studentů v každém oddělení.
Tady bychom nechtěli, aby DISTINCT, protože 2 studenti na katedře mohou mít stejný název.
SELECT department, GROUP_CONCAT(fname ORDER BY fname ASC SEPARATOR ' | ') AS students FROM student GROUP BY department
// Výstup
oddělení | studenti |
---|---|
ÚČETNICTVÍ | Abhishek |
INŽENÝRSTVÍ | Amit | Darren |
LIDSKÉ ZDROJE | Steven |
PRAKTIKANT | Kartik |
Kombinace CONCAT A GROUP_CONCAT
Ve výše uvedeném příkladu předpokládejme, že chceme zobrazit KONCATENOVANÉ hodnoty jména a příjmení spolu s každým oddělením.
Abychom toho dosáhli, můžeme použít CONCAT v rámci příkazu GROUP_CONCAT.
Podívejme se na to níže:
SELECT department, GROUP_CONCAT(CONCAT(fname, ' ', lname) order by fname asc SEPARATOR ' | ') as students from student group by department
//Výstup
oddělení | studenti |
---|---|
ÚČETNICTVÍ | Abhishek kumar |
INŽENÝRSTVÍ | Amit Singh | Darren Still |
LIDSKÉ ZDROJE | Steven Johnson |
PRAKTIKANT | Kartik shamungam |
Zpracování NULL hodnot pomocí CONCAT
CONCAT očekává argumenty řetězce a vrátí výstup jako řetězec.
Pokud je jakýkoli vstup do funkce CONCAT NULL, pak bude výstup také NULL.
SELECT CONCAT('string1','string2', NULL); //Output NULL
Aby bylo možné zpracovat hodnoty NULL, můžete v rámci funkce CONCAT využít příkaz ifNull, který by v případě hodnoty NULL ze sloupce zajistil výchozí nebo prázdnou hodnotu.
Předpokládejme, že máme 2 řetězce a 1 NULL hodnotu CONCAT, jako výše uvedený příklad.
SELECT CONCAT('string1','string2', ifNull(NULL,'hello')); //Output string1string2hello
Ve výše uvedeném dotazu jsme přidali funkci ifNull obklopující hodnotu NULL (nebo sloupec, který by mohl být NULL) - pokud je shoda NULL úspěšná, vrátí by „ahoj“, jinak skutečnou hodnotu sloupce.
Takže na výstupu vidíte, že pro řetězec NULL je vytištěno „ahoj“.
Často kladené otázky
Otázka č. 1) Jak sloučím sloupce v MySQL?
Odpovědět: MySQL poskytuje funkci CONCAT ke kombinaci nebo sloučení 2 nebo více sloupců z jedné nebo více tabulek a vrácení sloučených hodnot ve výstupu.
Otázka 2) Kde a kdy musím použít metodu concat v MySQL?
Odpovědět: Metoda CONCAT se obecně používá proti zobrazení výsledků dotazu, kde byste chtěli spojit 2 nebo více sloupců a reprezentovat je jako jeden sloupec.
Například, Předpokládejme, že máte tabulku, která obsahuje křestní jméno a příjmení jako samostatné sloupce a chcete je zobrazit jako jednu entitu nazvanou fullName - pak můžete pomocí funkce CONCAT sloučit hodnoty křestního jména a příjmení a zobrazit je společně jako jeden sloupec.
Otázka č. 3) Co je MySQL GROUP_CONCAT?
Odpovědět: Podobně jako CONCAT, MySQL GROUP_CONCAT se také používá ke zřetězení hodnot v tabulce. Rozdíl je v tom, že zatímco CONCAT se používá ke kombinování hodnot napříč sloupci, GROUP_CONCAT vám dává možnost kombinovat hodnoty napříč řádky.
Je také důležité si uvědomit, že GROUP_CONCAT a CONCAT lze kombinovat, aby se vrátily požadované výsledky.
GROUP_CONCAT se používá obecně ve scénářích, kdy byste chtěli SKUPINOVAT nebo kombinovat hodnoty napříč řádky. Například - máte tabulku produktů s názvem a kategorií produktu a chcete vypsat všechny produkty oproti dané kategorii jako hodnoty oddělené čárkami - pak můžete použít GROUP_CONCAT.
Dotaz:
SELECT categoryName, GROUP_CONCAT(itemName) AS itemList FROM products GROUP BY categoryName
Otázka č. 4) Jak lze určit oddělovač pomocí příkazu CONCAT?
Odpovědět: S CONCAT můžete zadat oddělovač jako samostatný řetězec, který se má zřetězit.
Například: Předpokládejme, že chcete použít oddělovač „|“, pak můžete v příkazu CONCAT zadat tento řetězec mezi názvy sloupců, které zřetězujete.
SELECT CONCAT(fname, '| ', lname) as fullName from student
Otázka č. 5) Jaký je rozdíl mezi příkazy CONCAT a CONCAT_WS?
Odpovědět: CONCAT_WS je další variace CONCAT poskytované MySQL, která umožňuje uživateli určit oddělovač pro sloupce, které jsou zřetězeny.
Toto je upřednostňováno před CONCAT v situacích, kdy chcete sloučit větší počet sloupců a použít stejný oddělovač pro všechny sloupce, které jsou zřetězeny.
Příklad: Předpokládejme, že existuje student tabulky s poli - fname, lname a address.
Nyní chceme všechna tato tři pole zřetězit a oddělit znakem | |.
Použitím CONCAT , musíme zadat oddělovač jako samostatný řetězec, který se má zřetězit.
SELECT CONCAT(fname, '|', lname, '|', address) as mergedColumn from student
Zatímco s CONCAT_WS stačí zadat oddělovač jednou.
SELECT CONCAT_WS('|', fname, lname, address) as mergedColumn from student
Závěr
V tomto kurzu jsme se dozvěděli o funkci MySQL CONCAT a jejím použití. Tato funkce je obecně velmi užitečná při zobrazování výsledků dotazu pro slučování hodnot proti různým sloupcům.
Dozvěděli jsme se také o 2 různých variantách funkce CONCAT - jedna je zřetězení pomocí oddělovače pomocí CONCAT_WS a druhá je zřetězení hodnot řádků pomocí funkce MySQL GROUP_CONCAT.
Doporučené čtení
- Výukový program MySQL JOIN: vnitřní, vnější, křížový, levý, pravý a vlastní
- MySQL UNION - komplexní výukový program s příklady Unie
- Funkce formátu data a časové značky MySQL s příklady
- MySQL Vložit do tabulky - Vložit syntaxi výpisu a příklady
- Výukový program pro prohlášení o aktualizaci MySQL - aktualizace syntaxe dotazů a příklady
- MySQL Create View Tutorial s příklady kódu
- Výukový program pro funkce / metody C # s příklady kódu