Что такое not null в sql

Работа с NULL-значениями

NULL-значение

Достаточно часто встречаются такие случаи, когда в таблице имеются записи с не заданными значениями какого-либо из полей, потому что значение поля неизвестно или его просто нет. В таких случаях SQL позволяет указать в поле NULL-значение. Строго говоря, NULL-значение вовсе не представлено в поле. Когда значение поля есть NULL — это значит, что программа базы данных специальным образом помечает поле, как не содержащее какого-либо значения для данной строки (записи). Дело обстоит не так в случае простого приписывания полю значения «нуль» или «пробел», которые база данных трактует как любое другое значение. Поскольку NULL не является значением как таковым, он не имеет типа данных. NULL может размещаться в поле любого типа. Тем не менее, NULL, как NULL-значение, часто используется в SQL.
Предположим, появился покупатель, которому еще не назначен продавец. Чтобы констатировать этот факт, нужно ввести значение NULL в поле snum, а реальное значение включить туда позже, когда данному покупателю будет назначен продавец.

IS NULL

Поскольку NULL фиксирует пропущенные значения, результат любого сравнения при наличии NULL-значений неизвестен. Когда NULL-значение сравнивается с любым значением, даже с NULL-значением, результат просто неизвестен. Булево значение «неизвестно» ведет себя также, как «ложь» — строка, на которой предикат принимает значение «неизвестно», не включается в результат запроса – при одном важном исключении: NOT от лжи есть истина (NOT (false)=true), тогда как NOT от неизвестного значения есть также неизвестное значение. Следовательно, такое выражение как «city = NULL» или «city IN (NULL)» является неизвестным независимо от значения city.
Часто необходимо различать false и unknown – строки, содержащие значения столбца, не удовлетворяющие предикату, и строки, которые содержат NULL. Для этой цели SQL располагает специальным оператором IS, который используется с ключевым словом NULL для локализации NULL-значения.

SQL IS NULL. Пример.
Вывести все поля из талицы Customers, значения поля city которых равны NULL:

SELECT * FROM Customers WHERE city IS NULL

В данном случае выходных данных не будет, поскольку в поле city нет NULL-значений.

IS NOT NULL

Условие IS NOT NULL используется в запросах для выборки записей со значениями не равных значению NULL
SQL IS NOT NULL. Пример.
Вывести все поля из талицы Customers, значения поля city которых НЕ равны NULL:

SELECT * FROM Customers WHERE city IS NOT NULL

Источник

Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite

Базы данных

SQL условие IS NOT NULL

В этом учебном материале вы узнаете, как использовать SQL условие IS NOT NULL с синтаксисом и примерами.

Описание

Условие IS NOT NULL используется в SQL для проверки значения, отличного от NULL. Оно возвращает TRUE, если найдено ненулевое значение, в противном случае оно возвращает FALSE. Его можно использовать в операторе SELECT, INSERT, UPDATE или DELETE.

Синтаксис

Синтаксис для условия IS NOT NULL в SQL:

Параметры или аргументы

При проверке значения, отличного от NULL, IS NOT NULL является рекомендуемым оператором сравнения для использования в SQL. Давайте начнем с примера, который показывает, как использовать условие IS NOT NULL в SELECT предложении.

В этом примере у нас есть таблица products со следующими данными:

product_idproduct_namecategory_id
1Pear50
2Banana50
3Orange50
4Apple50
5Bread75
6Sliced Ham25
7KleenexNULL

Введите следующий SQL оператор:

Будет выбрано 6 записей. Вот результаты, которые вы должны получить:

product_idproduct_namecategory_id
1Pear50
2Banana50
3Orange50
4Apple50
5Bread75
6Sliced Ham25

Далее давайте рассмотрим пример использования условия IS NOT NULL в запросе UPDATE.

В этом примере у нас есть таблица customer со следующими данными:

customer_idfirst_namelast_namefavorite_website
4000JustinBiebergoogle.com
5000SelenaGomezbing.com
6000MilaKunisyahoo.com
7000TomCruiseoracle.com
8000JohnnyDeppNULL
9000RussellCrowegoogle.com

Введите следующий запрос UPDATE:

Будет обновлено 5 записей. Выберите данные из таблицы customer еще раз:

Вот результаты, которые вы должны получить:

