Условия (CLAUSES) в SQL — это ключевые компоненты запросов, которые определяют:
- Какие данные выбирать
- Как их фильтровать
- Как группировать и сортировать
📌 Основные типы условий в SQL
1. WHERE — фильтрация строк
SELECT * FROM employees
WHERE salary > 50000 AND department = 'IT';
- Фильтрует записи до их обработки
- Может использовать операторы:
=, <>, >, <, BETWEEN, LIKE, IN, NOT
- Поддерживает сложные логические выражения
2. GROUP BY — агрегация данных
SELECT department, AVG(salary)
FROM employees
GROUP BY department;
- Группирует строки по указанным столбцам
- Требуется для агрегатных функций (COUNT, SUM, AVG и др.)
- Может группировать по нескольким полям
3. HAVING — фильтрация групп
SELECT department, AVG(salary) as avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 60000;
- Фильтрует результаты после GROUP BY
- Работает с агрегированными данными
- Может использовать агрегатные функции в условиях
4. ORDER BY — сортировка
SELECT * FROM products
ORDER BY price DESC, name ASC;
- Сортирует результат по указанным столбцам
- Поддерживает
ASC
(по возрастанию) и DESC
(по убыванию)
- Может сортировать по нескольким полям
5. LIMIT/OFFSET — пагинация
SELECT * FROM orders
ORDER BY created_at DESC
LIMIT 10 OFFSET 20;
- Ограничивает количество возвращаемых строк
- OFFSET пропускает указанное количество записей
- Альтернативный синтаксис в разных СУБД (TOP, FETCH FIRST)
🔄 Последовательность выполнения условий
Важно понимать порядок обработки CLAUSES:
- FROM/JOIN — определение таблиц
- WHERE — фильтрация строк
- GROUP BY — группировка
- HAVING — фильтрация групп
- SELECT — выбор полей
- ORDER BY — сортировка
- LIMIT/OFFSET — пагинация
💡 Продвинутые техники использования
Комбинирование условий
SELECT
category,
COUNT(*) as product_count,
AVG(price) as avg_price
FROM products
WHERE in_stock = TRUE
GROUP BY category
HAVING COUNT(*) > 5
ORDER BY avg_price DESC
LIMIT 3;
Условия в JOIN
SELECT o.order_id, c.customer_name
FROM orders o
JOIN customers c ON o.customer_id = c.id AND c.status = 'active'
WHERE o.total > 1000;
Условная логика в SELECT
SELECT
name,
CASE
WHEN salary > 100000 THEN 'High'
WHEN salary > 50000 THEN 'Medium'
ELSE 'Low'
END as salary_level
FROM employees;
⚠️ Распространенные ошибки
- Использование HAVING без GROUP BY
- Фильтрация агрегированных данных в WHERE вместо HAVING
- Смешивание порядковых номеров и имен столбцов в ORDER BY
- Забывание про NULL-значения в условиях сравнения
Резюмируем
Условия (CLAUSES) — это фундаментальные строительные блоки SQL-запросов, которые позволяют:
✔ Точно фильтровать данные
✔ Группировать и агрегировать информацию
✔ Сортировать результаты
✔ Ограничивать объем возвращаемых данных
Для эффективной работы с SQL необходимо:
- Понимать порядок выполнения условий
- Различать WHERE и HAVING
- Правильно комбинировать различные CLAUSES
- Учитывать особенности реализации в конкретной СУБД