Как использовать функцию COALESCE в SQL Server

Вы когда-нибудь сталкивались с ситуацией, когда вам нужно обрабатывать значения NULL в ваших запросах? Например, вы можете захотеть отобразить значение по умолчанию, когда столбец имеет значение NULL, или объединить несколько столбцов в один и выбрать первое значение, отличное от NULL. В этом сообщении блога мы покажем вам, как использовать функцию COALESCE в SQL Server для выполнения этих и других задач.

Что такое функция ОБЪЕДИНЕНИЕ?

Функция COALESCE — это встроенная функция SQL Server, которая вычисляет список выражений и возвращает первое из них, не равное NULL. Если все выражения имеют значение NULL, функция возвращает значение NULL.

Синтаксис функции ОБЪЕДИНЕНИЕ:

COALESCE (expression1, expression2, ..., expressionN)

Выражения могут быть любого типа, но они должны быть совместимы друг с другом. Тип данных результата определяется выражением с наивысшим приоритетом.

Как использовать функцию ОБЪЕДИНЕНИЕ

Давайте посмотрим на несколько примеров использования функции COALESCE в SQL Server.

Пример 1. Отображение значения по умолчанию, когда столбец имеет значение NULL.

Предположим, у нас есть таблица с именем Products, в которой хранится информация о некоторых продуктах, например, их название, цена и категория. Некоторым продуктам не назначена категория, поэтому столбец Category для них равен NULL.

Если мы хотим отобразить продукты с их категориями, но заменяем значения NULL значением по умолчанию, таким как «Неизвестно», мы можем использовать функцию COALESCE следующим образом:

SELECT Name, Price, COALESCE(Category, 'Unknown') AS Category
FROM Products;

Результат:

Как видите, функция COALESCE возвращает значение Category, если оно не равно NULL, в противном случае она возвращает «Неизвестно».

Пример 2. Объединение нескольких столбцов в один и выбор первого значения, отличного от NULL.

Предположим, у нас есть другая таблица с именем Contacts, в которой хранится информация о некоторых контактах, такая как их имя, электронная почта, телефон и адрес. У некоторых контактов не все эти данные заполнены, поэтому некоторые столбцы для них пусты.

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

SELECT Name, COALESCE(Email, Phone, Address) AS PreferredContact
FROM Contacts;

Результат:

Как видите, функция COALESCE возвращает первое значение, отличное от NULL, среди адресов электронной почты, телефонов и адресов для каждого контакта.

Как справиться с этим по-старому и что дает COALESCE

До того, как функция COALESCE была введена в SQL Server, нам приходилось использовать другие методы для обработки значений NULL в наших запросах. Например, мы могли бы использовать функцию ISNULL или выражение CASE.

Функция ISNULL принимает два аргумента и возвращает первый, если он не равен NULL, иначе возвращает второй. Например:

SELECT Name, ISNULL(Category, 'Unknown') AS Category
FROM Products;

Этот запрос дает тот же результат, что и использование COALESCE с двумя аргументами. Однако между ISNULL и COALESCE есть некоторые различия:

  • ISNULL принимает только два аргумента, а COALESCE может принимать любое количество аргументов.
  • ISNULL использует тип данных первого аргумента для результата, в то время как COALESCE следует правилам выражения CASE и возвращает тип данных значения с наивысшим приоритетом.
  • ISNULL оценивается только один раз, а COALESCE может оцениваться несколько раз. Это может повлиять на производительность и согласованность результатов, особенно при использовании подзапросов или недетерминированных функций.

Выражение CASE — это условное выражение, которое позволяет нам выполнять разные действия на основе разных условий. Например:

SELECT Name, CASE WHEN Category IS NOT NULL THEN Category ELSE 'Unknown' END AS Category
FROM Products;w

Этот запрос дает тот же результат, что и использование COALESCE с двумя аргументами. Однако между CASE и COALESCE есть некоторые различия:

  • CASE более многословен и сложен, чем COALESCE, особенно при работе с несколькими выражениями.
  • CASE может обрабатывать более сложную логику и условия, чем COALESCE, который проверяет только значения NULL.
  • CASE и COALESCE могут по-разному влиять на производительность в зависимости от оптимизатора запросов и плана выполнения.

Как видите, функция COALESCE обеспечивает более простой и последовательный способ обработки значений NULL в SQL Server. Кроме того, она более гибкая и совместимая, чем функция ISNULL или выражение CASE.

Заключение

В этом сообщении блога мы узнали, как использовать функцию COALESCE в SQL Server для обработки значений NULL в наших запросах. Мы видели несколько примеров того, как отображать значение по умолчанию, когда столбец имеет значение NULL, или объединять несколько столбцов в один и выбирать первое значение, отличное от NULL. Мы также сравнили функцию COALESCE с другими методами, такими как ISNULL и CASE, и обсудили их преимущества и недостатки.