mysql concat group_concat functions with examples
Този урок обяснява как да използвате MySQL CONCAT с функции Select и GROUP_CONCAT със синтаксис и практически примери:
CONCAT е функция String, поддържана от MySQL за комбиниране или присъединяване на два или повече низа заедно и връщане като единична стойност. Името CONCAT идва от глагола concatenation, което означава обединяване на 2 или повече обекта заедно.
В този урок ще научим използването на CONCAT с примери за заявки и други варианти на функцията CONCAT, предоставени от MySQL.
Какво ще научите:
Функция MySQL CONCAT
Синтаксис:
Синтаксисът на функцията CONCAT е ясен. Той просто съдържа разделен със запетая списък на низовете, които трябва да бъдат обединени.
CONCAT(string1, string2, ------ stringN)
И двата типа вход и изход, които се очакват от функцията CONCAT, са Strings. Дори ако е снабден с числа, крайният изход ще бъде String.
Например:
# 1) С типове вход като String.
SELECT CONCAT('string1', 'string2'); //Output string1string2
# две) С въвеждане като числа / числа с плаваща запетая.
SELECT CONCAT(1,2); //Output 12 SELECT CONCAT(1.1234,2); //Output 1.12342
Използване на CONCAT с инструкции SELECT
CONCAT се използва най-широко заедно със заявките SELECT, където може да комбинира данни от 2 или повече колони в една колона.
Класически пример може да бъде, да предположим, че имаме таблица, която има отделни колони за полета firstName и lastName. Така че, докато показвате данни, да предположим, че това е желанието да се покаже Пълното име вместо собствено и фамилно име. Можем да използваме CONCAT и да показваме съответно избраните данни.
Нека да видим това в действие.
как е Linux по-добър от windows
Първо създайте ученическа таблица с полета - идентификатор, име, фамилия, възраст, дата на раждане и отдел.
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 заявка, за да получите пълно име като обединен низ, съчетаващ име и фамилия.
SELECT CONCAT(fname,lname) as fullName from student
// Изход
пълно име |
---|
Дарън Все още |
АбхишекКумар |
AmitSingh |
Стивън Джонсън |
KartikShamungam |
Както можете да видите в горния изход, няма интервал между собствено и фамилно име, което го прави нечетлив. Можем да добавим интервал, като актуализираме функцията CONCAT, за да имаме допълнителен интервал като символен низ, който да бъде обединен.
SELECT CONCAT(fname, ' ', lname) as fullName from student
Това би гарантирало, че с всеки запис ще имате допълнително разстояние между тях.
Използване на CONCAT с GROUP
MySQL предоставя друга функция, наречена GROUP_CONCAT.
Подобно е на CONCAT, но се различава по начина, по който CONCAT се използва за комбиниране на стойности в колони, докато функцията GROUP_CONCAT се използва най-вече за обединяване на стойности в редове.
Синтаксис на 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;
И така, във функцията GROUP_CONCAT можете да видите:
- col_name: Това е колоната, с която искате да се свържете. Има незадължителна клауза DISTINCT, за да се избегнат повтарящи се стойности.
- ПОДРЕДЕНИ ПО: Клаузата ORDER BY се използва за задаване на реда в конкатенирания списък и не е задължителна.
- СЕПАРАТОР: Това отново е незадължителна клауза, която може да се използва за дефиниране на персонализиран разделител между обединените стойности. По подразбиране разделителят е запетая (,).
Примери за MySQL GROUP_CONCAT
Да предположим, че в горния пример на таблицата на студентите искаме разберете списък на обединените отдели .
SELECT GROUP_CONCAT(department) as departments FROM student //Output ENGINEERING,ACCOUNTING,ENGINEERING,HUMAN RESOURCES,TRAINEE
В горната заявка,
- Резултатът съдържа списък, разделен със запетая, на всички отдели, които са налични в колоната на отдела.
- Също така има повтарящи се стойности ( Например, ENGINEERING), тъй като не сме посочили клауза DISTINCT.
Нека опитаме същия пример с клаузата DISTINCT:
SELECT GROUP_CONCAT(DISTINCT department) as departments FROM student //Output ACCOUNTING,ENGINEERING,HUMAN RESOURCES,TRAINEE
Това просто би върнало различните стойности на колоната на отдела.
Сега добавете персонализиран разделител като ‘|’ и клауза ORDER BY, за да сортирате имената на отделите във възходящ ред
SELECT GROUP_CONCAT(DISTINCT department separator ' | ') as departments FROM student //Output ACCOUNTING | ENGINEERING | HUMAN RESOURCES | TRAINEE
И така, в горната заявка,
- Имената на отделите са сортирани във възходящ ред.
- Не се връщат повтарящи се стойности.
- Разделителят се променя от ‘,’ на ‘| ‘.
Да видим друг пример за изброяване на обединените стойности на студентите във всеки отдел.
Тук не бихме искали като DISTINCT, тъй като 2 студенти в отдел може да имат същото име.
SELECT department, GROUP_CONCAT(fname ORDER BY fname ASC SEPARATOR ' | ') AS students FROM student GROUP BY department
// Изход
отдел | ученици |
---|---|
СЧЕТОВОДСТВО | Абхишек |
ИНЖЕНЕРСТВО | Amit | Дарън |
ЧОВЕШКИ РЕСУРСИ | Стивън |
ОБУЧАВАЩ | Картик |
Комбиниране на CONCAT и GROUP_CONCAT
В горния пример, да предположим, че искаме да покажем КОНЦАТЕНИРАНИТЕ стойности на име и фамилия заедно с всеки отдел.
За да постигнем това, можем да използваме CONCAT в рамките на командата GROUP_CONCAT.
Нека да видим това в действие по-долу:
SELECT department, GROUP_CONCAT(CONCAT(fname, ' ', lname) order by fname asc SEPARATOR ' | ') as students from student group by department
// Изход
отдел | ученици |
---|---|
СЧЕТОВОДСТВО | Абхишек кумар |
ИНЖЕНЕРСТВО | Амит Сингх | Дарън Стил |
ЧОВЕШКИ РЕСУРСИ | Стивън Джонсън |
ОБУЧАВАЩ | Картик шамунгам |
Обработка на NULL стойности с CONCAT
CONCAT очаква аргументи String и връща изхода като String.
Ако някой вход за функцията CONCAT е NULL, тогава изходът също ще бъде NULL.
SELECT CONCAT('string1','string2', NULL); //Output NULL
За да обработвате NULL стойности, можете да използвате оператор ifNull във функцията CONCAT, който би осигурил стойност по подразбиране или празна стойност в случай на стойност NULL от колоната.
Да предположим, че имаме 2 низа и 1 NULL стойност за CONCAT, като горния пример.
SELECT CONCAT('string1','string2', ifNull(NULL,'hello')); //Output string1string2hello
В горната заявка сме добавили функция ifNull, заобикаляща NULL стойността (или колона, която може да бъде NULL) - ако NULL съвпадението е успешно, тогава ще се върне ‘hello’ else действителната стойност на колоната.
Така че в изхода можете да видите за NULL низ, отпечатва се „здравей“.
често задавани въпроси
В # 1) Как да обединя колони в MySQL?
Отговор: MySQL осигурява функция CONCAT за комбиниране или обединяване на 2 или повече колони от една или повече таблици и връщане на обединените стойности в изхода.
В # 2) Къде и кога трябва да използвам метода concat в MySQL?
Отговор: Методът CONCAT обикновено се използва срещу показването на резултатите от заявката, когато искате да присъедините 2 или повече колони и да ги представите като една колона.
Например, да предположим, че имате таблица, която съдържа собственото име и фамилията като отделни колони и искате да ги покажете като един обект, наречен fullName - тогава можете да използвате функцията CONCAT, за да обедините стойностите на колоната за собствено и фамилно име и да ги покажете заедно като една колона.
В # 3) Какво е MySQL GROUP_CONCAT?
Отговор: Подобно на CONCAT, MySQL GROUP_CONCAT също се използва за обединяване на стойности в таблица. Разликата тук е, докато CONCAT се използва за комбиниране на стойности в колони, GROUP_CONCAT ви дава възможност да комбинирате стойности в редове.
Също така е важно да се отбележи, че както GROUP_CONCAT, така и CONCAT могат да се комбинират, за да се върнат желаните резултати.
GROUP_CONCAT се използва обикновено в сценарии, в които бихте искали да ГРУПИРАТЕ или да комбинирате стойности в редове. Например - имате продуктова таблица с име и категория на продукта и искате да посочите всички продукти спрямо дадена категория като стойности, разделени със запетая - тогава можете да използвате GROUP_CONCAT.
Запитване:
SELECT categoryName, GROUP_CONCAT(itemName) AS itemList FROM products GROUP BY categoryName
В # 4) Как мога да посоча разделител с помощта на командата CONCAT?
Отговор: С CONCAT можете да посочите разделителя като отделен низ, който да бъде обединен.
Например: Да предположим, че искате да използвате ‘|’ като разделител, след това в командата CONCAT можете да посочите този низ между имената на колоните, които обединявате.
SELECT CONCAT(fname, '| ', lname) as fullName from student
В # 5) Каква е разликата между командите CONCAT и CONCAT_WS?
Отговор: CONCAT_WS е друг вариант на CONCAT, предоставен от MySQL, който позволява на потребителя да посочи разделител за колоните, които се свързват.
Това се предпочита пред CONCAT в ситуации, в които искате да обедините по-голям брой колони и да използвате един и същ разделител за всички колони, които са свързани.
Пример: Да предположим, че има ученик на таблица с полета - fname, lname и адрес.
Сега искаме да обединим всички тези три полета и да ги отделим с ‘|’.
Използвайки КОНКАТ , трябва да посочим разделителя като отделен низ, който да бъде обединен.
SELECT CONCAT(fname, '|', lname, '|', address) as mergedColumn from student
Докато с CONCAT_WS просто ще трябва да посочите разделителя веднъж.
SELECT CONCAT_WS('|', fname, lname, address) as mergedColumn from student
Заключение
В този урок научихме за функцията MySQL CONCAT и нейното използване. Тази функция обикновено е много полезна при показване на резултати от заявки за обединяване на стойности спрямо различни колони.
Също така научихме за 2 различни вариации на функцията CONCAT - едната е конкатенация с разделител с помощта на CONCAT_WS, а друга конкатенация на стойности на редове с помощта на функцията MySQL GROUP_CONCAT.
Препоръчително четене
- Урок за присъединяване на MySQL: Вътрешен, Външен, Кръстосан, Ляв, Десен и Аз
- MySQL UNION - изчерпателен урок с примери за съюз
- Функции за формат на дата и клеймо на MySQL с примери
- MySQL Вмъкване в таблица - Вмъкване на изявление Синтаксис и примери
- Урок за изявление за актуализация на MySQL - Синтаксис и примери за актуализиране на заявки
- MySQL Урок за създаване на изглед с примери за кодове
- Урок за функции / методи на C # с примери за кодове