Код
#статьи

NULL, ноль и undefined в SQL: чем различаются и как с ними работать

Есть три вида пустоты. Ну вот какая между ними разница?

Иллюстрация: Оля Ежак для Skillbox Media

Ноль, пустота и неопределённость — в жизни подобные слова можно считать синонимами, но в программировании за ними скрыт разный смысл. Это три разных значения: 0, NULL и undefined. Ноль — просто ноль, пустота — NULL, а неопределённость — undefined. В статье на примере языка SQL мы разберём разницу между нулём и NULL. А вот для понимания undefined нам понадобится JavaScript. Запутанно? Сейчас по порядку во всём разберёмся.

Содержание

Рекомендации для лучшего усвоения темы

Это подготовительный раздел, который разбит на две части. В первой части собрана теория по базам данным и языку SQL, а во второй есть ссылка на платформу для практики. Если вы новичок, рекомендуем сначала изучить предложенные материалы, а затем искать различия между нулём, NULL и undefined. Иначе примеры кода в этой статье вам могут быть непонятны.

Познакомьтесь с основами SQL

SQL, или Structured Query Language, — это язык для работы с реляционными базами данных. Эти базы представлены в виде связанных таблиц, в которых информация разложена по колонкам и строкам. В них можно хранить отчёты, банковские транзакции, контакты клиентов, накладные и прочие сведения.

Для закрепления прочитанного посмотрите вебинар по основам языка SQL. Спикер — Мкртич Пудеян, специалист по анализу данных в Газпромбанке.

На вебинаре вы узнаете, как хранятся данные в Сети, познакомитесь с языком SQL и напишете набор запросов к базе данных
Видео: «Skillbox Программирование»

Зарегистрируйтесь на платформе Oracle Live SQL

Oracle Live SQL — это бесплатная онлайн-платформа, на которой вы можете учиться писать запросы и работать с базами данных. Достаточно перейти на сайт oracle.com, зарегистрироваться и верифицировать электронную почту.

После регистрации вы попадёте в рабочее пространство и сможете сразу проверить подключение. Для этого введите любую SQL-команду и убедитесь, что после неё отображается выбранная таблица. Пример одной из команд:

SELECT * FROM hr.employees;
Таблица вымышленных сотрудников. Если после ввода команды таблица не появилась — убедитесь, что вы нажали на зелёную кнопку Run в верхнем углу рабочего пространства
Скриншот: Oracle Corporation

Что такое ноль в SQL

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

В арифметических операциях ноль можно вычитать и складывать с другими числами — значение этих чисел при этом не изменится. Ещё можно умножить или разделить любое число на ноль, но в результате это даст ноль:

SELECT 5 + 0 AS result FROM DUAL
UNION ALL
SELECT 10 * 0 AS result FROM DUAL
UNION ALL
SELECT 0 / 1 AS result FROM DUAL
UNION ALL
SELECT 10 - 0 AS result FROM DUAL;
Примеры арифметических операций с нулём в SQL
Скриншот: Oracle Corporation

В логических операциях ноль обозначает ложное значение — false. При этом любое другое число будет отвечать за правдивые значения — true.

Создадим таблицу с данными о сотрудниках компании:

CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR2(100),
    is_active NUMBER(1)  
);

Добавим в таблицу информацию о действующих и уволенных сотрудниках:

INSERT INTO employees (id, name, is_active) VALUES (1, 'Катя', 1);
INSERT INTO employees (id, name, is_active) VALUES (2, 'Таня', 0);
INSERT INTO employees (id, name, is_active) VALUES (3, 'Женя', 1);
INSERT INTO employees (id, name, is_active) VALUES (4, 'Саша', 0);

Теперь с помощью нуля и единицы выполним несколько SQL-запросов к нашей таблице. Для начала выберем всех действующих сотрудников:

SELECT * FROM employees WHERE is_active = 1;
Таблица со списком действующих сотрудников: в компании работают Катя и Женя
Скриншот: Oracle Corporation

Посмотрим список уволенных сотрудников:

SELECT * FROM employees WHERE is_active = 0;
Таблица со списком действующих сотрудников: из компании уволены Таня и Саша 😢
Скриншот: Oracle Corporation

Закроем нашу компанию и обновим в базе данных статусы сотрудников:

UPDATE  employees SET is_active = 0  WHERE is_active = 1;

Если теперь проверить результат, то в компании никто не работает:

SELECT * FROM employees;
Таблица со списком действующих сотрудников: в компании никого не осталось 😢😢😢
Скриншот: Oracle Corporation

Что такое undefined и почему его нет в SQL

В языке JavaScript undefined относится к специальному типу данных, который указывает, что значение неопределённо. Undefined не нужно специально задавать, поскольку его интерпретатор всегда указывает автоматически.

Значение undefined проще понять на примере. Перейдите в настройки браузера, откройте вкладку Дополнительные инструменты и найдите раздел Инструменты разработчика. Вам нужно открыть вкладку Консоль.

