0Pricing
SQL Academy · Урок

Скалярные, строковые и табличные подзапросы

Используйте подзапросы, возвращающие одно значение, одну строку или целую таблицу, и размещайте их в предложениях SELECT, FROM и WHERE

«Скалярные, строковые и табличные подзапросы» — бесплатный урок SQL Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Academy содержит 4 уроков всего.

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

Подзапрос — это SELECT внутри другого оператора SQL. Он может быть:

  • Скалярным — возвращает одно значение
  • Строчным — возвращает одну строку
  • Табличным — возвращает отношение (используется в FROM)

Скалярный подзапрос

Используется везде, где ожидается одно значение:

SELECT id, total,
       total - (SELECT AVG(total) FROM orders) AS diff_from_avg
FROM orders
WHERE created_at >= NOW() - INTERVAL '30 days';

Строчный подзапрос

Возвращает одну строку с несколькими столбцами. Встречается реже, в основном используется с конструкторами строк:

SELECT *
FROM orders
WHERE (status, country) = (
  SELECT status, country FROM orders WHERE id = 1
);

Табличный подзапрос в FROM

Рассматривайте результат запроса как временную таблицу:

SELECT country, AVG(big_order_total) AS avg_big
FROM (
  SELECT country, total AS big_order_total
  FROM orders
  WHERE total > 1000
) AS sub
GROUP BY country;

Псевдонимы подзапросов в FROM

Каждому подзапросу в FROM в PostgreSQL требуется псевдоним — даже если Вы его не используете:

SELECT * FROM (SELECT 1) sub;     -- "sub" required

Подзапросы в WHERE

Фильтруйте по производному набору значений:

SELECT * FROM users
WHERE id IN (
  SELECT user_id FROM orders WHERE total > 100
);

EXISTS / NOT EXISTS

Проверьте, возвращает ли подзапрос хотя бы одну строку:

SELECT * FROM users u
WHERE EXISTS (
  SELECT 1 FROM orders o WHERE o.user_id = u.id
);

Подзапросы в SELECT

Встраивайте скалярный подзапрос для каждой строки:

SELECT id, full_name,
  (SELECT COUNT(*) FROM orders o WHERE o.user_id = u.id) AS order_count
FROM users u;

-- Often readable, but a LEFT JOIN + GROUP BY is usually faster.

Подзапросы как выражения

Скалярный подзапрос, возвращающий больше одной строки, приводит к ошибке:

SELECT (SELECT email FROM users);
-- ERROR: more than one row returned by a subquery used as an expression

Когда стоит заменить подзапрос на JOIN

Многие конструкции вида «значение IN (SELECT...)» можно переписать с помощью JOIN. Выбирайте форму, которую легче читать; современные планировщики часто создают одинаковый план.

Подзапросы и CTE

Если Вам нужен один и тот же подзапрос дважды, дайте ему имя с помощью CTE — это рассматривается в следующем уроке.

Итоги

Подзапросы бывают трёх видов.

  • Скалярные — в SELECT/WHERE
  • Строчные — в проверках равенства
  • Табличные — в FROM
  • EXISTS — для проверок «есть ли совпадение»

Проверка знаний

Какая форма подзапроса используется внутри конструкции FROM как временная таблица?

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

Урок «Скалярные, строковые и табличные подзапросы» бесплатный?

Да — полный текст урока «Скалярные, строковые и табличные подзапросы» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.

Чему я научусь в уроке «Скалярные, строковые и табличные подзапросы»?

Используйте подзапросы, возвращающие одно значение, одну строку или целую таблицу, и размещайте их в предложениях SELECT, FROM и WHERE Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать SQL Academy?

Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Скалярные, строковые и табличные подзапросы»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке SQL Academy?

Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Скалярные, строковые и табличные подзапросы
  2. Коррелированные и некоррелированные подзапросы
  3. Общие табличные выражения (WITH)
  4. Рекурсивные CTE для иерархий
← Назад к SQL Academy