Ответ
Работал с запросами различной степени сложности, от базовых операций до продвинутых конструкций.
Основные категории сложных запросов:
- JOIN-запросы:
INNER JOIN,LEFT/RIGHT OUTER JOIN,CROSS JOIN,SELF JOIN. - Агрегация и группировка:
GROUP BYс агрегатными функциями (COUNT,SUM,AVG,MAX,MIN) и фильтрацией результатов черезHAVING. - Подзапросы: Коррелированные и некоррелированные подзапросы в
SELECT,FROM,WHERE. - Оконные функции (Window Functions):
ROW_NUMBER(),RANK(),SUM(...) OVER (PARTITION BY ... ORDER BY ...)для аналитики без группировки итоговых строк. - Общие табличные выражения (CTE):
WITH ... ASдля структурирования сложных запросов и рекурсивных выборок.
Пример сложного запроса с JOIN, агрегацией и HAVING:
SELECT
u.id,
u.name,
COUNT(o.id) AS total_orders,
SUM(o.amount) AS total_spent
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
WHERE u.registration_date >= '2024-01-01'
GROUP BY u.id, u.name
HAVING COUNT(o.id) > 3 AND SUM(o.amount) > 1000
ORDER BY total_spent DESC;
Сопутствующие задачи оптимизации:
- Анализ планов выполнения (
EXPLAIN ANALYZE). - Проектирование и создание эффективных индексов.
- Написание и оптимизация хранимых процедур и триггеров.
- Работа с транзакциями для обеспечения ACID-свойств.