Skip to content

Как вы можете использовать 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
Категории: T-SQL

Обратные ссылки

Нет обратных ссылок

Комментарии

Показывать комментарии Как список | Древовидной структурой

Нет комментариев.

Автор не разрешил комментировать эту запись

Добавить комментарий

Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA

Form options

Добавленные комментарии должны будут пройти модерацию прежде, чем будут показаны.