Вашу заявку!
Спасибо за
Менеджер свяжется с вами в ближайшее время.
Забирай в нашем  Telegram канале
Получай лучшие статьи, кейсы и советы по маркетингу первым

SQL‑запросы: виды, структура и примеры

Автор: Remarka Agency

21.04.2026

Время чтения: 12 минут

SQL запросы для аналитики данных

Введение

SQL — язык, с которым рано или поздно сталкивается почти каждый, кто работает с данными. Аналитик выгружает статистику по заказам. Маркетолог проверяет, сколько пользователей выполнили целевое действие. Разработчик пишет запрос к базе, чтобы получить нужную выборку. За всем этим стоит одна и та же логика — SQL-запросы.

Разобраться в них проще, чем кажется. У языка есть четкая структура, ограниченный набор базовых конструкций и понятная логика — если один раз увидеть, как устроен запрос, дальше становится значительно легче.

В этой статье разберем, какие виды SQL-запросов существуют, из каких частей они состоят и как выглядят на практике. Каждый раздел сопровождается примерами — не абстрактными, а такими, которые можно взять за основу и адаптировать под свою задачу.

Что такое SQL и где он применяется

SQL расшифровывается как Structured Query Language — язык структурированных запросов. Если коротко: это способ общаться с базой данных. Вы пишете запрос — база возвращает данные, изменяет их или выполняет нужное действие.
 мем Excel против SQL запросов
Данные в SQL-базах хранятся в таблицах — строки и столбцы, как в Excel, только под капотом устроено сложнее и работает быстрее. SQL позволяет обращаться к этим таблицам: выбирать нужные строки, фильтровать, соединять несколько таблиц, считать агрегаты, добавлять и изменять данные.
Язык используется в большинстве популярных систем управления базами данных — PostgreSQL, MySQL, MS SQL Server, Oracle. Синтаксис в них похож, но есть отличия — об этом подробнее в следующем разделе.

На практике SQL решает самые разные задачи. Несколько примеров из бизнеса:

  • Отчет по продажам
Выгрузить все заказы за месяц, сгруппировать по менеджерам, посчитать сумму и количество сделок по каждому.

  • Сегментация клиентов
Найти покупателей, которые совершили более трех заказов за последние полгода и потратили суммарно больше определенной суммы.

  • Поиск ошибок в данных
Найти строки с пустыми значениями, дублями или некорректным форматом — например, телефоны без кода страны.

  • Анализ поведения пользователей
Посмотреть, сколько пользователей выполнили целевое действие на сайте в разрезе источника трафика.

  • Операционные задачи
Обновить статус заказов, удалить устаревшие записи, добавить новые данные из внешнего источника.

SQL не требует знания программирования в классическом смысле. Достаточно понять логику запросов — и большинство задач с данными становятся решаемыми.

Виды баз данных SQL: стандарт и диалекты

  • Стандарт и диалекты
У SQL есть официальный стандарт — ANSI/ISO. Он описывает базовый синтаксис и набор команд, которые должны работать в любой SQL-совместимой системе. На практике каждая СУБД добавляет свои расширения и немного отступает от стандарта. Это и есть диалекты.
Большинство отличий не бросаются в глаза на базовом уровне, но проявляются, когда начинаешь работать с конкретными задачами. Несколько частых примеров:

  • Ограничение выборки
В MySQL и PostgreSQL используется LIMIT, в MS SQL Server — TOP, в Oracle — ROWNUM или FETCH FIRST.

— MySQL / PostgreSQL
SELECT * FROM orders LIMIT 10;

-- MS SQL Server
SELECT TOP 10 * FROM orders;

-- Oracle
SELECT * FROM orders FETCH FIRST 10 ROWS ONLY;

  • Работа с датами
Функции для работы с датами сильно различаются. В PostgreSQL это DATE_TRUNC, в MySQL — DATE_FORMAT, в MS SQL Server — DATEPART и FORMAT.

  • Конкатенация строк
В большинстве СУБД используется CONCAT (), но в Oracle и PostgreSQL работает также оператор ||, а в MS SQL Server — +.
  • Реляционные и нереляционные базы
SQL — язык реляционных баз данных. В них данные хранятся в таблицах со строгой структурой, а между таблицами есть связи. Когда в быту говорят «SQL-база», обычно имеют в виду именно реляционную СУБД.
Нереляционные базы (NoSQL) устроены иначе: данные могут храниться в документах, графах, парах «ключ-значение». Там SQL не используется — у каждой системы свой язык запросов. MongoDB, Redis, Cassandra — примеры NoSQL-баз.

