JavaRush /Курси /SQL SELF /`RIGHT JOIN` і його застосування

`RIGHT JOIN` і його застосування

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

Давай почнемо з визначення. RIGHT JOIN — це тип з'єднання, який повертає всі рядки з правої таблиці (саме тому він і називається "правий"), а з лівої — тільки ті, що співпадають. Якщо у лівій таблиці немає даних, які відповідають рядку правої таблиці — будуть повернуті NULL значення для стовпців лівої таблиці.

Ти вже знайомий з LEFT JOIN, це майже те саме, але "дзеркально". Основна різниця — яка таблиця вважається головною: ліва чи права.

Синтаксис RIGHT JOIN

Синтаксис RIGHT JOIN практично ідентичний LEFT JOIN. Ось його структура:

SELECT
    стовпці
FROM 
    таблиця_ліва RIGHT JOIN таблиця_права
ON 
    умова_об'єднання;

Зверни увагу на порядок таблиць:

  1. ліва таблиця пишеться до RIGHT JOIN;
  2. права таблиця вказується після слова RIGHT JOIN.

Уявімо, що у нас є дві таблиці:

students — список студентів:

student_id name
1 Otto
2 Maria
3 Alex

enrollments — записи про зарахування студентів на курси:

enrollment_id course_name student_id
101 Математика 1
102 Інформатика 2
103 Біологія NULL

Тепер ми хочемо отримати список усіх записів про зарахування, а також інформацію про студентів, якщо вони існують. Якщо студента не знайдено, ми побачимо NULL замість інформації про студента.

Запит з використанням RIGHT JOIN буде виглядати так:

SELECT
    enrollments.enrollment_id,
    enrollments.course_name,
    students.name AS student_name
FROM 
    students RIGHT JOIN enrollments
    ON 
    students.student_id = enrollments.student_id;

Результат:

enrollment_id course_name student_name
101 Математика Otto
102 Інформатика Maria
103 Біологія NULL

Тут ми бачимо, що всі записи з таблиці enrollments (права таблиця) потрапили у результат, навіть якщо для них немає співпадінь у таблиці students (ліва таблиця).

Порівняння RIGHT JOIN і LEFT JOIN

Якщо ти вже розумієш, як працює LEFT JOIN, можеш подумати: "А навіщо взагалі потрібен RIGHT JOIN? Чому не використовувати LEFT JOIN?" Гарне питання! Давай розберемо різницю і випадки, коли варто обрати саме RIGHT JOIN.

  1. Напрямок даних

    • LEFT JOIN: повертає всі рядки з лівої таблиці, незалежно від того, чи є співпадіння у правій таблиці.
    • RIGHT JOIN: повертає всі рядки з правої таблиці, навіть якщо співпадінь у лівій таблиці немає.
  2. Вибір основної таблиці Зазвичай ти обираєш LEFT або RIGHT залежно від того, яка таблиця (ліва чи права) для тебе важливіша і в якому порядку зручно писати запит.

  3. Еквівалентність Будь-який RIGHT JOIN можна переписати як LEFT JOIN зі зміною порядку таблиць. Наприклад:

    -- RIGHT JOIN
    SELECT *
    FROM students RIGHT JOIN enrollments
    ON students.student_id = enrollments.student_id;
    
    -- Еквівалентний LEFT JOIN
    SELECT *
    FROM enrollments LEFT JOIN students
    ON students.student_id = enrollments.student_id;

Тож, якщо ти не фанат слова RIGHT JOIN, завжди можеш його уникати!

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

На практиці RIGHT JOIN використовується рідше, ніж LEFT JOIN. Але є сценарії, коли він може бути корисним:

  • Якщо права таблиця важливіша (наприклад, вона твоя основна таблиця);
  • Коли ти хочеш організувати запит у такому порядку, де права таблиця логічно йде після лівої;
  • Якщо ти працюєш з уже написаним кодом, який стандартно використовує RIGHT JOIN.

Візуальне представлення RIGHT JOIN

Щоб краще зрозуміти RIGHT JOIN, давай глянемо на схему:

Ліва таблиця            Права таблиця
   [ A ] --------> [ 1 ] 
   [ B ] --------> [ 2 ]
   [ C ] --------> [ 3 ]
   [ D ]           [ 4 ]

При використанні RIGHT JOIN ми отримаємо всі значення з правої таблиці разом із відповідними даними з лівої таблиці. Те, чого немає у лівій таблиці, буде заповнено NULL.

Практичне завдання

Давай перевіримо твої знання на практиці. Ось завдання:

У тебе є таблиці departments з відділами і employees зі співробітниками: departments:

department_id department_name
1 IT
2 Продажі
3 Бухгалтерія

employees:

employee_id name department_id
101 Peter 1
102 Eva 2
103 Ron NULL

Напиши запит з використанням RIGHT JOIN, який поверне список усіх відділів, включаючи співробітників, якщо вони є у відділі, або NULL, якщо співробітників немає.

Спробуй спочатку вирішити задачу самостійно, перш ніж дивитися відповідь.

Відповідь на завдання

Ось як буде виглядати запит:

SELECT
    departments.department_name,
    employees.name AS employee_name
FROM employees RIGHT JOIN departments
    ON employees.department_id = departments.department_id;

Результат буде таким:

department_name employee_name
IT Peter
Продажі Eva
Бухгалтерія NULL

Типові помилки при використанні RIGHT JOIN

Працюючи з RIGHT JOIN, новачки часто стикаються з такими проблемами:

  1. Забувають про умову об'єднання ON. Без вказання умов ти отримаєш декартовий добуток таблиць, що може викликати хаос.
  2. Плутають RIGHT JOIN і LEFT JOIN. Якщо ти використовуєш таблиці не в тому порядку, результат буде неправильним.
  3. Не обробляють NULL значення. У результатах запитів з RIGHT JOIN часто з'являються NULL, які треба правильно інтерпретувати або замінити за допомогою COALESCE().

На цьому все! Тепер ти знаєш, як використовувати RIGHT JOIN, розумієш різницю між RIGHT JOIN і LEFT JOIN, а також зможеш обрати правильний тип об'єднання для своїх задач. У наступній лекції ми детальніше поговоримо про FULL OUTER JOIN, де об'єднуємо все-все з обох таблиць. Удачі у твоїх запитах!

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