customer_idfirst_namelast_namefavorite_website
4000JustinBiebergoogle.com
5000SelenaGomezgoogle.com
6000MilaKunisgoogle.com
7000TomCruisegoogle.com
8000JohnnyDeppNULL
9000RussellCrowegoogle.com

В этом примере будут обновлены все значения fav_website в таблице customer до google.com, где favourite_website содержит значение NULL. Как вы видите, значения поля favorite_website обновлены все строки кроме одной.

Далее давайте рассмотрим пример использования условия IS NULL в запросе DELETE.

В этом примере у нас есть таблица orders и следующими данными:

Источник

Заметка про NULL

Основные положения

Для удобства сделаем процедуру, печатающую состояние булевого параметра:

и включим опцию печати сообщений на консоль:

Привычные операторы сравнения пасуют перед NULLом:

Сравнение с NULLом

Соответственно, IS NOT NULL действует наоборот: вернёт истину, если значение операнда отлично от NULLа и ложь, если он является NULLом:

DECODE идёт против системы:

Пример с составными индексами находится в параграфе про индексы.

Логические операции и NULL

В большинстве случаев неизвестный результат обрабатывается как ЛОЖЬ :

Отрицание неизвестности даёт неизвестность:

Операторы IN и NOT IN

Для начала сделаем несколько предварительных действий. Для тестов создадим таблицу T с одним числовым столбцом A и четырьмя строками: 1, 2, 3 и NULL

Включим трассировку запроса (для этого надо обладать ролью PLUSTRACE ).
В листингах от трассировки оставлена только часть filter, чтобы показать, во что разворачиваются указанные в запросе условия.

Предварительные действия закончены, давайте теперь поработаем с операторами. Попробуем выбрать все записи, которые входят в набор (1, 2, NULL) :

Попробуем теперь с NOT IN :

Вообще ни одной записи! Давайте разберёмся, почему тройка не попала в результаты запроса. Посчитаем вручную фильтр, который применила СУБД, для случая A=3 :

Из-за особенностей трёхзначной логики NOT IN вообще не дружит с NULLами: как только NULL попал в условия отбора, данных не ждите.

NULL и пустая строка

Здесь Oracle отходит от стандарта ANSI SQL и провозглашает эквивалентность NULLа и пустой строки. Это, пожалуй, одна из наиболее спорных фич, которая время от времени рождает многостраничные обсуждения с переходом на личности, поливанием друг друга фекалиями и прочими непременными атрибутами жёстких споров. Судя по документации, Oracle и сам бы не прочь изменить эту ситуацию (там сказано, что хоть сейчас пустая строка и обрабатывается как NULL, в будущих релизах это может измениться), но на сегодняшний день под эту СУБД написано такое колоссальное количество кода, что взять и поменять поведение системы вряд ли реально. Тем более, говорить об этом они начали как минимум с седьмой версии СУБД (1992-1996 годы), а сейчас уже двенадцатая на подходе.

NULL и пустая строка эквивалентны:

непременный атрибут жёсткого спора:

Длина пустой строки не определена:

Сравнение с пустой строкой невозможно:

Критики подхода, предлагаемого Ораклом, говорят о том, что пустая строка не обязательно обозначает неизвестность. Например, менеджер по продажам заполняет карточку клиента. Он может указать его контактный телефон (555-123456), может указать, что он неизвестен (NULL), а может и указать, что контактный телефон отсутствует (пустая строка). С оракловым способом хранения пустых строк реализовать последний вариант будет проблемно. С точки зрения семантики довод правильный, но у меня на него всегда возникает вопрос, полного ответа на который я так и не получил: как менеджер введёт в поле «телефон» пустую строку и как он в дальнейшем отличит его от NULLа? Варианты, конечно, есть, но всё-таки…

Вообще-то, если говорить про PL/SQL, то где-то глубоко внутри его движка пустая строка и NULL различаются. Один из способов увидеть это связан с тем, что ассоциативные коллекции позволяют сохранить элемент с индексом » (пустая строка), но не позволяют сохранить элемент с индексом NULL:

Использовать такие финты ушами на практике не стоит. Во избежание проблем лучше усвоить правило из доки: пустая строка и NULL в оракле неразличимы.

Математика NULLа

Этот маленький абзац писался пятничным вечером под пиво, на фоне пятничного РЕН-ТВшного фильма. Переписывать его лень, уж извините.