Популярные реляционные СУБД:

PostgreSQL — мощная и гибкая, хорошо подходит для сложных аналитических задач, активно развивается.
MySQL — широко распространена в веб-разработке, простая в настройке.
MS SQL Server — популярна в корпоративной среде, хорошо интегрируется с продуктами Microsoft.
Oracle — используется в крупных предприятиях, богатый функционал, но дорогая в обслуживании.

Синтаксис во всех четырех в целом похож — базовые запросы переносятся без изменений. Отличия проявляются в функциях дат, строковых операциях, постраничной навигации и некоторых аналитических возможностях.

Виды запросов: DDL, DML, DCL, TCL

DDL управляет структурой базы: CREATE создает таблицу, ALTER изменяет, DROP удаляет, TRUNCATE очищает данные, сохраняя структуру.
DML работает с данными: SELECT выбирает, INSERT добавляет, UPDATE изменяет, DELETE удаляет.
DCL управляет правами: GRANT выдает доступ, REVOKE отзывает.
TCL управляет транзакциями: COMMIT фиксирует изменения, ROLLBACK откатывает, SAVEPOINT создает точку сохранения внутри транзакции. Транзакции нужны там, где несколько операций должны выполниться вместе — например, перевод денег между счетами.

Структура SQL-запроса
У SQL-запроса есть четкий шаблон. Как только вы его увидите — большинство запросов перестанут выглядеть пугающе.

Вот канонический SELECT-запрос со всеми возможными частями:
  • SELECT    -- что выбираем
  • FROM      -- откуда берем данные
  • JOIN      -- присоединяем другие таблицы (если нужно)
  • WHERE     -- фильтруем строки
  • GROUP BY  -- группируем
  • HAVING    -- фильтруем группы
  • ORDER BY  -- сортируем результат
  • LIMIT     -- ограничиваем количество строк
Разберем каждую часть.

SELECT — обязательный элемент. Здесь перечисляете столбцы, которые хотите получить. SELECT * вернет все столбцы, SELECT name, email — только два указанных.
FROM — тоже обязательный. Указывает таблицу, из которой берутся данные. Без него запрос не знает, куда смотреть.
JOIN — необязательный, но очень частый. Позволяет соединить несколько таблиц по общему полю. Например, таблицу заказов с таблицей клиентов — чтобы в одной выборке видеть и заказ, и имя покупателя.
WHERE — фильтрует строки до группировки. Например, WHERE city = 'Москва' оставит только московских клиентов.
GROUP BY — группирует строки по значению одного или нескольких столбцов. Нужен, когда хотите считать агрегаты: сумму, среднее, количество.
HAVING — фильтрует уже после группировки. Например, оставить только те группы, где количество заказов больше десяти.
ORDER BY — сортирует результат по столбцу. ASC — по возрастанию, DESC — по убыванию.
LIMIT — ограничивает количество строк в выдаче. Удобно при отладке — не тянуть миллион строк, а посмотреть на первые десять.
Минимально рабочий запрос — это только SELECT и FROM:
SELECT name FROM clients.

Все остальное добавляется по мере необходимости. Не нужна сортировка — не пишете `ORDER BY`. Нет группировки — нет `GROUP BY`. Начинайте с минимума и достраивайте запрос под задачу.

Порядок выполнения запроса

порядок выполнения SQL запросов схема
SQL пишется в одном порядке, а выполняется в другом. База обрабатывает так: FROM/JOIN → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT.

Это объясняет две частые ошибки.
Почему нельзя использовать алиас из SELECT в WHERE: WHERE выполняется раньше SELECT, поэтому алиас еще не существует. Нужно повторить выражение целиком.

Чем отличается WHERE от HAVING: WHERE фильтрует строки до группировки, HAVING — после. Если фильтр можно поставить в WHERE — ставьте туда: база отсечет лишнее раньше и запрос выполнится быстрее.

Пример SQL-запроса

Разберем базовые запросы на учебной таблице orders с полями: id, client, city, category, amount, created_at.
Выбрать все данные: SELECT * FROM orders — вернет все строки и столбцы.
Выбрать нужные столбцы: SELECT client, city, amount FROM orders.
Отфильтровать по городу: добавить WHERE city = 'Москва' — вернет только московские заказы.
Отсортировать по сумме: добавить ORDER BY amount DESC — от дорогого к дешевому.
Ограничить выборку: LIMIT 3 вернет три строки. LIMIT 3 OFFSET 3 пропустит первые три и вернет следующие — удобно для пагинации.

