Справочник от Автор24
Найди эксперта для помощи в учебе
Найти эксперта
+2

Конкатенация в SQL-запросах

Виды конкатенации

Определение 1

Конкатенацией называется операция, которая позволяет соединить несколько текстовых строк в одну.

В работе с базами данных конкатенация используется, когда нужно соединить значения нескольких полей или присоединить к значениям полей текст.

В SQL используется три вида конкатенации:

  • Простая конкатенация;
  • Конкатенация с разделителем;
  • Групповая конктенация.

В различных "диалектах" языка SQL функции, реализующие конкатенацию, несколько различаются своим синтаксисом. Но принципы их работы одинаковы. Эти принципы будут рассмотрены на примере функций СУБД MySQL.

Простая конкатенация

Простая конкатенация в СУБД MySQL выполняется с помощью встроенной функции CONCAT() имеющей следующий синтаксис:

CONCAT(строка1, строка2, ……строкаN)

Строки, являющиеся аргументами функции, могут быть именами полей, а могут быть текстовыми строками в кавычках.

Пример 1

В качестве примера рассмотрим запрос:

SELECT concat("Абитуриент ", fio, " возрастом ", age, " рекомендован(a) к зачислению") as text1 FROM abiturient;

Результатом запроса будет собранный из кусочков текст:

Конкатенация с разделителем

Этот вид конкатенации в MySQL выполняется с помощью функции CONCAT_WS(), имеющей следующий синтаксис:

CONCAT_WS(‘символ_разделитель’, строка1, строка2…)

В этом случае между соединяемыми строками будет установлен символ-разделитель.

Пример 2

Например, в данном запросе в качестве разделителя используется запятая:

SELECT concat_ws(',', fio,age,gender) as text1 FROM abiturient;

Результат:

Если в качестве разделителя использовать пустую строку, то результат будет полностью совпадать с результатом простой конкатенации. Если разделителем должен быть символ кавычки ', то его нужно экранировать обратным слешем – '\''.

«Конкатенация в SQL-запросах» 👇
Помощь эксперта по теме работы
Найти эксперта
Решение задач от ИИ за 2 минуты
Решить задачу
Найди решение своей задачи среди 1 000 000 ответов
Найти
Пример 3

SELECT concat_ws('\'', fio,age,gender) as text1 FROM abiturient;

Групповая конкатенация

Пусть даны две таблицы. В одной хранятся личные данные абитурентов, а в другой – поданные заявления. Считается, что каждый абитуриент может подать несколько заявлений на разные специальности. Тогда, чтобы увидеть список абитуриентов и список специальностей, на которые они подали заявления, нужно построить следующий запрос:

SELECT abiturient.idabiturient, abiturient.fio, application.namespec FROM abiturient JOIN application ON abiturient.idabiturient=application.idabiturient;

Результат запроса будет таким:

Теперь усложним задачу. Пусть необходимо собрать специальности по каждому абитуриенту в группу и записать их через запятую. То есть в результате должна получиться такая таблица:

Записанные через запятую названия специальностей, относящиеся к данному абитуриенту, - это и есть результат групповой конкатенации.

Для выполнения групповой конкатенации в MySQL используется инструкция GROUP BY и функция GROUP_CONCAT ().

GROUP_CONCAT([DISTINCT] строка1, строка2,.. [ORDER BY имя_поля или выражение [ASC | DESC]] [SEPARATOR 'символ_разделитель'])

Необязательная инструкция DISTINCT позволяет удалить из списка совпадающие строки. Инструкция ORDER BY позволяет упорядочить строки по какому-либо полю или выражению. Упорядочивание по возрастанию определяется инструкцией ASC, по убыванию –DESC. Инструкция SEPARATOR позволяет задать символ, который будет разделять строки. По умолчанию разделителем является запятая.

Все запросы с групповой конкатенацией являются запросами группового типа. Функция GROUP_CONCAT() может быть отнесена к групповым операциям наряду с COUNT(), SUM(),MIN(),MAX(), AVG().

Пример 4

Таким образом, для получения списка специальностей по каждому абитуриенту нужно выполнить следующий запрос:

SELECT abiturient.idabiturient, abiturient.fio, group_concat(application.namespec ORDER BY namespec separator ', ') as spec FROM abiturient JOIN application ON abiturient.idabiturient=application.idabiturient GROUP BY abiturient.idabiturient;

Дата написания статьи: 10.08.2016
Найди решение своей задачи среди 1 000 000 ответов
Крупнейшая русскоязычная библиотека студенческих решенных задач
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot