Вопрос о порядке операторов SQL – классика на собеседованиях. Он проверяет не только знание синтаксиса, но и понимание, как база данных обрабатывает запрос. Давайте разберем этот порядок на простом примере, чтобы больше не путаться!
Представьте, что вам нужно найти всех пользователей из Москвы, которые сделали заказы на сумму более 1000 рублей за последний месяц.
1️⃣ SELECT: Что мы хотим увидеть?
Первым идет SELECT – он определяет, какие столбцы мы хотим получить в результате. В нашем случае это может быть имя пользователя, id заказа, сумма заказа.
SELECT user_name, order_id, order_amount
2️⃣ FROM: Откуда берём данные?
FROM указывает, из какой таблицы (или таблиц) мы выбираем информацию.
FROM users u JOIN orders o ON u.user_id = o.user_id
Здесь мы используем JOIN для связи пользователей с их заказами.
3️⃣ WHERE: Фильтруем данные!
WHERE – это фильтр, который отбирает строки, соответствующие определенным условиям.
WHERE u.city = 'Москва' AND o.order_amount > 1000 AND o.order_date >= DATE('now', '-1 month')
Здесь отбираем пользователей из Москвы, с заказами на сумму >1000 ₽ за последний месяц.
4️⃣ GROUP BY: Группируем результаты
GROUP BY группирует строки по указанным столбцам, например по id пользователя, если нам нужно посчитать сумму заказов каждого пользователя. В нашем примере мы этого не делаем, но оператор должен идти именно в таком порядке
5️⃣ HAVING: Фильтруем агрегаты.
HAVING фильтрует строки после группировки, в отличие от WHERE. Используется совместно с агрегирующими функциями — SUM(), AVG(), COUNT(). Например если бы мы посчитали сумму заказов пользователей и нужно отфильтровать пользователей у которых суммарный объем заказов превышает некоторую границу. В нашем примере мы не используем агрегации, поэтому оператор не используется, но должен идти именно в таком порядке.
6️⃣ ORDER BY: Сортируем выдачу!
ORDER BY сортирует результаты запроса по одному или нескольким столбцам.
ORDER BY o.order_date
7️⃣ LIMIT: Ограничиваем количество строк
LIMIT ограничивает количество возвращаемых строк. Полезно, когда нужно быстро получить небольшую часть данных или для пагинации.
LIMIT 10;
🧩 Собираем всё вместе
Вот итоговый запрос с соблюдением порядка:
SELECT user_name, order_id, order_amount
FROM users u JOIN orders o ON u.user_id = o.user_id
WHERE u.city = 'Москва' AND o.order_amount > 1000 AND o.order_date >= DATE('now', '-1 month')
ORDER BY o.order_date
LIMIT 10;
Теперь вы знаете не только порядок, но и назначение каждого оператора! Используйте этот пример для подготовки – и вопрос на собеседовании вам не страшен 💪
#SQL