Объявим в консоли переменную, запишем в неё имя и выведем результат:

const myName = "Юлия";
myName;

/**
 * Если вместо консоли вы пишете код в редакторе, то для вывода результата
 * используйте команду console.log(myName);
*/

Ожидаемо мы получаем сохранённое в переменной значение:

Скриншот: Chrome DevTools / Skillbox Media

Объявим ещё одну переменную, но добавлять в неё никакого значения пока не будем. Если вывести такую переменную в консоль, то результат будет не определён — undefined. Интерпретатор указал это значение автоматически:

let mySurname;
mySurname
Скриншот: Chrome DevTools / Skillbox Media

Если мы заполним нашу пустую переменную значением и выведем результат в консоль, то undefined больше не будет отображаться:

mySurname = "Гаврилова";
mySurname
Скриншот: Chrome DevTools / Skillbox Media

В SQL вместо undefined используют NULL — так обозначают отсутствующие и неопределённые значения. Это предусматривает SQL-92 и другие стандарты, которые обеспечивают совместимость различных систем управления базами данных (СУБД). Отказ от undefined делает работу с базами данных более последовательной и позволяет избежать многих ошибок.

Что такое NULL и как с ним работать

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

CREATE TABLE CompanyContacts (
    MemberID NUMBER GENERATED BY DEFAULT AS IDENTITY,  
    FullName VARCHAR2(100) NOT NULL,                  
    Phone VARCHAR2(20) NOT NULL,                       
    Fax VARCHAR2(20)                                   
);

INSERT INTO CompanyContacts (FullName, Phone, Fax) VALUES ('Катя Иванова', '801-967-7890', '801-967-1234');
INSERT INTO CompanyContacts (FullName, Phone, Fax) VALUES ('Пётр Сидоров', '801-968-7891', NULL);
INSERT INTO CompanyContacts (FullName, Phone, Fax) VALUES ('Виктор Попов', '801-969-7892', '801-969-1235');
INSERT INTO CompanyContacts (FullName, Phone, Fax) VALUES ('Дмитрий Фёдоров', '801-970-7893', NULL);

Если мы посмотрим таблицу, то в колонке Fax у двух сотрудников будут стоять прочерки. Эти прочерки означают NULL — значение отсутствует. Если вместо Oracle Live SQL вы будете работать с другой платформой, то можете увидеть разные отображения значения NULL: в одних программах тоже будут прочерки, другие добавят надпись NULL, а третьи оставят пустые ячейки.

SELECT * FROM CompanyContacts;
Таблица с контактными данными сотрудников компании. Факс есть не у всех
Скриншот: Oracle Corporation

Поработаем с таблицей и для начала выведем всех сотрудников с факсом:

SELECT * FROM CompanyContacts WHERE Fax IS NOT NULL;
Таблица с данными сотрудников, у которых есть факс
Скриншот: Oracle Corporation

Теперь отдельно посмотрим список сотрудников без факса:

SELECT * FROM CompanyContacts WHERE Fax IS NULL;
Таблица с контактными данными сотрудников, которые работают без факса
Скриншот: Oracle Corporation

Допустим, нас не устраивает, что не у всех есть факс. Купим за свой счёт недостающую технику и для удобства присвоим каждому сотруднику уникальный номер факса на основе его идентификатора из таблицы:

UPDATE CompanyContacts
SET Fax = '801-970-' || LPAD (MemberID, 4, '0');

Если сейчас посмотреть обновления, то NULL больше не встречается:

SELECT * FROM CompanyContacts;
Таблица с контактами сотрудников, где у всех есть телефон и факс
Скриншот: Oracle Corporation

Что изучить дальше

Вы познакомились со значением NULL и знаете, чем оно отличается от нуля. Однако в статье мы рассматривали простые примеры и не вникали в детали SQL-синтаксиса. Если вам нужно с этим разобраться — рекомендуем пройти два бесплатных интерактивных руководства на платформе Oracle Live SQL.

Querying Null-valued Rows: Databases for Developers. Это руководство для изучения NULL. Вы на примерах ещё раз познакомитесь с этим значением, научитесь его правильно определять, сравнивать и использовать в функциях.

Фрагмент интерактивного руководства по работе с NULL
Скриншот: Oracle Corporation

Columns and Data Types: Databases for Developers. В этом руководстве вы познакомитесь со структурой таблицы и популярными типами данных: числами, строками, булевыми и двоичными значениями, датой и временем.

Фрагмент интерактивного руководства по работе с различными типами данных в SQL
Скриншот: Oracle Corporation

Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!

Запишите ребёнка на бесплатный урок в Skillbox Kids ➞
Учим детей программированию, веб-дизайну и разработке игр. Преподаватель — IT-эксперт — подберёт курс по интересам ребёнка. Подробности — по клику.
Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована