Оператор конкатенации строк в MySQL: vend_name и vend_country

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Функция CONCAT() в MySQL предназначена для склеивания строк:

SQL
Скопировать код
SELECT CONCAT('Привет', ', ', 'Мир!') AS приветствие;

Результатом будет "Привет, Мир!".

Если одно из значений является NULL, то в итоге результат конкатенации также будет NULL. В таких случаях воспользуйтесь функцией CONCAT_WS(), которая игнорирует NULL и одновременно применяет разделитель:

SQL
Скопировать код
SELECT CONCAT_WS('-', '2023', NULL, '01') AS формат_даты;

На выходе получаем "2023-01", где NULL не оставил за собой следов.

Кинга Идем в IT: пошаговый план для смены профессии

Искусство использования конкатенации в MySQL: подробный анализ

Когда вертикальная черта — что-то большее: установка sql_mode

Во многих вариациях SQL для конкатенации применяется оператор ||, в то время как в MySQL он интерпретируется как логическое OR. Для изменения этого поведения можно активировать режим SQL PIPES_AS_CONCAT:

SQL
Скопировать код
SET sql_mode='PIPES_AS_CONCAT';
SELECT 'MySQL' || ' ' || 'Круто!' AS бодрящее_сообщение;

Таким образом, MySQL начнёт поддерживать стандарт ANSI, в котором || используется для конкатенации строк.

Конкатенация различных типов данных

Функция CONCAT() способна работать с разными типами данных, автоматически приводя их к строковому виду:

SQL
Скопировать код
SELECT CONCAT('Цена: $', CAST(100 AS CHAR));

Здесь число 100 будет преобразовано в строку '100', после чего мы получим конкатенированный результат: 'Цена: $100'. Представьте, как если бы вы были продавцом со своими ценниками!

Обработка NULL в вашей конкатенации

CONCAT() трактует NULL как абсолютное отсутствие значения, в результате тоже возвращая NULL. Однако CONCAT_WS() более толерантна и просто пропускает NULL:

SQL
Скопировать код
SELECT CONCAT_WS(' ', 'Первое', NULL, 'Последнее');

Результатом будет 'Первое Последнее' без малейшего упоминания NULL.

Максимизация производительности

Правильное использование CONCAT() может значительно ускорить ваш SQL-запрос. Однако, его чрезмерное применение в циклах или в больших запросах может замедлить выполнение. Будьте внимательны.

Визуализация

Можно представить "конкатенацию строк" в MySQL в виде поезда, где вагоны (аля строки 「🚃」) соединены между собой оператором конкатенации || или функцией CONCAT() (являющеся своего рода сцепками 「🔗」):

Строка 1
「🚃」
Оператор
「🔗」
Строка 2
「🚃」
Итог
「🚃🔗🚃」

А на выходе получаем более длинный поезд:

SQL
Скопировать код
SELECT 'Поезд' || 'Вагон';  // Вперед, присоединяйтесь к "ПоездВагон"!
SQL
Скопировать код
SELECT CONCAT('Поезд', 'Вагон'); // Нереальное транспортное средство, но интересное сочетание!

Назначение удобного псевдонима: станьте супергероем SQL

Назначение псевдонима результату функции CONCAT() облегчает чтение и отладку SQL-запросов:

SQL
Скопировать код
SELECT CONCAT(firstName, ' ', lastName) AS полноеИмя FROM users;

Здесь мы, фактически, указываем, что полноеИмя – это результат склеивания firstName и lastName.

Переходы между диалектами SQL: помните об отличиях

Работа с различными SQL-системами может приносить сюрпризы из-за отличий в синтаксисе. Например, MS SQL Server отвергает использание || для конкатенации и предпочитает оператор +, как будто это математическое выражение. Поэтому, всегда помните о специфике синтаксиса используемой вами SQL-системы!

Полезные материалы

  1. MySQL :: Руководство по ссылке MySQL 8.0 :: 14.8 Функции и операторы строк – подробная информация о функции CONCAT() в MySQL.
  2. MySQL :: Руководство по ссылке MySQL 8.0 :: 14.4.1 Приоритет операторов – материалы о приоритете операторов при работе со строками.
  3. MySQL :: Руководство по ссылке MySQL 8.0 :: 7.1.11 Режимы SQL сервера – все о режимах SQL в MySQL и о том, как «палочки» становятся инструментом конкатенации.
  4. CONCAT – База знаний MariaDB – сравните подход к конкатенации в MySQL и стандартный SQL-синтаксис MariaDB.