PostgreSQL Типи з'єднань: внутрішнє, зовнішнє, ліве, праве

⚡ Розумний підсумок

PostgreSQL Об'єднання витягують та об'єднують рядки з двох або більше таблиць за допомогою спільного ключа, включаючи внутрішні об'єднання, такі як тета, EQUI та натуральні, а також зовнішні об'єднання, що охоплюють ліві, праві та повні результати.

  • 🔗 Об'єднати: Об'єднує стовпці з кількох таблиць на основі спільного ключа.
  • 🎯 Внутрішнє з'єднання: Внутрішні об'єднання повертають лише рядки, для яких виконується умова об'єднання.
  • ⬅️ Ліве приєднання: ЛІВЕ ЗОВНІШНЄ З'ЄДНАННЯ зберігає кожен лівий рядок таблиці, додаючи NULL для незбіганих правих рядків.
  • ➡️ Праве приєднання: RIGHT OUTER JOIN зберігає кожен правий рядок таблиці, додаючи NULL для незбіганих лівих рядків.
  • ???? Повне приєднання: ПОВНЕ ЗОВНІШНЄ ОБ'ЄДНАННЯ повертає всі рядки з обох таблиць з NULL, де немає збігів.
  • 🤖 Допомога зі штучним інтелектом: Помічники ШІ вибирають правильний тип з'єднання та записують умову ON.

PostgreSQL Типи з'єднань

Що таке приєднання PostgreSQL?

PostgreSQL з'єднання використовуються для отримання даних з кількох таблиць. За допомогою об'єднань ми можемо об'єднати оператори SELECT та JOIN в один оператор. До оператора додається умова JOIN, і повертаються всі рядки, що відповідають умовам. Значення з різних таблиць об'єднуються на основі спільних стовпців. Спільний стовпець здебільшого є первинним ключем у першій таблиці та зовнішнім ключем другої таблиці.

PostgreSQL Типи з'єднань

Існує два типи об’єднань PostgreSQL:

  • Внутрішні об'єднання
  • Зовнішні об'єднання

PostgreSQL Внутрішнє з'єднання

Існує 3 типи внутрішніх з’єднань PostgreSQL:

  • Тета-приєднання
  • Природне приєднання
  • Приєднатися до EQUI

Тета приєднатися

Тета-з'єднання дозволяє об'єднати дві таблиці на основі умови, яка представлена ​​тета. Тета-об'єднання можуть працювати з усіма операторами порівняння. У більшості випадків тета-з'єднання називають внутрішнім з'єднанням.

Тета-об'єднання є основним типом JOIN. Він поверне всі рядки з таблиць, де виконується умова JOIN.

Синтаксис:

SELECT columns
FROM table-1
INNER JOIN table-2
ON table-1.column = table-2.column;

Розглянемо наступні таблиці бази даних Demo:

Книга:

PostgreSQL Тета приєднатися

Ціна:

PostgreSQL Тета приєднатися

Ми хочемо бачити назву кожної книги та відповідну ціну. Ми можемо виконати таку команду:

SELECT Book.name, Price.price
FROM Book
INNER JOIN Price
ON Book.id = Price.id;

Це поверне наступне:

PostgreSQL Тета приєднатися

Лише 3 рядки задовольняли умову об’єднання.

EQUI Приєднуйтесь

Об’єднання EQUI надає нам спосіб об’єднання двох таблиць на основі зв’язку первинний/зовнішній ключ. Наприклад:

SELECT *
FROM Book
JOIN Price ON Book.id = Price.id;

Це поверне наступне:

PostgreSQL EQUI Приєднуйтесь

Записи повернуто з обох таблиць на основі загальних стовпців, тобто стовпця id.

Природне приєднання

Цей тип об’єднання надає нам інший спосіб написання об’єднання EQUI. Ми можемо покращити наш попередній приклад, додавши ключове слово NATURAL, як показано нижче:

SELECT *
FROM Book
NATURAL JOIN Price;

Це поверне наступне:

PostgreSQL Природне приєднання

Повернено лише один стовпець ідентифікатора. NATURAL JOIN вдалося помітити, що стовпець id є загальним у двох таблицях. Повернули лише одну.

PostgreSQL Зовнішнє приєднання

Існує 3 типи зовнішніх з’єднань PostgreSQL:

  • Зліва Зовнішнє приєднання
  • Правильне зовнішнє приєднання
  • Повне Зовнішнє Приєднання

PostgreSQL Зліва Зовнішнє приєднання

LEFT OUTER JOIN поверне всі рядки в таблиці ліворуч і лише ті рядки правої сторони таблиці, де умова об’єднання була задоволена.

Синтаксис:

SELECT columns
FROM table-1
LEFT OUTER JOIN table-2
ON table-1.column = table-2.column;

Нам потрібно побачити назву кожної книги та відповідну ціну. Ми можемо виконати таку команду:

SELECT Book.name, Price.price
FROM Book
LEFT JOIN Price
ON Book.id = Price.id;

Це повертає наступне:

PostgreSQL Зліва Зовнішнє приєднання

Повернено всі 4 рядки в таблиці Book. Лише 3 рядки з таблиці Price відповідали умові об’єднання. Тому їх повернули. Остання книга не має відповідного цінового значення.

PostgreSQL Правильне зовнішнє приєднання

RIGHT OUTER JOIN повертає всі рядки в таблиці з правого боку та рядки в таблиці з лівого боку, де умова з’єднання була задоволена.

Синтаксис:

SELECT columns
FROM table-1
RIGHT OUTER JOIN table-2
ON table-1.column = table-2.column;

Наприклад:

SELECT Book.name, Price.price
FROM Book
RIGHT JOIN Price
ON Book.id = Price.id;

Це повертає наступне:

PostgreSQL Правильне зовнішнє приєднання

Повернуто всі рядки таблиці Price. Повернуто лише рядки таблиці Book, які відповідали умові об'єднання. Третій рядок не має значення для name, оскільки збігів не знайдено.

Повне зовнішнє приєднання PostgreSQL

Цей тип JOIN поверне всі рядки в таблиці ліворуч і всі рядки таблиці праворуч з нулями, якщо умова об’єднання не виконується.

Синтаксис:

SELECT columns
FROM table-1
FULL OUTER JOIN table-2
ON table-1.column = table-2.column;

Наприклад:

SELECT Book.name, Price.price
FROM Book
FULL OUTER JOIN Price
ON Book.id = Price.id;

Це повертає наступне:

PostgreSQL Повне Зовнішнє Приєднання

Повернено всі рядки з усіх таблиць із нулями, де не було знайдено збігів.

Використання pgAdmin

Вищезазначені завдання можна виконати в pgAdmin наступним чином. У наступних розділах крок за кроком описано кожен тип об'єднання.

Внутрішнє приєднання pgAdmin

Наведені нижче кроки показують, як запустити кожен варіант внутрішнього об'єднання в pgAdmin.

Як використовувати Theta Приєднуйтесь PostgreSQL за допомогою pgAdmin

Нижче наведено кроки для використання Theta Join PostgreSQL за допомогою pgAdmin:

Крок 1) Увійдіть у свій обліковий запис pgAdmin

Відкрийте pgAdmin і увійдіть, використовуючи свої облікові дані

Крок 2) Створіть демонстраційну базу даних

  • На панелі навігації ліворуч натисніть Бази даних.
  • Натисніть Демо.

Внутрішнє приєднання pgAdmin

Крок 3) Введіть запит

Введіть наведений нижче запит у редакторі запитів:

SELECT Book.name, Price.price
FROM Book
INNER JOIN Price
ON Book.id = Price.id;

Крок 4) Виконайте запит

Натисніть кнопку Виконати

Внутрішнє приєднання pgAdmin

Він повинен повернути наступне:

Внутрішнє приєднання pgAdmin

EQUI Приєднуйтесь

Крок 1) Увійдіть у свій обліковий запис pgAdmin.

Крок 2)

  • На панелі навігації ліворуч натисніть Бази даних.
  • Натисніть Демо.

pgAdmin EQUI Приєднатися

Крок 3) Введіть запит у редакторі запитів:

SELECT *
FROM Book
JOIN Price ON Book.id = Price.id;

Крок 4) Натисніть кнопку Виконати.

pgAdmin EQUI Приєднатися

Він повинен повернути наступне:

pgAdmin EQUI Приєднатися

Природне приєднання

Крок 1) Увійдіть у свій обліковий запис pgAdmin.

Крок 2)

  • На панелі навігації ліворуч натисніть Бази даних.
  • Натисніть Демо.

pgAdmin Природне приєднання

Крок 3) Введіть запит у редакторі запитів:

SELECT *
FROM Book
NATURAL JOIN Price;

Крок 4) Натисніть кнопку Виконати.

pgAdmin Природне приєднання

Він повинен повернути наступне:

pgAdmin Природне приєднання

pgAdmin Просте внутрішнє об’єднання

Крок 1) Увійдіть у свій обліковий запис pgAdmin.

Крок 2)

  • На панелі навігації ліворуч натисніть Бази даних.
  • Натисніть Демо.

pgAdmin Просте внутрішнє об’єднання

Крок 3) Введіть запит у редакторі запитів:

SELECT Book.name, Price.price
FROM Book
INNER JOIN Price
ON Book.id = Price.id;

Крок 4) Натисніть кнопку Виконати.

pgAdmin Просте внутрішнє об’єднання

Він повинен повернути наступне:

pgAdmin Просте внутрішнє об’єднання

Зовнішнє приєднання pgAdmin

Далі запустіть три варіанти зовнішнього з'єднання в pgAdmin, виконавши наведені нижче кроки.

Зліва Зовнішнє приєднання

Крок 1) Увійдіть у свій обліковий запис pgAdmin.

Крок 2)

  • На панелі навігації ліворуч натисніть Бази даних.
  • Натисніть Демо.

pgAdmin Ліве зовнішнє об’єднання

Крок 3) Введіть запит у редакторі запитів:

SELECT Book.name, Price.price
FROM Book
LEFT JOIN Price
ON Book.id = Price.id;

Крок 4) Натисніть кнопку Виконати.

pgAdmin Ліве зовнішнє об’єднання

Він повинен повернути наступне:

pgAdmin Ліве зовнішнє об’єднання

Правильне зовнішнє приєднання

Крок 1) Увійдіть у свій обліковий запис pgAdmin.

Крок 2)

  • На панелі навігації ліворуч натисніть Бази даних.
  • Натисніть Демо.

pgAdmin Праве зовнішнє приєднання

Крок 3) Введіть запит у редакторі запитів:

SELECT Book.name, Price.price
FROM Book
RIGHT JOIN Price
ON Book.id = Price.id;

Крок 4) Натисніть кнопку Виконати.

pgAdmin Праве зовнішнє приєднання

Він повинен повернути наступне:

pgAdmin Праве зовнішнє приєднання

Повне Зовнішнє Приєднання

Крок 1) Увійдіть у свій обліковий запис pgAdmin.

Крок 2)

  • На панелі навігації ліворуч натисніть Бази даних.
  • Натисніть Демо.

pgAdmin Повне зовнішнє приєднання

Крок 3) Введіть запит у редакторі запитів:

SELECT Book.name, Price.price
FROM Book
FULL OUTER JOIN Price
ON Book.id = Price.id;

Крок 4) Натисніть кнопку Виконати.

pgAdmin Повне зовнішнє приєднання

Він повинен повернути наступне:

pgAdmin Повне зовнішнє приєднання

Завантажте базу даних, яка використовується в цьому посібнику

Поширені запитання

ВНУТРІШНЄ ОБ'ЄДНАННЯ повертає лише рядки, що збігаються в обох таблицях. ЗОВНІШНЄ ОБ'ЄДНАННЯ також зберігає незбігані рядки, заповнюючи відсутні стовпці значенням NULL, і може бути лівим, правим або повним залежно від того, яка таблиця зберігається.

Операція JOIN об'єднує стовпці з різних таблиць поруч, використовуючи ключ відповідності, розширюючи кожен рядок. Операція UNION об'єднує рядки двох результуючих наборів вертикально та вимагає однакової кількості стовпців.

Самоз'єднання об'єднує таблицю з самою собою, використовуючи два псевдоніми таблиці. Це корисно для порівняння рядків в одній таблиці, наприклад, для зіставлення співробітників з менеджерами, що зберігаються в тій самій таблиці.

Перехресне об'єднання повертає декартів добуток, поєднуючи кожен рядок першої таблиці з кожним рядком другої. Умова ON не використовується, тому може швидко створювати дуже великі набори результатів.

Так. Ви можете об'єднати кілька речень JOIN в один запит, додаючи кожну додаткову таблицю з іншою умовою JOIN та ON. PostgreSQL оцінює їх, щоб створити єдиний об'єднаний набір результатів.

Помічники штучного інтелекту, такі як GitHub Copilot, пропонують правильний тип з'єднання, записують умову ON із зовнішніх ключів і позначають відсутню умову, яка може призвести до випадкового декартового добутку, зменшуючи поширені помилки з'єднання.

Так. Помічники ШІ можуть читати план запиту, рекомендувати індекси для стовпців об'єднання та переписувати порядок або умови об'єднання. База даних все ще забезпечує правильність, тому перегляньте кожну пропозицію, перш ніж запускати її у виробництві.

Жодне окреме об'єднання не завжди є найшвидшим; продуктивність залежить від індексів, кількості рядків та фільтрів. ВНУТРІШНІ ОБ'ЄДНАННЯ для індексованих ключів зазвичай ефективні, тоді як ПОВНІ ЗОВНІШНІ ОБ'ЄДНАННЯ для великих неіндексованих таблиць, як правило, є найдорожчими.

Підсумуйте цей пост за допомогою: