Учебники

18) Присоединения к PostgreSQL

Что такое PostgreSQL Joins?

Соединения PostgreSQL используются для извлечения данных из более чем одной таблицы. С помощью JOINs мы можем объединить операторы SELECT и JOIN в один оператор. Условие JOIN добавляется в оператор, и возвращаются все строки, соответствующие условиям.

Значения из разных таблиц объединяются на основе общих столбцов. Общий столбец в основном представляет собой первичный ключ в первой таблице и внешний ключ во второй таблице.

В этом уроке по PostgreSQL вы узнаете:

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

В PostgreSQL есть два типа JOIN:

  • Внутренние соединения
  • Внешнее соединение

Внутренние соединения

Есть 3 типа внутренних соединений:

  • Тета присоединиться
  • Естественное соединение
  • EQUI присоединиться

Тета Присоединиться

Тета-соединение позволяет объединить две таблицы в зависимости от условия, представленного тэтой. Тета-объединения могут работать со всеми операторами сравнения. В большинстве случаев тета-соединение называется внутренним соединением.

Тета-соединение — это самый основной тип JOIN. Он вернет все строки из таблиц, в которых выполняется условие JOIN.

Синтаксис:

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

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

Книга:

Цена:

Мы хотим видеть название каждой книги и соответствующую цену. Мы можем запустить следующую команду:

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

Это вернет следующее:

Только 3 ряда удовлетворяли условию соединения.

EQUI Присоединиться

Объединение EQUI дает нам возможность объединить две таблицы на основе отношения первичный ключ / внешний ключ. Например:

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

Это вернет следующее:

Записи были возвращены из обеих таблиц на основе общих столбцов, то есть столбца id.

Natural Join

Этот тип объединения предоставляет нам другой способ написания соединения EQUI. Мы можем улучшить наш предыдущий пример, добавив ключевое слово NATURAL, как показано ниже:

SELECT *
FROM Book
NATURAL JOIN Price;

Это вернет следующее:

Был возвращен только один столбец идентификатора. ЕСТЕСТВЕННОЕ СОЕДИНЕНИЕ смог заметить, что столбец идентификатора является общим в двух таблицах. Только один был возвращен.

Внешние соединения

В PostgreSQL есть три типа внешних JOIN:

  • Оставил Внешнее Соединение.
  • Право Внешнее Соединение.
  • Полное внешнее соединение

ЛЕВОЕ НАРУЖНОЕ СОЕДИНЕНИЕ

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;   

Это возвращает следующее:

Все 4 строки в таблице Book были возвращены. Только 3 строки из таблицы Price соответствуют условию соединения. Следовательно они были возвращены. Последняя книга не имеет соответствующего значения цены.

ПРАВО НАРУЖНОЕ СОЕДИНЕНИЕ

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;

Это возвращает следующее:

Все строки в таблице цен возвращены. Были возвращены только те строки в таблице Book, которые удовлетворяли условию соединения. 3- я строка не имеет значения для имени, так как совпадений не найдено.

Полное внешнее соединение

Этот тип 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;

Это возвращает следующее:

Все строки из всех таблиц были возвращены с нулями, где совпадений не найдено.

Использование pgAdmin

Вышеуказанные задачи могут быть выполнены в pgAdmin следующим образом:

Внутренние соединения

Тета Присоединиться

Шаг 1) Войдите в свою учетную запись pgAdmin.

Шаг 2)

  1. На панели навигации слева нажмите Базы данных.
  2. Нажмите Демо.

Шаг 3) Введите запрос в редакторе запросов:

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

Шаг 4) Нажмите кнопку «Выполнить».

Он должен вернуть следующее:

EQUI Присоединиться

Шаг 1) Войдите в свою учетную запись pgAdmin.

Шаг 2)

  1. На панели навигации слева нажмите Базы данных.
  2. Нажмите Демо.

Шаг 3) Введите запрос в редакторе запросов:

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

Шаг 4) Нажмите кнопку «Выполнить».

Он должен вернуть следующее:

Natural Join

Шаг 1) Войдите в свою учетную запись pgAdmin.

Шаг 2)

  1. На панели навигации слева нажмите Базы данных.
  2. Нажмите Демо.

Шаг 3) Введите запрос в редакторе запросов:

SELECT *
FROM Book 
NATURAL JOIN Price;

Шаг 4) Нажмите кнопку «Выполнить».

Он должен вернуть следующее:

INNER JOIN (простое соединение)

Шаг 1) Войдите в свою учетную запись pgAdmin.

Шаг 2)

  1. На панели навигации слева нажмите Базы данных.
  2. Нажмите Демо.

Шаг 3) Введите запрос в редакторе запросов:

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

Шаг 4) Нажмите кнопку «Выполнить».

Он должен вернуть следующее:

Внешние соединения

ЛЕВОЕ НАРУЖНОЕ СОЕДИНЕНИЕ

Шаг 1) Войдите в свою учетную запись pgAdmin.

Шаг 2)

  1. На панели навигации слева нажмите Базы данных.
  2. Нажмите Демо.

Шаг 3) Введите запрос в редакторе запросов:

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

Шаг 4) Нажмите кнопку «Выполнить».

Он должен вернуть следующее:

ПРАВО НАРУЖНОЕ СОЕДИНЕНИЕ

Шаг 1) Войдите в свою учетную запись pgAdmin.

Шаг 2)

  1. На панели навигации слева нажмите Базы данных.
  2. Нажмите Демо.

Шаг 3) Введите запрос в редакторе запросов:

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

Шаг 4) Нажмите кнопку «Выполнить».

Он должен вернуть следующее:

Полное внешнее соединение

Шаг 1) Войдите в свою учетную запись pgAdmin.

Шаг 2)

  1. На панели навигации слева нажмите Базы данных.
  2. Нажмите Демо.

Шаг 3) Введите запрос в редакторе запросов:

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

Шаг 4) Нажмите кнопку «Выполнить».

Он должен вернуть следующее:

Резюме:

  • В PostgreSQL мы используем JOIN, когда нам нужно извлечь значения из более чем одной таблицы.
  • ВНУТРЕННЕЕ СОЕДИНЕНИЕ — самый основной тип СОЕДИНЕНИЯ. Возвращает все записи, в которых было выполнено указанное условие JOIN.
  • LEFT OUTER JOIN возвращает все строки в левой таблице и только строки в другой таблице, где условие соединения было выполнено.
  • RIGHT OUTER JOIN возвращает все строки в правой таблице и только строки в другой таблице, где условие соединения было выполнено.
  • Этот тип JOIN возвращает все строки в левой таблице и все строки в правой таблице с нулями, если условие соединения не выполняется.

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