PostgreSQL подзапросы (Subqueries)

В этом учебном пособии вы узнаете, как использовать подзапросы в PostgreSQL с синтаксисом и примерами.

Что такое подзапрос в PostgreSQL?

В PostgreSQL подзапрос - это запрос в запросе. Вы можете создавать подзапросы в своих SQL-предложениях. Эти подзапросы могут находиться в опертаоре WHERE, операторе FROM или SELECT.

Примечание

  • В PostgreSQL подзапрос также называется INNER QUERY или INNER SELECT.
  • В PostgreSQL основной запрос, содержащий подзапрос, также называется OUTER QUERY или OUTER SELECT.

Оператор WHERE

Чаще всего подзапрос будет найден в операторе WHERE. Эти подзапросы также называются вложенными подзапросами.
Например:

Часть подзапроса оператора SELECT выше:

Этот подзапрос позволяет вам найти все значения category_id из таблицы category, у которых category_id больше 25, а category_name начинается с 'S'. Затем подзапрос используется для фильтрации результатов основного запроса с использованием условия IN.
Этот подзапрос мог бы быть записан как INNER JOIN следующим образом

Этот INNER JOIN будет работать более эффективно, чем исходный подзапрос. Однако важно отметить, что не все подзапросы можно переписать с помощью joins соединений.

Оператор FROM

Подзапрос также можно найти в операторе FROM. Они называются встроенными представлениями (view).
Например:

В этом примере мы создали подзапрос в операторе FROM следующим образом:

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

Оператор SELECT

Подзапрос также можно найти в операторе SELECT. Обычно они используются, когда вы хотите получить расчет с использованием агрегатной функции, такой как sum, count, min, max или avg, но вы не хотите, чтобы агрегатная функция применялась к основному запросу.
Например:

В этом примере мы создали подзапрос в операторе SELECT следующим образом:

Подзапрос имеет псевдоним с именем subquery2. Это будет имя, используемое для ссылки на этот подзапрос или любое из его полей.
Хитрость в размещении подзапроса в SELECT заключается в том, что подзапрос должен возвращать одно значение. Вот почему агрегатная функция, такая как sum, count, функция min, max или avg обычно используется в подзапросе.