PostgreSQL Типы соединений: внутреннее, внешнее, левое, правое

⚡ Умное резюме

PostgreSQL Объединение (Join) извлекает и объединяет строки из двух или более таблиц, используя общий ключ, и включает в себя внутренние объединения, такие как theta, EQUI и natural, а также внешние объединения, охватывающие левые, правые и полные результаты.

  • 🔗 Комбинат: Функция Join объединяет столбцы из нескольких таблиц на основе общего ключа.
  • 🎯 Внутреннее соединение: Внутренние соединения возвращают только те строки, для которых выполняется условие соединения.
  • ⬅️ Осталось присоединиться: Оператор LEFT OUTER JOIN сохраняет все строки в левой части таблицы, добавляя значения NULL для несовпадающих строк в правой части.
  • ➡️ Право Присоединиться: Оператор RIGHT OUTER JOIN сохраняет все строки в правой части таблицы, добавляя значения NULL для несовпадающих строк в левой части.
  • ???? Полное присоединение: FULL OUTER JOIN возвращает все строки из обеих таблиц, содержащие значения NULL там, где совпадение не найдено.
  • 🤖 Помощь в использовании ИИ: Искусственный интеллект-помощники выбирают правильный тип соединения и записывают условие "ВКЛ".

PostgreSQL Типы соединений

Что такое соединения PostgreSQL?

PostgreSQL Играя Операторы JOIN используются для извлечения данных из нескольких таблиц. JOIN позволяет объединить операторы 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;

Рассмотрим следующие таблицы демонстрационной базы данных:

Книга:

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 строки из таблицы «Цены» соответствовали условию объединения. Поэтому их вернули. Последняя книга не имеет соответствующего ценового значения.

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 Join in 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 Полное внешнее соединение

Загрузите базу данных, используемую в этом руководстве.

Часто задаваемые вопросы (FAQ)

Оператор INNER JOIN возвращает только те строки, которые совпадают в обеих таблицах. Оператор OUTER JOIN также сохраняет несовпадающие строки, заполняя отсутствующие столбцы значениями NULL, и может быть левым, правым или полным в зависимости от того, какая таблица сохраняется.

Оператор JOIN объединяет столбцы из разных таблиц, располагая их рядом друг с другом по совпадающему ключу, при этом каждая строка расширяется. Оператор UNION располагает строки двух результирующих наборов вертикально и требует одинакового количества столбцов.

Самосоединение (self-join) объединяет таблицу саму с собой, используя два псевдонима таблицы. Оно полезно для сравнения строк внутри одной таблицы, например, для сопоставления сотрудников с менеджерами, хранящимися в той же таблице.

Оператор CROSS JOIN возвращает декартово произведение, сопоставляя каждую строку первой таблицы с каждой строкой второй. Он не использует условие ON, поэтому может быстро создавать очень большие наборы результатов.

Да. Вы можете объединить несколько операторов JOIN в одном запросе, добавляя к каждой дополнительной таблице еще один оператор JOIN и условие ON. PostgreSQL оценивает их с целью создания единого объединенного набора результатов.

Искусственный интеллект, используемый в таких сервисах, как GitHub Copilot, предлагает правильный тип соединения, записывает условие «ВКЛ» из внешних ключей и отмечает отсутствующее условие, которое может привести к случайному декартову произведению, что снижает количество распространенных ошибок при соединении.

Да. Искусственный интеллект может анализировать план запроса, рекомендовать индексы по столбцам объединения и изменять порядок или условия объединения. База данных по-прежнему обеспечивает корректность, поэтому проверяйте каждое предложение перед запуском в рабочей среде.

Ни один оператор объединения не является всегда самым быстрым; производительность зависит от индексов, количества строк и фильтров. Внутренние объединения (INNER JOIN) по индексированным ключам обычно эффективны, в то время как полные внешние объединения (FULL OUTER JOIN) по большим неиндексированным таблицам, как правило, являются самыми затратными.

Подведем итог этой публикации следующим образом: