mysql concat group_concat functions with examples
Цей підручник пояснює, як використовувати MySQL CONCAT із функціями Select та GROUP_CONCAT із синтаксисом та практичні приклади:
CONCAT - це функція рядка, що підтримується MySQL, щоб поєднувати або приєднувати два або більше рядків разом і повертати як одне значення. Назва CONCAT походить від дієслова конкатенація, що означає об'єднання 2 або більше сутностей.
У цьому посібнику ми вивчимо використання CONCAT із прикладами запитів та іншими варіантами функції CONCAT, що надаються MySQL.
Що ви дізнаєтесь:
Функція MySQL CONCAT
Синтаксис:
Синтаксис функції CONCAT є простим. Він просто містить розділений комами список рядків, які потрібно об’єднати.
CONCAT(string1, string2, ------ stringN)
Типи вхідних та вихідних даних, які очікує функція CONCAT, є рядками. Навіть якщо він містить цифри, кінцевим результатом буде String.
Наприклад:
# 1) З типами введення як рядки.
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 і відповідно відображати вибрані дані.
Подивимось це на ділі.
найкращий безкоштовний завантажувач відео Windows 10
Спочатку створіть таблицю студентів із полями - ідентифікатор, ім’я, прізвище, вік, дата народження та відділ.
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
// Вихідні дані
повне ім'я |
---|
DarrenStill |
АбхішекКумар |
AmitSingh |
Стівен Джонсон |
КартікШамунгам |
Як ви можете бачити у наведеному вище результаті, між іменем та прізвищем немає інтервалу, що робить його нечитабельним. Ми можемо додати інтервал, оновивши функцію CONCAT, щоб мати зайвий пробіл як рядок, який слід об’єднати.
SELECT CONCAT(fname, ' ', lname) as fullName from student
Це гарантувало б, що з кожним записом у вас буде додатковий інтервал між ними.
Використання CONCAT з групою
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
Отже, у наведеному вище запиті,
- Назви відділів сортуються за зростанням.
- Повторювані значення не повертаються.
- Розділювач змінено з ',' на '| ‘.
Подивимось ще один приклад для переліку об’єднаних значень студентів у кожному відділі.
Тут ми не хотіли б, щоб ДІСТІНКТ, оскільки 2 студенти на кафедрі могли б мати однакову назву.
SELECT department, GROUP_CONCAT(fname ORDER BY fname ASC SEPARATOR ' | ') AS students FROM student GROUP BY department
// Вихідні дані
кафедра | студентів |
---|---|
ОБЛІК | Абхішек |
ІНЖЕНЕРІНГ | Аміт | Даррен |
ЛЮДСЬКІ РЕСУРСИ | Стівен |
УЧАСНИК | Картик |
Поєднання 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 буде успішним, тоді він поверне ‘привіт’ інакше фактичне значення стовпця.
Отже, на виході ви можете бачити, що для рядка NULL надруковано слово «привіт».
Часті запитання
Q # 1) Як об'єднати стовпці в MySQL?
Відповідь: MySQL надає функцію CONCAT для об'єднання або об'єднання 2 або більше стовпців з однієї або декількох таблиць і повернення об'єднаних значень у вихідні дані.
Q # 2) Де і коли мені потрібно використовувати метод concat у MySQL?
Відповідь: Метод CONCAT зазвичай використовується проти відображення результатів запиту, де ви хочете об'єднати 2 або більше стовпців і представити їх як один стовпець.
Наприклад, припустимо, у вас є таблиця, яка містить ім’я та прізвище як окремі стовпці, і ви хочете відобразити їх як єдину сутність, що називається fullName - тоді ви можете використовувати функцію CONCAT для злиття значень стовпця імені та прізвища та відображення їх разом як єдиний стовпець.
Q # 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
Q # 4) Як я можу вказати роздільник за допомогою команди CONCAT?
Відповідь: За допомогою CONCAT ви можете вказати роздільник як окремий рядок для об'єднання.
Наприклад: Припустимо, ви хочете використовувати ‘|’ як роздільник, тоді в команді CONCAT ви можете вказати цей рядок між іменами стовпців, які ви об’єднуєте.
SELECT CONCAT(fname, '| ', lname) as fullName from student
Q # 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 JOIN: Внутрішній, Зовнішній, Хрестовий, Лівий, Правий та Я
- MySQL UNION - Всебічний посібник із прикладами Union
- Функції формату дати та позначки часу MySQL із прикладами
- MySQL Insert Into Table - Вставте синтаксис заяви та приклади
- Підручник із заяв на оновлення MySQL - Синтаксис та приклади оновлення запитів
- Підручник із створення перегляду MySQL із прикладами коду
- Підручник з функцій / методів C # із прикладами коду