Выбор ответа Middle SQL для аналитика спрашивают часто обновлено
LEFT JOIN и условие в WHERE
Вопрос
Нужны все клиенты и их доставленные заказы (у кого нет, NULL). Почему запрос ... LEFT JOIN orders o ON o.client_id = c.id WHERE o.status = 'delivered' неверен?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: WHERE отбрасывает NULL справа, и LEFT JOIN стал INNER. Для клиента без доставленных заказов o.status будет NULL, а NULL = 'delivered' не true, строка выбрасывается.
Варианты ответа
- Запрос верен: LEFT JOIN сохранит всех клиентов
- Условие на статус должно стоять в HAVING, а не в WHERE
- WHERE отбрасывает NULL справа, и LEFT JOIN стал INNERправильный ответ
- LEFT JOIN нельзя комбинировать с WHERE вообще
Разбор
Для клиента без доставленных заказов o.status будет NULL, а NULL = 'delivered' не true, строка выбрасывается. Условие на правую таблицу переносят в ON: тогда клиенты сохранятся. WHERE с LEFT JOIN использовать можно, просто не для фильтра правой стороны. HAVING тут ни при чём.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.