Привет! В прошлом уроке мы сделали первый шаг к пониманию того, как устроены данные, и познакомились с типами данных и концепцией NULL. Ты уже знаешь, что NULL — это специальное обозначение для отсутствующей или неизвестной информации.
Сегодня мы углубимся в эту тему. Наша цель — четко понять, почему NULL — это не ноль и не пустая строка. Это один из тех фундаментальных моментов в SQL, который, если его понять сразу, сэкономит тебе кучу времени и поможет избежать ошибок в аналитике. Понимание этой разницы критически важно, когда ты будешь считать средние значения, конверсии или искать пользователей, которые не заполнили свой профиль.
1. Что это такое простыми словами
Давай раз и навсегда разграничим эти три понятия. Представь, что мы спрашиваем пользователя о его скидочном купоне:
- Пустая строка (
''): Пользователь зашел в поле «купон», но оставил его пустым. Он сознательно ввел «ничего». Значение известно, и оно — пустота. - Ноль (
0): Это конкретное число. Например, если бы мы спрашивали о количестве использованных купонов, ответ0означал бы «ноль штук». Это не отсутствие информации, а точный числовой ответ. - NULL: Мы ничего не знаем. Пользователь мог не видеть поле для купона, или страница не загрузилась. Мы не можем сказать, есть у него купон или нет. Значение неизвестно.
Чтобы закрепить эту идею с помощью простой и понятной аналогии, давай изучим небольшой фрагмент статьи.
NULL или пустая строка в MySQL: какие подводные камни?
В этой статье от Sky.pro отлично и очень наглядно объясняется разница. Особенно обрати внимание на аналогию с парковкой — она помогает запомнить концепцию раз и навсегда.
Прочитай разделы 'Быстрый ответ' и 'Визуализация'. Постарайся уловить ключевую мысль: NULL — это неизвестность, а пустая строка — это известное, но пустое значение.
2. Зачем это нужно именно мне?
Разница между NULL, 0 и '' напрямую влияет на твои выводы как аналитика, маркетолога или дизайнера.
-
Как маркетолог: Ты хочешь посчитать среднюю сумму первого заказа (
avg_order_value). В твоей базе есть пользователи, которые зарегистрировались, но еще ничего не купили. Сумма их первого заказа —NULL, а не0. Большинство SQL функций, таких какAVG()(среднее), умные — они игнорируютNULLзначения при расчетах. Если бы вместоNULLтам стояли нули, средний чек был бы искусственно занижен, и ты бы сделал неверные выводы об эффективности кампании. -
Как продуктовый дизайнер: Тебе нужно понять, сколько пользователей не заполнили информацию «О себе» в профиле, чтобы показать им подсказку. Тут два сценария:
- Пользователь никогда не открывал редактирование профиля. В поле
bioбудетNULL. - Пользователь открыл профиль, стер стандартный текст и сохранил. В поле
bioбудет пустая строка''.
Чтобы найти всех, у кого профиль пуст, тебе придется искать и
NULL, и''. Это помогает точнее понять поведение пользователей и сегментировать их для разных действий (например, одним показать баннер «Заполни профиль», а другим — «Расскажи о себе подробнее»). - Пользователь никогда не открывал редактирование профиля. В поле
3. Основной урок: как работать с NULL в SQL
Главное правило, которое нужно запомнить: NULL — особенный. С ним нельзя использовать обычные операторы сравнения, такие как = или !=.
❌ Неправильно: WHERE last_name = NULL — этот запрос не вернет никаких строк, даже если в таблице полно NULL значений.
✅ Правильно: WHERE last_name IS NULL
Для работы с NULL существуют специальные операторы:
IS NULL— находит строки, где значение в столбце отсутствует.IS NOT NULL— находит строки, где значение в столбце присутствует (любое, кромеNULL).
Давай посмотрим, как это выглядит в реальных запросах.

