Файлы к уроку:
В этом уроке:
- Что такое JOIN
- Какие виды JOIN существуют
- Практикуемся в JOIN
Файлы к уроку и домашнее задание доступны спонсорам. Спонсорство можно оформить на Boosty или ВК.
Что такое JOIN
JOIN — это объединение по горизонтали. Чаще всего к таблице факта нужно добавить столбцы со справочной информацией.
Основные виды JOIN:
- LEFT JOIN
- RIGHT JOIN
- INNER JOIN
- FULL JOIN
LEFT JOIN
При LEFT JOIN возвращаются все строки из первой таблицы и только совпадающие строки из второй. Соединим 2 таблицы по общему полю album_id. Во второй таблице присутствует значение, которого нет в первой таблице (выделено красным). В получившемся результате мы этой строчки не увидим.

Если во второй таблице не нашлось совпадений, то вся правая часть будет заполнена значениями NULL.

Если в правой таблице ключ встречается более одного раза, то в результате мы увидим дубли.

RIGHT JOIN
При RIGHT JOIN возвращаются все строки из правой таблицы и только совпадающие из левой. К каждой строчке из правой таблице будет добавлена каждая совпадающая строка из левой. Этот вид объединения встречается редко.

INNER JOIN
При INNER JOIN вернутся только совпадающие строки из обеих таблиц.

Все виды JOIN с дубликатами ведут себя одинаково.

FULL JOIN
При FULL JOIN возвращаются все строки из обеих таблиц. Если в правой таблице не нашлось соответствия для левой, то в результате правая часть будет заполнена значениями NULL. Если в левой таблице не нашлось соответствия для правой, то в левая часть будет заполнена значениями NULL.

Еще раз про дубли
В примере ниже в результате вернется 32 строки при любом виде JOIN. К каждой строке из левой таблицы присоединится 4 строки из правой.
