Как найти null в sql
Перейти к содержимому

Как найти null в sql

  • автор:

IS NULL (Transact-SQL)

Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.

Аргументы

выражение
Любое допустимое выражение expression.

Логическое НЕ
Задает отрицание логического результата. Предикат меняет возвращаемые выражением значения на обратные, возвращая TRUE, если значение не равно NULL и FALSE, если значение равно NULL.

Типы результата

Boolean

Значения кода возврата

Если значение expression равно NULL, IS NULL возвращает TRUE; в противном случае возвращается значение FALSE.

Если значение expression равно NULL, IS NOT NULL возвращает FALSE; в противном случае возвращается значение TRUE.

Замечания

Для определения, имеет ли выражение значение NULL, используйте IS NULL или IS NOT NULL вместо сравнения операторов (например = или !=). Сравнение операторов возвращает UNKNOWN, если хотя бы один аргумент или они оба равны NULL.

Примеры

В следующем примере возвращается наименование и вес всех продуктов, для которых вес меньше 10 фунтов, или неизвестен цвет, либо NULL .

USE AdventureWorks2022; GO SELECT Name, Weight, Color FROM Production.Product WHERE Weight < 10.00 OR Color IS NULL ORDER BY Name; GO 

Примеры: Azure Synapse Analytics и система платформы аналитики (PDW)

В следующем примере возвращаются полные имена всех сотрудников с инициалами отчества.

-- Uses AdventureWorks SELECT FirstName, LastName, MiddleName FROM DIMEmployee WHERE MiddleName IS NOT NULL ORDER BY LastName DESC; 

Как найти null в sql

В свете того, какой беспорядок может навести NULL , вы часто захотите узнать, является ли что-либо NULL прежде , чем вы будете использовать это в выражении. Для некоторых очевидная проверка должна выглядеть так:

И в самом деле, есть системы управления базами данных, которые поддерживают такой синтаксис проверки на NULL . Но стандарт SQL не допускает этого, не допускает этого и СУБД Firebird. В версиях до 2.0 такой синтаксис был даже недопустим. С версии 2.0 он разрешается, но сравнение всегда вернет NULL , независимо от состояния и значения A. Поэтому такой тест на NULL является бесполезным - нам нужен явный результат true или false .

Корректный способ проверки на NULL такой:

Эта проверка всегда вернет true или false - и никакой неразберихи. Примеры:

if (MyField is null) then.
select * from Pupils where PhoneNumber is not null
select * from Pupils where not (PhoneNumber is null) /* делает то же самое, что и предыдущий пример */
update Numbers set Total = A + B + C where A + B + C is not null

Можно сказать, что в то время как равенство « = » (когда используется как оператор равенства) может сравнивать значения, « is » проверяет состояние.

Firebird Documentation Index → NULL в СУБД Firebird → Проверка на NULL

Значение NULL в SQL – неизвестное значение

Примечание:
Во всех статьях текущей категории уроков по SQL используются примеры и задачи, основанные на учебной базе данных.

Приступая к изучению данного материала, рекомендуется ознакомиться с описанием учебной БД.

Даже для небольших баз данных часто встречаются ситуации, когда значение какого-либо поля таблицы может быть неизвестно. Причины возникновения подобных ситуаций могут быть разными, начиная ошибками ПО и проектирования БД, заканчивая особенностями бизнес-процессов организации.

Если рассмотреть диаграмму таблицы сотрудников учебной БД, то можно заметить, что последний столбец диаграммы указывает возможность наличия неизвестных значение в конкретном поле, а именно:

Диаграмма таблицы Сотрудники

  • Отчество. Вполне возможно, что сотрудником является гражданин страны, где не используется отчество.
  • Дата увольнения может отсутствовать, так как увольнения еще не было.
  • Группа может быть неизвестна, потому что сотрудник может быть не распределен в группу на каком-то из этапов приема на работу.

Важно понять, что неизвестные (отсутствующие) значения – это не ноль (для числовых полей) и не пустая строка (для текстовых полей). Так как ноль является вполне конкретным значением, например, 0 рублей задолженности, а пустая строка сообщает о том, что на данный момент ничего кроме строки нулевой длины в поле строки быть не должно. В примере с отчеством, приведенном выше, вместо значения NULL можно задать пустую строку и это внесло бы дополнительную ясность, что отчество сотрудника нет в принципе, а не то, что его забыли внести.

