Как вы можете использовать IS [NOT] DISTINCT FROM
Пересказ статьи Chad Callihan. How You Can Use IS [NOT] DISTINCT FROM
Недавно я поигрался с одной функцией, введенной в SQL Server 2022 - IS [NOT] DISTINCT FROM. Эта новая функция может помочь в случае, когда приходится сравнивать NULL-значения.
Сравнение NULL-значения с другим значением будет возвращать NULL. Это подобно умножению чего-нибудь на 0. IS [NOT] DISTINCT FROM гарантирует получение true или false в предположении, что NULL есть "что-то".
Давайте посмотрим [NOT] DISTINCT FROM в действии на примере.
Что на самом деле подсчитывается
Мы будет использовать для этого примера базу данных StackOverflow2013. Давайте начнем с рассмотрения числа пользователей в таблице Users:
SELECT COUNT(*) FROM Users;
GO
Мы имеем 2465713 записей в таблице Users.
Имея это в виду, что если мы захотим выяснить, сколько из них проживает в Огайо? Мы можем достаточно просто найти пользователей из Огайо:
SELECT COUNT(*) FROM Users
WHERE Location = 'Ohio';
GO
Мы имеем только 648 записей с Огайо. Но здесь все может оказаться сложнее. Если мы сделаем небольшое изменение в этом запросе, чтобы найти пользователей, проживающих НЕ в Огайо, то получим следующее:
SELECT COUNT(*) FROM Users
WHERE Location != 'Ohio';
GO
588858 не в Огайо вместе с 648 из Огайо оказывается значительно меньше общего числа 2465713. Что происходит? Разница обусловлена неучтенными NULL-значениями. Давайте использовать IS DISTINCT FROM и IS NOT DISTINCT FROM, и посмотрим различия.
Примеры IS [NOT] DISTINCT FROM
Сначала мы поищем пользователей, у которых место нахождения не отличается от Огайо, и увидим не же 648 записей, что и ранее:
SELECT COUNT(*) FROM Users
WHERE LOCATION IS NOT DISTINCT FROM 'Ohio';
GO
Если мы поищем пользователей, чье местонахождение ОТЛИЧАЕТСЯ ОТ Огайо, мы увидим значение, превышающее то, которое мы получали ранее:
SELECT COUNT(*) FROM Users
WHERE LOCATION IS DISTINCT FROM 'Ohio';
GO
Это не обязательно правильно или неправильно; это зависит от того, что вы хотели получить.
Полезно?
Функция IS [NOT] DISTINCT FROM в SQL Server 2022 предоставляет дополнительную гибкость при обработке NULL-значений. Имейте это в виду, когда вы будете иметь дело с NULL-значениями.
Ссылки по теме
1. Крутая штука в SQL Server
2022 – IS DISTINCT FROM
2. Изменения языка T-SQL в SQL Server 2022: часть 2
3. Изменения языка T-SQL в SQL Server 2022: часть 3
Обратные ссылки
Автор не разрешил комментировать эту запись
Комментарии
Показывать комментарии Как список | Древовидной структурой