«Найди клиентов без заказов» звучит как самая лёгкая задача собеседования. Её дают, чтобы послушать, какой из трёх способов ты выберешь и знаешь ли, почему один из них опасен. В прошлом уроке мы искали пары, теперь ищем строки, которым пары не нашлось. Все запросы проверены на учебной базе блока.
Как спрашивают
Выведи клиентов, у которых нет ни одного заказа. Какие способы знаешь? Какой выберешь и почему?
Иногда сразу показывают запрос с 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.