Ответ
В SQL я регулярно использую несколько видов JOIN для связывания данных из разных таблиц:
-
INNER JOINВозвращает только строки, где есть совпадение в обеих таблицах. Это самый частый тип соединения.SELECT users.name, orders.total FROM users INNER JOIN orders ON users.id = orders.user_id; -
LEFT (OUTER) JOINВозвращает все строки из левой таблицы и совпадающие строки из правой. Если совпадения нет, для полей правой таблицы возвращаетсяNULL. Полезен, например, для получения списка всех пользователей и их заказов, включая тех, у кого заказов нет.SELECT users.name, orders.total FROM users LEFT JOIN orders ON users.id = orders.user_id; -
RIGHT (OUTER) JOINОбратныйLEFT JOIN: возвращает все строки из правой таблицы и совпадающие из левой. Используется реже. -
FULL (OUTER) JOINВозвращает все строки из обеих таблиц, объединяя результатыLEFTиRIGHT JOIN. Отсутствующие совпадения заполняютсяNULL. Не поддерживается в MySQL напрямую, но может быть эмулирован черезUNION. -
CROSS JOINВозвращает декартово произведение таблиц — каждая строка первой таблицы соединяется с каждой строкой второй. Может генерировать огромные наборы данных, поэтому используется с осторожностью, например, для создания матриц. -
SELF JOINСоединение таблицы с самой собой, часто используется для работы с иерархическими данными.SELECT e.name AS employee, m.name AS manager FROM employees e LEFT JOIN employees m ON e.manager_id = m.id;