Раздел 10 · Databases

Анти-джойны: NOT EXISTS, NOT IN, LEFT JOIN IS NULL

junior~15 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

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

Как спрашивают

Выведи клиентов, у которых нет ни одного заказа. Какие способы знаешь? Какой выберешь и почему?

Иногда сразу показывают запрос с NOT IN, который вернул пустоту, и спрашивают, что не так.

Короткий ответ

Три способа: NOT EXISTS с коррелированным подзапросом, NOT IN с подзапросом и LEFT JOIN ... WHERE правая.ключ IS NULL. Выбирать стоит NOT EXISTS: он читается как условие задачи и не ломается от NULL. NOT IN возвращает пустой результат, если в подзапросе встретился хотя бы один NULL. LEFT JOIN IS NULL работает, если проверять на NULL колонку, которая не может быть NULL в настоящей строке, например первичный ключ.

дальше после входа

Урок целиком открыт всем, кто вошёл. Войди по своему email, чтобы читать дальше.

Вход пока по приглашению. Если хочешь учиться, напиши Vassiliy.