JavaRush /Курси /SQL SELF /Використання LEFT JOIN: включення всіх дани...

Використання LEFT JOIN: включення всіх даних з лівої таблиці

SQL SELF
Рівень 11 , Лекція 2
Відкрита

Уяви, що в тебе є дві таблиці: список студентів і список їх записів на курси. Не всі студенти записані на курси, і ти хочеш побачити повний список всіх студентів, включаючи тих, хто з якихось причин курс ще не вибрав. За допомогою INNER JOIN ти побачиш тільки тих, хто записаний на курси, але що робити з іншими студентами? Для цього і існує LEFT JOIN.

LEFT JOIN повертає всі рядки з лівої таблиці (яка вказана першою в запиті) і відповідні рядки з правої таблиці. Якщо відповідників немає, для колонок правої таблиці повертаються NULL значення.

Синтаксис LEFT JOIN

SELECT
    таблиця1.колонка1,
    таблиця1.колонка2,
    таблиця2.колонка1,
    таблиця2.колонка2    
FROM 
    таблиця1 LEFT JOIN таблиця2
ON 
    таблиця1.спільна_колонка = таблиця2.спільна_колонка;
  • таблиця1 — це "ліва" таблиця.
  • таблиця2 — це "права" таблиця.
  • спільна_колонка — спільний стовпець, по якому відбувається об'єднання.

Приклад на пальцях

Якщо таблиця students виглядає так:

student_id name
1 Otto
2 Anna
3 Peter

А таблиця enrollments виглядає так:

enrollment_id student_id course
1 1 Математика
2 1 Фізика
3 2 Біологія

Тоді запит:

SELECT
    students.name, 
    enrollments.course
FROM 
    students LEFT JOIN enrollments
ON 
    students.student_id = enrollments.student_id;

видасть:

name course
Otto Математика
Otto Фізика
Anna Біологія
Peter NULL

Як бачиш, у результаті залишилися всі студенти, навіть Peter, який ще не записався ні на один курс. Для Peter у стовпці course стоїть NULL.

Приклади використання LEFT JOIN

Приклад 1: Отримання списку всіх студентів і їх курсів

Розглянемо задачу: нам треба отримати повний список студентів разом з курсами, на які вони записані, якщо такі є. Якщо студент ще не вибрав курс, це теж має бути показано.

Той самий запит:

SELECT
    students.name, 
    enrollments.course
FROM 
    students LEFT JOIN enrollments
ON 
    students.student_id = enrollments.student_id;

Результат:

name course
Otto Математика
Otto Фізика
Anna Біологія
Peter NULL

Це класичний приклад використання LEFT JOIN.

Приклад 2: Вивід продуктів і їх продажів

Припустимо, у тебе є дві таблиці:

Таблиця products, що містить всі продукти:

product_id product_name
1 Смартфон
2 Планшет
3 Ноутбук

Таблиця sales, що містить дані про продажі:

sale_id product_id quantity
1 1 5
2 1 3
3 2 2

Тепер ти хочеш побачити всі продукти і кількість їх продажів, включаючи ті продукти, які ще не були продані.

SELECT
    products.product_name, 
    SUM(sales.quantity) AS total_sold
FROM 
    products LEFT JOIN sales
    ON 
    products.product_id = sales.product_id
GROUP BY 
    products.product_name;

Результат:

product_name total_sold
Смартфон 8
Планшет 2
Ноутбук NULL

Особливості та проблеми при використанні LEFT JOIN

Завжди потрібен NULL?
Іноді LEFT JOIN додає NULL там, де ти його не очікуєш. У таких випадках можна замінити NULL на зрозуміле значення за допомогою функції COALESCE().

SELECT
    students.name, 
    COALESCE(enrollments.course, 'Курс не обрано') AS course
FROM 
    students LEFT JOIN enrollments
ON 
    students.student_id = enrollments.student_id;

Результат:

name course
Otto Математика
Otto Фізика
Anna Біологія
Peter Курс не обрано

Зайві дублікати
Якщо дані у правій таблиці містять дублікати, результат запиту буде містити більше рядків, ніж ти очікуєш. Уважно дивись на дані, з якими працюєш, і використовуй DISTINCT, якщо дублікати не потрібні.

Коментарі (1)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
Kryzhanivska Рівень 14
3 серпня 2025
на inner join згоріла перша партія кабачкових чіпсів, на left join друга- відпусти мне бо це як сємкі (хочеш зупинитись але не можеш)😭