Теперь давай прочитаем небольшой материал, который наглядно покажет синтаксис работы с NULL.
NULL, ноль и undefined в SQL: чем различаются и как с ... - Skillbox
В этой статье от Skillbox есть отличный раздел с практическими примерами запросов. Это поможет тебе увидеть, как использовать IS NULL и IS NOT NULL в коде.
Прочитай раздел 'Что такое NULL и как с ним работать'. Сосредоточься на примерах SQL-кода с CREATE TABLE, INSERT, а главное — SELECT с использованием WHERE Fax IS NOT NULL и WHERE Fax IS NULL. Это основа для фильтрации данных.
Наконец, чтобы визуально закрепить все нюансы, посмотри короткий видеофрагмент. Он на английском, но очень наглядно иллюстрирует разницу не только между NULL и пустой строкой, но и пробелом.
SQL NULL vs Empty String vs Blank Space (Visually Explained) | #SQL Course 19
Это видео от 'Data with Baraa' отлично раскладывает все по полочкам. Визуальная часть поможет тебе окончательно усвоить материал.
Посмотри самое начало видео (0:00 - 1:19). Автор на простых схемах объясняет концептуальную разницу между NULL (неизвестно), пустой строкой (известно, что это 'ничего') и пробелом (это тоже символ!).
4. Практические задания
Так как мы еще не настроили рабочее окружение (этим займемся в следующем уроке), давай потренируемся теоретически. Для каждого сценария определи, какое значение (NULL, 0 или '') скорее всего будет в указанном поле, и как бы ты написал условие WHERE для его поиска.
-
Сценарий: Таблица
usersс информацией о пользователях. Столбецphone_number.- Задача: Найти пользователей, которые не указали свой номер телефона при регистрации.
- Вопрос: Какое значение будет в
phone_numberи как их найти?
-
Сценарий: Таблица
ordersс заказами. Столбецdiscount_amount(сумма скидки в рублях).- Задача: Найти все заказы, которые были оформлены без скидки.
- Вопрос: Какое значение будет в
discount_amountи как их найти?
-
Сценарий: Таблица
articlesс постами в блоге. Столбецsubtitle(подзаголовок). Подзаголовок — необязательное поле.- Задача: Автор написал статью, но решил сознательно не добавлять подзаголовок и сохранил поле пустым.
- Вопрос: Какое значение, скорее всего, будет в поле
subtitleи как найти все статьи с такой ситуацией?
💡 Мои варианты для самопроверки
- Пользователи без телефона: Скорее всего, значение будет
NULL, так как данные просто отсутствуют. Запрос:WHERE phone_number IS NULL. - Заказы без скидки: Значение будет
0. Это конкретная числовая информация — "скидка равна нулю". Запрос:WHERE discount_amount = 0. - Статьи без подзаголовка: Если автор сознательно оставил поле пустым, то, скорее всего, там будет пустая строка
''. Запрос:WHERE subtitle = ''. Если бы он просто не трогал это поле при создании статьи, там мог бы бытьNULL. Это как раз тот случай, когда для точного анализа нужно знать, как устроена система.
5. Чек-лист: что я должен уметь после этого урока
- Я могу на простом примере (как с купоном или парковкой) объяснить разницу между
NULL,0и''. - Я знаю, что для поиска
NULLнужно использоватьIS NULL/IS NOT NULL, а не знак=. - Я понимаю, почему при расчете среднего чека важно, чтобы у пользователей без покупок был
NULL, а не0. - Я могу предположить, какое значение (
NULL,0или'') будет в ячейке в зависимости от бизнес-логики.
Отлично! Мы разобрали еще один критически важный концепт. Теперь ты готов к тому, чтобы начать писать настоящие запросы.
В следующем уроке мы наконец-то перейдем от теории к практике: настроим наш первый инструмент для работы с SQL (бесплатный онлайн-редактор) и познакомимся с таблицами, на которых будем тренироваться.