LEFT JOIN в Oracle SQL: как объединять таблицы с сохранением всех строк из первой таблицы

🟢 Введение

LEFT JOIN (или LEFT OUTER JOIN) используется для объединения двух таблиц, при котором:

  • Сохраняются все строки из левой таблицы

  • Из правой таблицы берутся только совпадающие записи

  • Если совпадения нет — в столбцах правой таблицы будет NULL

Этот тип объединения незаменим, когда нужно сохранить основную информацию, даже если дополнительных данных нет.


🔤 Написание

Базовый синтаксис:

sql
SELECT столбцы
FROM таблица1
LEFT JOIN таблица2 ON таблица1.поле = таблица2.поле;

Пример:

sql
SELECT e.first_name, d.department_name
FROM employees e
LEFT JOIN departments d ON e.department_id = d.department_id;

🔄 Где часто используется

  • Когда важны все строки из основной таблицы

  • При поиске записей без связей в другой таблице

  • В аналитике (например, сотрудники без заказов, товары без продаж)

  • В бизнес-логике, где важна полнота левой стороны

  • В отчетах, где нужны NULL-значения для отсутствующих данных


🧪 10 Примеров использования LEFT с пояснениями

1️⃣ LEFT JOIN с отсутствующими отделами

sql
SELECT e.first_name, d.department_name
FROM employees e
LEFT JOIN departments d ON e.department_id = d.department_id;

Показывает всех сотрудников, включая тех, у кого нет отдела.


2️⃣ Поиск сотрудников без отдела

sql
SELECT e.first_name
FROM employees e
LEFT JOIN departments d ON e.department_id = d.department_id
WHERE d.department_id IS NULL;

Показывает только тех, кто «потерян» — не привязан к отделу.


3️⃣ LEFT JOIN с заказами без оплаты

sql
SELECT o.order_id, p.payment_date
FROM orders o
LEFT JOIN payments p ON o.order_id = p.order_id;

Показывает все заказы, даже если не оплачены.


4️⃣ LEFT JOIN с агрегацией

sql
SELECT d.department_name, COUNT(e.employee_id) AS emp_count
FROM departments d
LEFT JOIN employees e ON d.department_id = e.department_id
GROUP BY d.department_name;

Сколько сотрудников в каждом отделе, включая пустые.


5️⃣ LEFT JOIN в отчете

sql
SELECT c.name, o.order_id
FROM customers c
LEFT JOIN orders o ON c.customer_id = o.customer_id;

Все клиенты, даже если они ещё не делали заказов.


6️⃣ LEFT JOIN с условием в ON

sql
SELECT e.first_name, p.phone_number
FROM employees e
LEFT JOIN phones p ON e.employee_id = p.employee_id AND p.type = 'WORK';

Ищем рабочий телефон, но показываем сотрудника даже без него.


7️⃣ LEFT JOIN с фильтром по левой таблице

sql
SELECT e.first_name, d.department_name
FROM employees e
LEFT JOIN departments d ON e.department_id = d.department_id
WHERE e.hire_date >= TO_DATE('01-01-2020', 'DD-MM-YYYY');

Сохраняется только условие для левой таблицы.


8️⃣ LEFT JOIN во VIEW

sql
CREATE OR REPLACE VIEW emp_dept_all AS
SELECT e.employee_id, e.first_name, d.department_name
FROM employees e
LEFT JOIN departments d ON e.department_id = d.department_id;

Создание представления, включающего сотрудников без отдела.


9️⃣ LEFT JOIN с несколькими связями

sql
SELECT c.name, o.order_id, p.product_name
FROM customers c
LEFT JOIN orders o ON c.customer_id = o.customer_id
LEFT JOIN products p ON o.product_id = p.product_id;

Сохраняются все клиенты, даже без заказов и товаров.


🔟 LEFT JOIN для выявления «сиротских» записей

sql
SELECT d.department_name
FROM departments d
LEFT JOIN employees e ON d.department_id = e.department_id
WHERE e.employee_id IS NULL;

Отделы, в которых никто не работает.


🧩 Заключение

LEFT JOIN — мощный способ объединять таблицы с сохранением всех записей из основной таблицы.
Он идеально подходит для анализа неполных данных, составления отчётов и нахождения несвязанных записей.


🔜 Следующая статья:

Оператор RIGHT в Oracle SQL — как получить все строки из правой таблицы, даже если связей нет

Понравилась статья? Поделиться с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии