Сьогодні ми переходимо до однієї з найцікавіших тем у роботі з реляційними базами даних — об'єднання даних з кількох таблиць за допомогою JOIN. Це потужний інструмент, який відкриває двері до створення складних зв'язків і аналітики.
Уяви, що твоя база даних — це величезний комікс, де кожна розрізнена таблиця є окремим кадром. Щоб скласти цілісну історію, треба з'єднати ці кадри. Саме для цього тобі допоможе JOIN. Об'єднання даних — це процес, який дозволяє запиту витягнути інформацію з кількох таблиць і зв'язати її на основі заданих умов.
Реляційні бази даних побудовані навколо концепції зв'язків між таблицями. Кожна таблиця зберігає інформацію про конкретну сутність, і для повнішої картини ми часто хочемо зв'язати дані з різних таблиць. Наприклад:
- Таблиця
studentsмістить список студентів. - Таблиця
coursesзберігає список курсів. - Таблиця
enrollmentsпоказує, хто які курси відвідує.
Щоб дізнатися, який студент навчається на якому курсі, треба з'єднати ці таблиці. На співбесідах розробник, який вміє працювати з JOIN, виглядає дуже круто, бо це один з найзатребуваніших скілів у роботі з даними.
Основні типи об'єднань
У PostgreSQL існує кілька типів JOIN, і кожен з них спеціально створений для конкретних задач. Розберемо їх загалом, щоб не забивати голову складними прикладами зарано:
Тип JOIN |
Опис |
|---|---|
INNER JOIN |
Повертає рядки, для яких є співпадіння в обох таблицях. |
LEFT JOIN |
Повертає всі рядки з лівої таблиці, а з правої — тільки співпадаючі. |
RIGHT JOIN |
Повертає всі рядки з правої таблиці, а з лівої — тільки співпадаючі. |
FULL OUTER JOIN |
Повертає всі рядки з обох таблиць, заповнюючи NULL для відсутніх співпадінь. |
Вибір одного з JOIN-ів залежить від твоєї задачі:
- Якщо тобі потрібні лише співпадаючі дані з обох таблиць, використовуй
INNER JOIN. - Якщо хочеш зберегти всі дані з однієї таблиці, а з іншої — тільки співпадіння, підійдуть
LEFT JOINабоRIGHT JOIN. - Якщо потрібні всі дані з обох таблиць, навіть якщо вони не співпадають, використовуй
FULL OUTER JOIN.
Давай розбиратися з цими всіма об'єднаннями прямо на практиці.
Приклад задачі — "Хто на якому курсі?"
Припустимо, у нас є три таблиці:
Таблиця students
| id | name |
|---|---|
| 1 | Otto |
| 2 | Anna |
| 3 | Peter |
Таблиця courses
| id | title |
|---|---|
| 101 | Математика |
| 102 | Англійська |
Таблиця enrollments
| student_id | course_id |
|---|---|
| 1 | 101 |
| 2 | 102 |
Ці таблиці пов'язані так:
- Поле
idуstudents— унікальний ідентифікатор студента. - Поле
idуcourses— унікальний ідентифікатор курсу. - У таблиці
enrollmentsстовпціstudent_idіcourse_idстворюють зв'язок між студентами і курсами.
Припустимо, нам треба вирішити таке питання: який студент записаний на який курс?
Відповідь можна отримати за допомогою JOIN. Ми будемо з'єднувати таблиці на основі їх зв'язків:
- З'єднуємо
studentsіenrollmentsпоid = student_id. - З'єднуємо
enrollmentsіcoursesпоcourse_id = id.
Ось як виглядає SQL-запит:
SELECT students.name, courses.title
FROM enrollments
JOIN students ON enrollments.student_id = students.id
JOIN courses ON enrollments.course_id = courses.id;
Що робить цей запит:
FROM enrollments— починаємо з таблиці, яка зв'язує студентів і курси.JOIN students ON enrollments.student_id = students.id— приєднуємо до неї студентів, щоб отримати їх імена.JOIN courses ON enrollments.course_id = courses.id— приєднуємо курси, щоб отримати назви.
Результат буде виглядати так:
| name | title |
|---|---|
| Otto | Математика |
| Anna | Англійська |
Зверни увагу: якщо у студента немає жодного курсу, він не з'явиться у результаті — бо JOIN за замовчуванням строгий (INNER JOIN). Пізніше ми розберемо, як включати і таких студентів за допомогою LEFT JOIN.
Якщо у такому запиті тобі щось незрозуміло — не переймайся! Поступово розібратися з цим — мета наступних лекцій!
Навіщо це потрібно у реальному житті?
Тепер, коли ти розумієш, як з'єднувати таблиці, давай поговоримо про реальний світ. Ти коли-небудь замислювався, як працює інтернет-магазин? Наприклад, коли ти обираєш смартфон і бачиш відгуки інших користувачів.
- Таблиця
productsмістить інформацію про товари. - Таблиця
reviewsмістить відгуки покупців. - Таблиця
customersмістить інформацію про самих покупців
Щоб показати на сайті відгуки, треба об'єднати таблиці products, reviews і customers. Це і є JOIN у дії.
На що звернути увагу?
Перш ніж ми заглибимося у JOIN на наступних лекціях, ось кілька моментів, які варто запам'ятати:
- Порядок у
JOINважливий. Наприклад,LEFT JOINповертає рядки з лівої таблиці, тому, змінюючи порядок, ти змінюєш результат. - Працюй з невеликими таблицями. На початку уникай запитів на мільйони рядків. Не забувай, навіть найпростіший запит має бути зрозумілим.
- Звикай думати про зв'язки. Коли ти звикнеш бачити таблиці як частини однієї великої структури, робота з
JOINстане природною.
З сьогоднішнього дня ми почнемо ставати SQL-спеціалістами. У наступній лекції ти дізнаєшся, як використовувати INNER JOIN для витягування даних з двох таблиць. Це буде серйозний крок у твоєму навчанні PostgreSQL.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