Виды JOIN
Вопрос
Расскажи, какие бывают JOIN и как каждый влияет на число строк в результате.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
INNER: только пары, где условие ON истинно
LEFT/RIGHT: все строки одной стороны, у недостающей стороны NULL
FULL: все строки обеих сторон
CROSS: декартово произведение, N × M строк
Связь один ко многим размножает строки «одной» стороны, два таких JOIN перемножают
Строки с NULL в ключе не соединяются: NULL = NULL не true
Что могут спросить следом
- Как найти клиентов без заказов тремя способами?
- Чем отличается условие в ON от условия в WHERE для LEFT JOIN?
- Что такое self join?
Разбор
JOIN склеивает строки по условию в ON. INNER JOIN оставляет только пары, где условие истинно: клиенты без заказов и заказы без клиента пропадут. LEFT JOIN сохраняет все строки левой таблицы, если пары нет, правые колонки NULL; RIGHT зеркальный, его обычно переписывают в LEFT. FULL сохраняет всех с обеих сторон, полезен для сверки. CROSS даёт каждую строку с каждой, 100 на 100 это 10 тысяч строк. Важно помнить про размножение: если у клиента пять заказов, после JOIN он встретится пять раз, а если добавить ещё и отзывы, строки перемножатся, и суммы задвоятся. И строки с NULL в ключе не склеиваются никогда, потому что NULL = NULL не true.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.