Поиск отсутствующих значений

Выше было определено, что NULL не является конкретным значением, поэтому нужно понять, как операторы сравнения с ним будут работать. Никакое значение не может быть равно (также быть больше или меньше) неизвестному значению, даже условие NULL = NULL является ложным. Чтобы определить отсутствующее значения используется специальное условие IS NULL (является неизвестным). И наоборот, если требуется найти известные значения, то задается условие IS NOT NULL.

Рассмотрим задачу.
Найти всех сотрудников, которые были когда-либо уволены.

Решение.
Если в поле «Дата_увольнения» таблицы сотрудников отсутствует значение, то сотрудники работают на данный момент. Следовательно, нужно найти строки, где значение известно. Следующий sql-запрос выведет 7 строк, удовлетворяющих решению:

USE CallCenter SELECT * FROM Сотрудники WHERE Дата_увольнения IS NOT NULL

Решим еще одну задачу.
Вывести непринятые звонки за 1 декабря 2014 года.

Решение.
Звонок считается непринятым, если в таблице «Звонки» в поле «Сотрудник» отсутствует id принявшего звонок оператора. Отфильтровав таблицу по полям «Сотрудник» и «Дата_Время», получим 184 строки, удовлетворяющих запросу:

USE CallCenter SELECT * FROM Звонки WHERE Сотрудник IS NULL AND Дата_Время >= '01/12/2014 00:00:00' AND Дата_Время < '02/12/2014 00:00:00'

Обработка неизвестных значений

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

Рассмотрим пример.
Необходимо определить стаж работы каждого сотрудника, включая уволенных, на текущий момент. Стаж вывести в днях.

Для определения стажа необходимо найти интервал (разницу) между датой найма сотрудника и датой увольнения. Для этого можно использовать функцию DATEDIFF (ее описание можно найти в документации Microsoft). Но как быть с не уволенными сотрудниками, у которых отсутствует значение даты увольнения? Если выполнить ниже приведенный запрос, то можно убедиться, что большинство строк не покажут стаж:

USE CallCenter SELECT id, DATEDIFF(DAY, Дата_найма, Дата_увольнения) AS Стаж FROM Сотрудники

Поэтому обработаем поле «Дата_увольнения», применив функции ISNULL (если первый аргумент является NULL, то функция возвращает второй аргумент) и GETDATE (возвращает текущую системную дату и время). Следующий запрос выведет стаж в каждой строке:

USE CallCenter SELECT id, DATEDIFF(DAY, Дата_найма, ISNULL(Дата_увольнения, GETDATE())) AS Стаж FROM Сотрудники
  • Объединение таблиц – UNION
  • Соединение таблиц – операция JOIN и ее виды
  • Тест на знание основ SQL

Если материалы office-menu.ru Вам помогли, то поддержите, пожалуйста, проект, чтобы я мог развивать его дальше.

Поиск значений NULL (IS NULL)

Требуется найти все строки, имеющие в заданном столбце NULL (неопределенное) занчение.

Решение

Чтобы выяснить, является ли значение NULL, необходимо использовать оператор IS NULL.

select e.* from emp e where comm is null; 
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ---------- ---------- --- --------- --- ---- ------ 7369 SMITH CLERK 7902 17-DEC-80 800 20 7566 JONES MANAGER 7839 02-APR-81 2975 20 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 09-DEC-82 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7876 ADAMS CLERK 7788 12-JAN-83 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10 

Обсуждение

NULL никогда не бывает равен или не равен ни одному значению, даже самому себе, поэтому с момощью операторов = или != нельзя определить, равно ли значение NULL или не равно.Для проверки наличия в строке значения NULL должен использоваться оператор IS NULL.

Кроме того, с помощью оператора IS NOT NULL, можно выбрать строки, не содержащие NULL значения в заданном столбце.

Tags: Поиск значений NULL (IS NULL)

PL/SQL

tags: Администрирование Oracle DataBase || SQL & PL/SQL

Исходные коды проекта хранятся на github. Можете заводить Issue и Discussions, при необходимости.
Чтобы задать вопрос, добавить свои знания, исправить ошибки и неточности, пишите в телеграм чате.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *