LEFT JOIN

LEFT JOIN — це тип з’єднання, яке вибирає всі рядки з лівої таблиці (першої, що зазначена в запиті) і лише ті рядки з правої таблиці (другої таблиці), які задовольняють умову з’єднання. Якщо відповідних рядків у правій таблиці немає, то для них будуть виведені значення NULL.
Умовно, LEFT JOIN можна описати так:    
• Якщо є запис у лівій таблиці, то він обов’язково з’явиться в результаті.    
• Якщо для цього запису немає відповідного рядка у правій таблиці, то для стовпців правої таблиці будуть виведені значення NULL.
Синтаксис операції LEFT JOIN виглядає наступним чином:
SELECT стовпець1, стовпець2, …
FROM таблиця1
LEFT JOIN таблиця2 ON таблиця1.стовпець = таблиця2.стовпець;
• SELECT — вказує, які стовпці потрібно вибрати в результаті.    
• FROM таблиця1 — основна (ліва) таблиця, з якої будуть вибиратися всі записи.    
• LEFT JOIN таблиця2 — приєднуємо праву таблицю, де ми вибираємо лише ті рядки, які відповідають умові з’єднання.    
• ON таблиця1.стовпець = таблиця2.стовпець — умова, за якою відбувається з’єднання таблиць.
Left Join Example

Коли використовувати LEFT JOIN?

• Вивести всі записи з лівої таблиці, навіть якщо для деяких з них немає відповідних записів у правій таблиці.
• Показати відсутність зв’язку між записами двох таблиць. Наприклад, у вас є таблиця з користувачами, і ви хочете отримати всіх користувачів, навіть якщо вони не зробили жодного замовлення (відсутні записи в таблиці замовлень).
• LEFT JOIN дає можливість вивести всі записи з лівої таблиці, навіть якщо немає відповідних рядків у правій таблиці.    
• У разі відсутності відповідних записів у правій таблиці, будуть виведені значення NULL.

Приклад

-- Створення бази даних
CREATE DATABASE left_join_practice_db;
USE left_join_practice_db;

-- Створення двох пов’язаних таблиць
-- Створимо таблиці employees та projects.
CREATE TABLE employees (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    position VARCHAR(100)
);
CREATE TABLE projects (
    id INT PRIMARY KEY AUTO_INCREMENT,
    project_name VARCHAR(100) NOT NULL,
    employee_id INT,
    FOREIGN KEY (employee_id) REFERENCES employees(id)
);
-- Наповнення таблиць даними
-- Таблиця employees
INSERT INTO employees (name, position) VALUES
('Віталій Коваль', 'Менеджер'),
('Олена Петренко', 'Аналітик'),
('Олексій Савчук', 'Розробник'),
('Марина Шевчук', 'Розробник'),
('Петро Івасюк', 'Дизайнер'),
('Оксана Левченко', 'Тестувальник'),
('Юрій Чумаченко', 'DevOps');
-- Таблиця projects
INSERT INTO projects (project_name, employee_id) VALUES
('CRM система', 1),
('Аналітична панель', 2),
('Мобільний застосунок', 3),
('Корпоративний сайт', 5),
('AI чатбот', NULL),     -- немає відповідального
('ERP система', 3),
('E-commerce платформа', NULL), -- немає відповідального
('Система моніторингу', 7);
-- Вивести всі проєкти та відповідальних співробітників
SELECT p.id, p.project_name, e.name AS employee
FROM projects p
LEFT JOIN employees e ON p.employee_id = e.id;

-- Вивести всіх співробітників і проєкти, які вони ведуть
SELECT e.id, e.name, p.project_name
FROM employees e
LEFT JOIN projects p ON e.id = p.employee_id
ORDER BY e.id;
-- Вивести тільки проєкти без відповідального
SELECT p.id, p.project_name
FROM projects p
LEFT JOIN employees e ON p.employee_id = e.id
WHERE e.id IS NULL;

-- Вивести співробітників, які НЕ працюють над жодним проєктом
SELECT e.id, e.name
FROM employees e
LEFT JOIN projects p ON e.id = p.employee_id
WHERE p.id IS NULL;

Для додаткової візуалізації є відео.