Какие типы подзапросов существуют

«Какие типы подзапросов существуют» — вопрос из категории SQL, который задают на 33% собеседований Аналитик Данных. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

  1. Скалярные — возвращают одно значение, используются в SELECT, WHERE, HAVING:
SELECT name, (SELECT AVG(price) FROM products) AS avg_price
FROM products;
  1. Столбцовые — возвращают один столбец, часто с IN, ANY, ALL:
SELECT * FROM orders
WHERE customer_id IN (SELECT id FROM customers WHERE status = 'active');
  1. Табличные — возвращают таблицу, используются в FROM:
SELECT avg_price FROM 
(SELECT category, AVG(price) AS avg_price FROM products GROUP BY category) AS subq;
  1. Коррелированные — зависят от внешнего запроса, выполняются для каждой строки:
SELECT p.name FROM products p
WHERE p.price > (SELECT AVG(price) FROM products WHERE category = p.category);

Также подзапросы могут быть вложенными (подзапрос внутри подзапроса) и некоррелированными (не зависят от внешнего запроса).