Как использовать функцию 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, и обсудили их преимущества и недостатки.