Всем привет! У каждого из нас есть тот самый собес. Тот, воспоминания о котором заставляют рефлекторно дергаться глаз даже спустя годы.

У меня такой был лет 10 назад. Я тогда уверенно шел на Senior Java в одну ИТишную компанию.
Итак, идет собес:
- Алгоритмы? Легко.
- Разбор многопоточности с мониторами и `volatile`? На пальцах.
- Рассказ про то, как GC эвакуирует старый обьект — вообще полжизни об этом рассказываю.

И финалочка. Фраза: "Давайте порешаем задачки по SQL"

Банальнейшая задача: *«Есть таблица заказов и пользователей. Выведите имена всех юзеров, которые никогда ничего не покупали»*.

Я, матерый джавист, смотрю на это свысока. Ну окей, думаю, сейчас я вам покажу красоту Stream API... Стоп. Мы же в базе.

SELECT u.name FROM users u
WHERE u.id NOT IN (SELECT user_id FROM orders);

Интервьюер спрашивает: «А что будет, если в колонке `user_id` хотя бы раз встретится один-единственный `NULL`?»

💀 Мой мозг Senior-разраба впал в жесткий клинч. В Java `null` бросит `NPE`, мы его боимся и прячем за `Optional`. А в SQL... в SQL предикат `NOT IN (1, 2, NULL)` всегда вернет `UNKNOWN` (ложь). ВСЕГДА. Ни одна строка не пройдет фильтр.
Мой запрос молча вернул пустоту вместо правильного ответа. Логично - оффера не было.

Тот фейл научил меня простой вещи: база данных живет по своим законам. Она не кидает эксепшены тебе в лицо, она просто возвращает неверные данные, и твой идеально спроектированный сервис падает уже где-то далеко на проде со статусом 500.

К чему я это:) думая над контентом и развитием канала и пользе от него я решил миксовать темы.

Раз в неделю здесь будут выходить посты «SQL Fridays». Будем брать классические задачи, которые дают алгоритмистам, и раскладывать их.
Просмотры: 41
Открыть в MAX Сообщить о неточности

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти