PostgreSQL Видове съединения: Вътрешни, Външни, Ляви, Дясни

⚡ Умно обобщение

PostgreSQL Съединенията извличат и комбинират редове от две или повече таблици, използвайки споделен ключ, и включват вътрешни съединения като theta, EQUI и natural, както и външни съединения, обхващащи леви, десни и пълни резултати.

  • 🔗 Комбинирайте: Обединява обединяващи колони от множество таблици въз основа на общ ключ.
  • 🎯 Вътрешно присъединяване: Вътрешните съединения връщат само редове, където условието за съединение е изпълнено.
  • ⬅️ Ляво присъединяване: LEFT OUTER JOIN запазва всеки ред отляво на таблицата, добавяйки NULL стойности за несъответстващи десни редове.
  • ➡️ Право присъединяване: RIGHT OUTER JOIN запазва всеки десен ред от таблицата, добавяйки NULL стойности за несъответстващи леви редове.
  • ???? Пълно присъединяване: FULL OUTER JOIN връща всички редове от двете таблици с NULL, където няма съвпадение.
  • 🤖 Помощ за изкуствен интелект: Асистентите с изкуствен интелект избират правилния тип съединение и записват условието ON.

PostgreSQL Типове присъединяване

Какво представляват присъединяванията PostgreSQL?

PostgreSQL Се присъедини към се използват за извличане на данни от повече от една таблица. С помощта на Joins е възможно да комбинираме операторите SELECT и JOIN в един оператор. Към оператора се добавя условие JOIN и се връщат всички редове, които отговарят на условията. Стойностите от различните таблици се комбинират въз основа на общи колони. Общата колона е най-често първичен ключ в първата таблица и външен ключ на втората таблица.

PostgreSQL Типове присъединяване

Има два вида присъединявания PostgreSQL:

  • Вътрешни съединения
  • Външни съединения

PostgreSQL Вътрешно присъединяване

Има 3 вида вътрешни съединения PostgreSQL:

  • Тета присъединяване
  • Естествено присъединяване
  • Присъединете се към EQUI

Theta Присъединете се

Тета съединението позволява да се съединят две таблици въз основа на условието, което е представено от тита. Theta съединенията могат да работят с всички оператори за сравнение. В повечето случаи тета съединението се нарича вътрешно съединение.

Тета съединението е най-основният тип JOIN. Той ще върне всички редове от таблиците, където условието JOIN е изпълнено.

Синтаксис:

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

Обърнете внимание на следните таблици на демонстрационната база данни:

Книга:

PostgreSQL Theta Присъединете се

Цена:

PostgreSQL Theta Присъединете се

Искаме да видим името на всяка книга и съответната цена. Можем да изпълним следната команда:

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

Това ще върне следното:

PostgreSQL Theta Присъединете се

Само 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 реда от таблицата с цени отговаряха на условието за присъединяване. Затова те бяха върнати. Последната книга няма съответна ценова стойност.

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 Дясно външно присъединяване

Всички редове в таблицата „Цена“ са върнати. Върнати са само редовете в таблицата „Регистрация“, които отговарят на условието за съединение. Третият ред няма стойност за име, тъй като не е намерено съвпадение.

Пълно външно присъединяване 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 подрежда редовете от два резултатни набора вертикално и изисква еднакъв брой колони.

Самостоятелното присъединяване свързва таблица със себе си, използвайки два псевдонима на таблица. То е полезно за сравняване на редове в една таблица, например за съпоставяне на служители с мениджъри, съхранени в същата таблица.

CROSS JOIN връща декартовото произведение, като сдвоява всеки ред от първата таблица с всеки ред от втората. Не използва условие ON, така че може бързо да генерира много големи набори от резултати.

Да. Можете да свържете няколко JOIN клаузи в една заявка, като добавите всяка допълнителна таблица с друго условие JOIN и ON. PostgreSQL ги оценява, за да изгради един комбиниран набор от резултати.

Асистенти с изкуствен интелект, като GitHub Copilot, предлагат правилния тип съединение, записват условието ON от външни ключове и маркират липсващо условие, което би довело до случайно декартово произведение, намалявайки често срещаните грешки при съединение.

Да. Асистентите с изкуствен интелект могат да четат план на заявка, да препоръчват индекси на колони за съединение и да пренаписват реда или условията за съединение. Базата данни все още налага коректност, така че прегледайте всяко предложение, преди да го стартирате в производство.

Няма единично съединение, което винаги е най-бързо; производителността зависи от индекси, брой редове и филтри. ВЪТРЕШНИТЕ СЪЕДИНЕНИЯ върху индексирани ключове обикновено са ефективни, докато ПЪЛНИТЕ ВЪНШНИ СЪЕДИНЕНИЯ върху големи неиндексирани таблици са склонни да бъдат най-скъпи.

Обобщете тази публикация с: