Применение подзапросов в WHERE и HAVING, типы результатов подзапросов
Подзапросы в SQL — это запросы, которые вложены в другие запросы. Они могут использоваться в различных частях SQL-запроса, но наиболее распространены в условиях WHERE
и HAVING
. Подзапросы позволяют выполнять сложные запросы, используя результаты других запросов в качестве условий или данных.
Подзапросы в WHERE
Подзапросы в WHERE
используются для фильтрации строк в основном запросе на основе результатов подзапроса. Подзапросы в WHERE
могут возвращать одно значение, список значений или таблицу.
Примеры:
Одиночное значение (скалярный подзапрос):
В этом примере подзапрос
(SELECT AVG(price) FROM products)
возвращает среднюю цену всех продуктов, и основной запрос выбирает продукты, цена которых выше этого среднего значения.Список значений (многозначный подзапрос):
Здесь подзапрос
(SELECT customer_id FROM orders WHERE order_date = '2023-01-01')
возвращает список ID клиентов, которые сделали заказы в указанную дату, и основной запрос выбирает имена этих клиентов.Таблица (коррелированный подзапрос):
В этом примере коррелированный подзапрос
(SELECT 1 FROM orders o WHERE o.product_id = p.product_id)
проверяет, существуют ли заказы для каждого продукта, и основной запрос выбирает имена продуктов, для которых есть заказы.
Подзапросы в HAVING
Подзапросы в HAVING
используются для фильтрации групп строк, полученных в результате группировки (GROUP BY
). Подзапросы в HAVING
обычно возвращают одно значение или список значений.
Пример:
В этом примере подзапрос (SELECT AVG(salary) FROM employees)
возвращает среднюю зарплату всех сотрудников, и основной запрос выбирает ID отделов, средняя зарплата в которых выше этого среднего значения.
Типы результатов подзапросов
Скалярный подзапрос: Возвращает одно значение. Может использоваться в любом месте, где допустимо одно значение (например, в условиях
WHERE
,HAVING
, или в качестве значения вSELECT
).Многозначный подзапрос: Возвращает список значений. Часто используется с операторами
IN
,ANY
,ALL
,SOME
.Коррелированный подзапрос: Зависит от внешнего запроса. Выполняется для каждой строки внешнего запроса. Может возвращать одно или несколько значений.
Табличный подзапрос: Возвращает таблицу, которая может быть использована в
FROM
илиJOIN
.
Подзапросы являются мощным инструментом в SQL, позволяющим выполнять сложные запросы и получать точные результаты. Важно понимать, какой тип подзапроса использовать в каждой конкретной ситуации, чтобы эффективно и корректно формулировать запросы.
Last updated