Левое объединение в PostgreSQL

Читать первым в Telegram

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

Введение в условие PostgreSQL LEFT JOIN

Предположим, что у нас есть две таблицы: A и B.

Данные таблицы B связаны с данными таблицы A через поле fka.

Каждая строка таблицы A может совпадать как с несколькими строками таблицы B, так и ни с одной.

Если вам необходимо выбрать строки из таблицы A, совпадающие со строками в таблице B, используйте условие INNER JOIN.

Если же вам необходимо выбрать строки из таблицы A, которые могут или иметь, или не иметь соответствующие строки в таблице B, используйте условие LEFT JOIN. В случае, если в таблице B нет соответствующей строки, значения столбцов в таблице B принимают значения NULL.

Следующий запрос отображает синтаксис вызова условия LEFT JOIN, объединяющего таблицу A с таблицей B:

SELECT
  A.pka,
  A.c1,
  B.pkb,
  B.c2
FROM
  A
LEFT JOIN B ON A .pka = B.fka;

Чтобы объединить таблицу A с таблицей B, вам необходимо:

  • В условии SELECT указать столбцы, из которых вы хотите выбрать данные.
  • В условии FROM указать левую таблицу, т.е. A, из которой вы хотите получить все строки.
  • В условии LEFT JOIN укажите правую таблицу, т.е. B. Кроме того, укажите условия объединения двух таблиц.

Условие LEFT JOIN возвращает все строки из левой таблицы (A), которые объединены со строками в правой таблице (B), даже если в правой таблице (B) нет соответствующих строк.

Условие LEFT JOIN также называется LEFT OUTER JOIN.

Следующая диаграмма Венна отображает, как работает условие LEFT JOIN. В пересечении находятся строки таблицы A, соответствующие строкам таблицы B.

Примеры использование условия PostgreSQL LEFT JOIN

Обратим внимание на следующую ER-диаграмму, которая является частью примера базы данных DVD-проката.

Каждая строка в таблице film может иметь как несколько, так и ни одной строки в таблице inventory. Каждая строка в таблице inventory имеет одну и только одну строку в таблице film.

Используйте условие LEFT JOIN для объединения таблицы film с таблицей inventory следующим образом:

SELECT
  film.film_id,
  film.title,
  inventory_id
FROM
  film
LEFT JOIN inventory ON inventory.film_id = film.film_id;

Поскольку некоторые строки в таблице film не имеют соответствующих строк в таблице inventory, значения inventory_id будут принимать NULL.

Вы можете добавить условие WHERE, чтобы выбрать только те фильмы, которые не содержаться в inventory, используя следующий запрос:

SELECT
  film.film_id,
  film.title,
  inventory_id
FROM
  film
LEFT JOIN inventory ON inventory.film_id = film.film_id
WHERE
  inventory.film_id IS NULL;

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

На этом мы завершаем ознакомление с левым объединением в PostgreSQL и переходим к Self-Join.

Источник: PostgreSQL Tutorial from Scratch

Поддержать проект

Социальные сети проекта:

Подпишись, чтобы ничего не пропустить!