Очевидно, что мы ничем не сможем помочь Коле: неизвестное количество любовников Маши до замужества сводит все расчёты к одному значению — неизвестно. Oracle, хоть и назвался оракулом, в этом вопросе уходит не дальше, чем участники битвы экстрасенсов: он даёт очевидные ответы только на очевидные вопросы. Хотя, надо признать, что Oracle гораздо честнее: в случае с Колей он не будет заниматься психоанализом и сразу скажет: «я не знаю»:

С конкатенацией дела обстоят по другому: вы можете добавить NULL к строке и это её не изменит. Такая вот политика двойных стандартов.

NULL и агрегатные функции

Таблица с данными. Используется ниже много раз:

Пустые значения игнорируются агрегатами:

Набор данных только из NULLов:

Пустой набор данных:

NULL в OLAP

Удобная фишка sqlplus: при выводе данных заменяет NULL на указанную строку:

Проверяем дуализм NULLа в многомерном кубе:

Источник

Значение NULL: руководство для начинающих

Если вы далеки от работы с базами данных, для вас может быть открытием, что ноль – это не значение NULL, хотя, признаем, они созвучны. Кроме того, NULL не является значением пустой строки, хотя можно найти поле, содержащее данные любого типа.

NULL можно представить как значение для представления неизвестного фрагмента данных (обратите внимание: не нулевого, хотя поле при этом выглядит пустым). А еще он не равен ничему, даже другому NULL. И сегодня мы поговорим об этом загадочном (на первый взгляд) значении NULL более подробно.

Пример значения NULL

Итак, что вы должны знать о значении NULL? Давайте разбираться.

Представьте себе письменный стол, на котором лежат канцелярские принадлежности: 6 шариковых ручек и 2 простых карандаша. Также известно, что в ящике стола должны быть фломастеры. Но вот сколько их и есть ли они вообще — данных нет. Если нам нужно составить таблицу инвентаризации с вводом значения NULL, то выглядеть она будет так:

InventoryIDItemКоличество
1ручки6
2карандаши2
3фломастерыNULL

Как вы понимаете, принимать за «0» количество фломастеров в данном случае было бы неверным, так как подобная запись показывала бы, что фломастеров нет вообще. Но точные данные об их количестве отсутствуют, поэтому может оказаться, что несколько штук все же есть.

Значение NULL и НЕ NULL

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

select case when null is null then ‘YES’ else ‘NO’ end from dual; — YES

select case when ‘a’ is null then ‘YES’ else ‘NO’ end from dual; — NO

IS NOT NULL имеет обратный принцип: значение будет истинным, если операнд не является NULLом, и ложным, если он таковым является.

select case when ‘a’ is NOT null then ‘YES’ else ‘NO’ end from dual; — YES

select case when null is NOT null then ‘YES’ else ‘NO’ end from dual; — NO

Учтите, что когда речь идет об отсутствующих значениях, есть особые случаи их сравнения:

Что такое not null в sql. Смотреть фото Что такое not null в sql. Смотреть картинку Что такое not null в sql. Картинка про Что такое not null в sql. Фото Что такое not null в sql

Что такое not null в sql. Смотреть фото Что такое not null в sql. Смотреть картинку Что такое not null в sql. Картинка про Что такое not null в sql. Фото Что такое not null в sql

Вот так проявляет себя DECODE:

, null, ‘EMPTY’ — это условие будет истинным

Значение NULL в MySQL

Результат при сравнении NULLов, в зависимости от операции SQL, часто будет иметь значение NULL. Предположим, что А НЕДЕЙСТВИТЕЛЕН:

Ваш Путь в IT начинается здесь

Логические операции и NULL

Для логических операторов AND и OR есть свои особенности при работе со значением NULL. Краткое руководство рассмотрим на примере.

Чаще всего с неизвестным результатом работают как с ЛОЖЬЮ:

select 1 from dual where dummy = null; — запрос не вернёт записей

При отрицании неизвестности результатом будет НЕИЗВЕСТНО:

exec test_bool( not(null = null)); — UNKNOWN

exec test_bool( not(null = ‘a’) ); — UNKNOWN

exec test_bool(null or true); — TRUE Главный карьерный консультант

Мы в GeekBrains каждый день обучаем людей новым профессиям и точно знаем, с какими трудностями они сталкиваются. Вместе с экспертами по построению карьеры поможем определиться с новой профессией, узнать, с чего начать, и преодолеть страх изменений.

Карьерная мастерская это:

Уже 50 000 человек прошли мастерскую и сделали шаг к новой профессии!

Запишитесь на бесплатный курс и станьте ближе к новой карьере:

Зарегистрироваться и получить подарки

Операторы IN и NOT IN для значения NULL

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

Создадим таблицу Т, состоящую из одного числового столбца А и строками: 1, 2, 3 и NULL.

create table t as select column_value a from table(sys.odcinumberlist(1,2,3,null));

Затем выполним трассировку запроса (учтите, что для этого нужно обладать ролью PLUSTRACE).

От трассировки в листингах оставлена часть filter, чтобы показать преобразование указанных в запросе условий.

Теперь, после подготовительных действий, попробуем выбрать те записи, которые будут соответствовать набору (1, 2, NULL).

select * from t where a in(1,2,null); — вернёт [1,2]

— filter(«A»=1 OR «A»=2 OR «A»=TO_NUMBER(NULL))

По какой-то причине строка с NULLом не выбрана. Возможно, это случилось потому, что вычисление предиката «А»=TO_NUMBER(NULL) вернуло состояние НЕИЗВЕСТНО. Попробуем явно указать условие включения NULLов в результаты запросов:

select * from t where a in(1,2) or a is null; — вернёт [1,2,NULL]

— filter(«A» IS NULL OR «A»=1 OR «A»=2)

Попробуем с NOT IN:

select * from t where a not in(1,2,null); — no rows selected

— filter(«A»<>1 AND «A»<>2 AND «A»<>TO_NUMBER(NULL))

Ни одной записи так и не появилось.

Что такое not null в sql. Смотреть фото Что такое not null в sql. Смотреть картинку Что такое not null в sql. Картинка про Что такое not null в sql. Фото Что такое not null в sql

Что такое not null в sql. Смотреть фото Что такое not null в sql. Смотреть картинку Что такое not null в sql. Картинка про Что такое not null в sql. Фото Что такое not null в sql

Это объясняется тем, что трехзначная логика NOT IN не взаимодействует с NULLами: при попадании NULL в условия отбора данных можно не ждать.

Значение NULL и пустая строка в СУБД

Oracle отличается от стандартов ANSI SQL в определении NULLов: он проводит знак равенства между NULL и пустой строкой. Эта особенность программы рождает много споров, хотя Oracle и заявляет, что, возможно, в будущих релизах будет изменен подход в обработке пустой строки, как NULL. Но в реальности проведение таких изменений сомнительно, так как под эту СУБД написано неимоверное количество кода.

Что такое not null в sql. Смотреть фото Что такое not null в sql. Смотреть картинку Что такое not null в sql. Картинка про Что такое not null в sql. Фото Что такое not null в sql

Чтобы работа приносила удовольствие, нужно сначала найти правильную профессию.

Мы подготовили документы, которые помогут не ошибиться с выбором и определить, какая профессия в IT подходит именно тебе.

Благодаря этим гайдам 76% наших студентов смогли найти востребованную профессию своей мечты.

Обычно эти документы доступны только нашим студентам, мы какое-то время будем раздавать их бесплатно, но очень скоро уберем их из открытого доступа.

Скачивай и используй уже сегодня:

Что такое not null в sql. Смотреть фото Что такое not null в sql. Смотреть картинку Что такое not null в sql. Картинка про Что такое not null в sql. Фото Что такое not null в sql

Гайд по профессиям в IT

5 профессий с данными о навыках и средней заработной плате

Что такое not null в sql. Смотреть фото Что такое not null в sql. Смотреть картинку Что такое not null в sql. Картинка про Что такое not null в sql. Фото Что такое not null в sql

Чек-лист эффективного обучения от Geekbrains

6 правил, которым необходимо следовать для облегчения обучения

Что такое not null в sql. Смотреть фото Что такое not null в sql. Смотреть картинку Что такое not null в sql. Картинка про Что такое not null в sql. Фото Что такое not null в sql

Все профессии, которые есть в IT-сфере

63 профессии и необходимые для них навыки

