В предыдущем посте мы уже ознакомились с INNER JOIN и SELF JOIN, а сегодня поговорим о CROSS JOIN и OUTER JOIN.
▶️CROSS JOIN
SQL CROSS JOIN создает декартово произведение таблиц, генерируя все возможные комбинации строк. Это полезно, когда нет связи между таблицами, и требуется полная комбинация записей.
SELECT *
FROM sales_organization
CROSS JOIN sales_channel;
🤩Предположим, что у нас есть две таблицы: “sales_organization” и “sales_channel”, и мы хотим сформировать набор результатов, включающий все возможные комбинации организаций и каналов продаж.
Результат выполнения команды будет содержать все возможные комбинации организаций с каналами продаж, создавая декартово произведение двух таблиц.
▶️OUTER JOIN
SQL OUTER JOIN — это тип соединения, включающий все строки из одной таблицы и только совпадающие строки из другой таблицы.
Существует три типа: LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN.
🏮LEFT OUTER JOIN
LEFT OUTER JOIN объединяет две таблицы, сохраняя все записи из левой, даже если для них нет соответствий в правой. Например, для получения всех заказов и их клиентов, даже если у заказа нет клиента.
SELECT orders.order_id, orders.order_date, customers.customer_name
FROM orders
LEFT OUTER JOIN customers ON orders.customer_id = customers.customer_id;
🤩Этот запрос вернет все заказы из таблицы “orders” вместе со списком клиентов из таблицы “customers”. Если у заказа нет соответствующего клиента, столбец “customer_name” будет содержать значение NULL.
🏮RIGHT OUTER JOIN
RIGHT OUTER JOIN объединяет две таблицы, сохраняя все записи из правой, даже если для них нет соответствий в левой. Например, чтобы получить всех клиентов и их заказы, даже если у клиента нет заказов.
SELECT customers.customer_id, customers.customer_name, orders.order_date
FROM customers
RIGHT OUTER JOIN orders ON customers.customer_id = orders.customer_id;
🤩Этот запрос вернет всех клиентов из таблицы “customers” вместе со списком заказов из таблицы “orders”. Если у клиента нет соответствующих заказов, столбец “order_date” будет содержать значение NULL.
🏮FULL OUTER JOIN
FULL OUTER JOIN объединяет две таблицы, сохраняя все записи из обеих, даже если нет соответствий. Например, для получения всех сотрудников и отделов, включая сотрудников без отдела и отделы без сотрудников.
SELECT employees.employee_id, employees.employee_name, departments.department_name
FROM employees
FULL OUTER JOIN departments ON employees.department_id = departments.department_id;
🤩Этот запрос вернет всех сотрудников из таблицы “employees” вместе со списком отделов из таблицы “departments”. Если у сотрудника не указан отдел или у отдела нет сотрудников, соответствующие столбцы будут содержать значение NULL.
200❤️ — и разбираем следующую тему
➡️ SQL Community | #полезное
