Skip to main content

Welcome to a Grasp lesson

Create a free account to keep studying and create your own study path.

Lesson 4

Понимание NULL: Отличия от нуля и пустой строки

Recommended resources

Привет! В прошлом уроке мы сделали первый шаг к пониманию того, как устроены данные, и познакомились с типами данных и концепцией 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 там стояли нули, средний чек был бы искусственно занижен, и ты бы сделал неверные выводы об эффективности кампании.

  • Как продуктовый дизайнер: Тебе нужно понять, сколько пользователей не заполнили информацию «О себе» в профиле, чтобы показать им подсказку. Тут два сценария:

    1. Пользователь никогда не открывал редактирование профиля. В поле bio будет NULL.
    2. Пользователь открыл профиль, стер стандартный текст и сохранил. В поле 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 выглядит в реальной таблице. Обрати внимание на столбец 'Region'. Он показывает, что для этих записей информация о регионе неизвестна. Это не значит, что региона нет, это значит, что у нас нет этих данных.

Теперь давай прочитаем небольшой материал, который наглядно покажет синтаксис работы с 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 для его поиска.

  1. Сценарий: Таблица users с информацией о пользователях. Столбец phone_number.

    • Задача: Найти пользователей, которые не указали свой номер телефона при регистрации.
    • Вопрос: Какое значение будет в phone_number и как их найти?
  2. Сценарий: Таблица orders с заказами. Столбец discount_amount (сумма скидки в рублях).

    • Задача: Найти все заказы, которые были оформлены без скидки.
    • Вопрос: Какое значение будет в discount_amount и как их найти?
  3. Сценарий: Таблица articles с постами в блоге. Столбец subtitle (подзаголовок). Подзаголовок — необязательное поле.

    • Задача: Автор написал статью, но решил сознательно не добавлять подзаголовок и сохранил поле пустым.
    • Вопрос: Какое значение, скорее всего, будет в поле subtitle и как найти все статьи с такой ситуацией?

💡 Мои варианты для самопроверки
  1. Пользователи без телефона: Скорее всего, значение будет NULL, так как данные просто отсутствуют. Запрос: WHERE phone_number IS NULL.
  2. Заказы без скидки: Значение будет 0. Это конкретная числовая информация — "скидка равна нулю". Запрос: WHERE discount_amount = 0.
  3. Статьи без подзаголовка: Если автор сознательно оставил поле пустым, то, скорее всего, там будет пустая строка ''. Запрос: WHERE subtitle = ''. Если бы он просто не трогал это поле при создании статьи, там мог бы быть NULL. Это как раз тот случай, когда для точного анализа нужно знать, как устроена система.


5. Чек-лист: что я должен уметь после этого урока

  • Я могу на простом примере (как с купоном или парковкой) объяснить разницу между NULL, 0 и ''.
  • Я знаю, что для поиска NULL нужно использовать IS NULL / IS NOT NULL, а не знак =.
  • Я понимаю, почему при расчете среднего чека важно, чтобы у пользователей без покупок был NULL, а не 0.
  • Я могу предположить, какое значение (NULL, 0 или '') будет в ячейке в зависимости от бизнес-логики.

Отлично! Мы разобрали еще один критически важный концепт. Теперь ты готов к тому, чтобы начать писать настоящие запросы.

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