Что такое not null в sql. Смотреть фото Что такое not null в sql. Смотреть картинку Что такое not null в sql. Картинка про Что такое not null в sql. Фото Что такое not null в sql

Рекомендации по книгам для востребованных специалистов

6 направлений деятельности и полезная литература по каждому из них

exec test_bool( » is null ); — TRUE

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

Каждый столбец, в свою очередь, состоит из 2-х полей: длина данных в столбце (1 или 3 байта) и сами данные. При нулевой длине varchar2 в поле с данными нечего вносить, так как оно не занимает ни байта. В поле же, где указывается длина, вносится специальное значение 0xFF, что и означает отсутствие данных.

NULL Oracle представляет аналогично, то есть отсутствует поле с данными, а в поле длины данных вносится 0xFF. Так как изначально разработчики Oracle не разделяли эти два состояния, то и сейчас принцип внесения данных не изменился.

Что такое not null в sql. Смотреть фото Что такое not null в sql. Смотреть картинку Что такое not null в sql. Картинка про Что такое not null в sql. Фото Что такое not null в sqlЗначение NULL

Понятие «пустая строка» допустимо толковать как абсолютное отсутствие значения, так как ее длина равна нулю. NULL же, в свою очередь, имеет длину неопределенного значения. Поэтому выражение length (») возвращает NULL, а не ожидаемый ноль.

Еще одна причина, по которой нельзя сравнивать NULL с пустой строкой: выражение val = » вернёт состояние НЕИЗВЕСТНО, так как, по сути, идентично val=NULL.

Неопределенная длина пустой строки:

select length(») from dual; — NULL

Сравнение с пустой строкой невозможно:

Критика такого подхода Oracle к значениям NULL и пустой строки, основывается на том, что не всегда пустая строка может означать неизвестность. Например, когда менеджер-продавец вносит данные в карточку клиента, то в поле «Контактный номер» он может указать конкретный номер; также он может указать, что номер неизвестен (NULL); но еще он может указать, что номера как такового нет (пустая строка).

Отличия между null и undefined

Можно сказать, что NULL – это такое значение, которое является определенным для отсутствующего объекта. UNDEFINED же означает именно неопределенность. Например:

// значение переменной element до её инициализации не определённо: undefined

// здесь при попытке получения несуществующего элемента, метод getElementById возвращает null

// переменная element теперь инициализирована значением null, её значение определено

Осуществляя проверку на NULL или UNDEFINED, нужно помнить о разнице в операторах равенства (==) и идентичности (===): с первым оператором производится преобразование типов.

typeof null // object (не «null» из соображений обратной совместимости)

typeof undefined // undefined

null === undefined // false

null == undefined // true

Это все то, что вы должны знать о значении NULL. Обрастая опытом и применяя некоторые уловки для избежания NullPointerException, вы научитесь делать безопасный код. Главным образом неразбериха возникает из-за того, что NULL может трактоваться как пустое значение или как неидентифицированное.

Поэтому важно документально фиксировать поведение метода, когда есть входящее значение NULL. Держите в памяти, что NULL – это значение по умолчанию ссылочных переменных. И вызывать методы экземпляра или получать доступ к переменным экземпляра, применяя NULL-ссылку, вы не можете.

Источник

SQL Значение NULL

Что такое значение NULL?

Если поле в таблице является необязательным, то можно вставить новую запись или обновить запись без добавления значения в это поле. Затем поле будет сохранено с значением NULL.

Как проверить наличие NULL значений?

Вместо этого нам придется использовать оператор IS NULL и IS NOT NULL.

Синтаксис IS NULL

Синтаксис IS NOT NULL

Демо база данных

Ниже приведен выбор из таблицы «Customers» в образце базы данных Northwind:

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1

Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico4

Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK5Berglunds snabbköpChristina BerglundBerguvsvägen 8LuleåS-958 22Sweden

Оператор IS NULL

Оператор IS NULL используется для проверки пустых значений (NULL).

В следующем SQL файле перечислены все клиенты с значением NULL в поле «Address»:

Пример

Совет: Всегда используйте значение NULL для поиска значений NULL.

Оператор IS NOT NULL

Оператор IS NOT NULL используется для проверки непустых значений (NOT NULL).

В следующем SQL файле перечислены все клиенты со значением в поле «Address»:

Источник

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

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