Фильтрация: WHERE и основные операторы

Операторы сравнения (>, <, =) работают с числами, датами и строками. AND и OR объединяют условия. BETWEEN задает диапазон включительно. IN заменяет несколько OR и делает запрос читаемее. LIKE ищет по шаблону: % заменяет любое количество символов, _ — один.

NULL — отдельная ловушка. WHERE phone = NULL не работает: NULL не равно NULL в логике SQL. Правильно — IS NULL и IS NOT NULL. Разработчики часто спотыкаются именно здесь.
проверка NULL в SQL запросах

Агрегации и группировки

Пять агрегатных функций: COUNT считает строки, SUM суммирует, AVG считает среднее, MIN и MAX находят минимум и максимум.
GROUP BY считает агрегаты отдельно для каждой группы. Например, продажи по категориям или топ клиентов по сумме заказов — добавить ORDER BY total_spent DESC LIMIT 3.
HAVING фильтрует уже после группировки. Правило простое: условие по строкам — в WHERE, условие по результату группировки — в HAVING.

JOIN: как объединять таблицы

В реальных базах данные распределены по таблицам. JOIN соединяет их по общему полю.
INNER JOIN возвращает только строки, для которых нашлось совпадение в обеих таблицах. Нет совпадения — строка не попадает в результат.
LEFT JOIN возвращает все строки из левой таблицы. Там, где совпадения нет, будет NULL. В аналитике LEFT JOIN нужен чаще: данные бывают неполными, и INNER JOIN незаметно теряет строки.
Типовые кейсы: заказы с именами клиентов, сессии с источниками трафика, товары с названиями категорий.

Подзапросы и CTE

Подзапрос — запрос внутри запроса. Удобен, когда результат одного запроса нужен как условие для другого. Например, найти товары дороже среднего: в WHERE вставить SELECT AVG (price) FROM products.
CTE — именованный подзапрос через WITH. Не ускоряет выполнение, но делает логику явной: каждый блок читается отдельно.
Короткий подзапрос, используемый один раз — пишите inline. Длинный или используемый несколько раз — оформляйте через CTE.

Изменение данных: INSERT, UPDATE, DELETE

INSERT добавляет строки, UPDATE изменяет значения, DELETE удаляет строки. Все три операции необратимы без транзакции.
Оберните изменения в BEGIN COMMIT. Если что-то пошло не так — ROLLBACK откатит все назад.
Чек-лист безопасности: перед DELETE или UPDATE запустите SELECT с тем же WHERE и убедитесь, что отбираете нужные строки. Никогда не пишите DELETE FROM table без WHERE — это удалит все. Ограничивайте по id. На продакшн-базе — сначала бэкап.

Изменение структуры: CREATE, ALTER, DROP

DDL меняет структуру базы, а не данные. CREATE создает таблицу с указанием столбцов, типов и ограничений. ALTER добавляет или удаляет столбец, меняет тип данных — удаление необратимо, данные в столбце исчезнут. DROP удаляет таблицу целиком, мгновенно и без подтверждения. В отличие от DELETE, транзакцией не защищается. На рабочих базах — только с бэкапом.

Памятка: минимальный набор запросов

Выборка: SELECT + FROM. Фильтрация: WHERE, AND/OR, BETWEEN, IN, LIKE, IS NULL. Сортировка и ограничение: ORDER BY, LIMIT, OFFSET.
Агрегация: COUNT, SUM, AVG, MIN, MAX + GROUP BY. Фильтр по группам: HAVING. Соединение таблиц: JOIN … ON. Подзапросы: WITH.
Изменение данных: INSERT, UPDATE, DELETE. Структура: CREATE TABLE, ALTER TABLE, DROP TABLE. Транзакции: BEGIN, COMMIT, ROLLBACK.

SQL — язык с небольшим базовым словарем. Этих команд хватает для большинства задач. Остальное осваивается по мере необходимости.
Оставьте ваши данные, и наш менеджер свяжется с вами в ближайшее время.
проанализируем ваш сайт ------ подготовим стратегию ------ проанализируем ваш сайт ------ подготовим стратегию ------
проанализируем ваш сайт ------ подготовим стратегию ------ проанализируем ваш сайт ------ подготовим стратегию------

Готовы обсудить

ваш проект?

Светлана Кабалина
Контент-менеджер агентства Remarka
Подпишись на телеграм
Remarka Agency

Другие статьи