TGViewer
Pragmatic Programmer Pragmatic Programmer @pragmatic_programmer · 4.25K subscribers
Post #113 3.73K
Задачка на прокачку SQL: разбор ответа
Правильный ответ: 1 строка (в результат попадет только Анна).
Разбор по строкам:
Илья (commission = 100): Условие 100 != 100 ложно (FALSE). Строка отсеивается.
Анна (commission = 0): Условие 0 != 100 истинно (TRUE). Строка попадает в выборку.
Максим (commission = NULL): Строка отсеивается.

Почему? В чем подвох? Вся хитрость заключается в том, как SQL работает с NULL.
Это фундаментальное правило реляционных баз данных и стандарта ANSI SQL.
В SQL используется трехзначная логика (Three-Valued Logic или 3VL).
Это значит, что логическое выражение может принимать не два, а три значения:TRUE (Истина), FALSE (Ложь), UNKNOWN (Неизвестно).

NULL — это не ноль и не пустая строка. Это неизвестность (отсутствие данных).
Когда СУБД пытается сравнить NULL != 100, она «рассуждает» так: «Я не знаю, чему равна комиссия Максима. Равна ли неизвестность числу 100? Я не могу сказать ни да, ни нет». Поэтому любое сравнение с NULL (будь то =, !=, < или >) всегда возвращает UNKNOWN.
Так как оператор WHERE фильтрует данные и пропускает дальше только те строки, которые получили строго TRUE, Максим в итоговую выборку не попадает.

Как это исправить?Если бы вам нужно было найти всех, у кого комиссия не равна 100, и например, включая тех, у кого она не заполнена, запрос пришлось бы переписать с явной проверкой:
SELECT * FROM employees WHERE commission != 100 OR commission IS NULL;
  • 🔥 34
  • 👍 22
  • ❤ 4
More from @pragmatic_programmer
  1. Oct 7, 2026Попросили ответы объяснять. Пробуем ) A. Автор будет включен в результат, а для всех колон…
  2. Oct 5, 2026Новая задача: есть две таблицы, authors и books, соединенные по внешнему ключу. Если вы вы…
  3. Oct 2, 2026Сегодня и завтра участвуем в конференции Stepicon, оффлайн в Москве. Учимся учить любимых…
  4. Sep 30, 2026Какая из характеристик функции в MySQL предполагает, что функция будет возвращать одинаков…
  5. Sep 28, 2026Официальный талисман — дельфин Сакила. У MySQL есть узнаваемый логотип с дельфином. Его зо…
  6. Sep 25, 2026photo post
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →