SQL для начинающих: основные команды с примерами

SQL выглядит как код, но читается почти как обычная фраза: «выбери имена из таблицы клиентов, где город — Казань». Чтобы закрыть большую часть рабочих задач, достаточно десятка команд. Разбираем их на одном примере — данных небольшого интернет-магазина.
Редакция Бинариума
Пишем о профессиях в дизайне, BIM и IT · 10 минут чтения
Из этой статьи вы узнаете:
Наши данные
Представим магазин, у которого есть две таблицы.
| Таблица | Колонки |
|---|---|
| orders — заказы | id, customer_id, city, amount, created_at |
| customers — клиенты | id, name, email |
SELECT: достать данные
SELECT city, amount FROM orders;
Запрос вернёт город и сумму каждого заказа. Звёздочка — SELECT * — вернёт все колонки, но в рабочих запросах лучше перечислять нужные поля: так быстрее и понятнее.
WHERE, ORDER BY и LIMIT: отфильтровать и отсортировать
SELECT customer_id, amount FROM orders WHERE city = 'Казань' AND amount > 5000 ORDER BY amount DESC LIMIT 10;
Десять самых крупных заказов из Казани дороже 5000 ₽. Пригодятся операторы IN ('Казань', 'Самара'), BETWEEN, LIKE 'Ан%' для поиска по началу строки и IS NULL для пустых значений.
GROUP BY и HAVING: посчитать итоги
SELECT city,
COUNT(*) AS orders_cnt,
SUM(amount) AS revenue,
AVG(amount) AS avg_check
FROM orders
GROUP BY city
HAVING SUM(amount) > 100000;Количество заказов, выручка и средний чек по городам — только там, где выручка больше 100 000 ₽. Это классический запрос аналитика.
WHERE фильтрует строки до группировки, HAVING — уже посчитанные группы. Путаница между ними — одна из самых частых ошибок новичков.
Курс Бинариума
SQL с нуля до PRO — практика на реальных данных
JOIN: объединить таблицы
SELECT c.name, o.amount, o.created_at FROM orders o JOIN customers c ON c.id = o.customer_id;
Теперь рядом с каждым заказом — имя клиента. Основные виды объединений:
- INNER JOIN — только строки, у которых нашлась пара в обеих таблицах.
- LEFT JOIN — все строки левой таблицы, даже без пары. Так ищут, например, клиентов без заказов.
- FULL JOIN — все строки из обеих таблиц.
INSERT, UPDATE, DELETE: изменить данные
INSERT INTO orders (customer_id, city, amount) VALUES (7, 'Самара', 3200); UPDATE orders SET amount = 3500 WHERE id = 15; DELETE FROM orders WHERE id = 15;
Золотое правило: никогда не запускайте UPDATE и DELETE без WHERE. Иначе изменятся или удалятся все строки таблицы. Перед изменением полезно выполнить SELECT с тем же условием и убедиться, что затронете именно нужные строки.
Порядок выполнения запроса
Мы пишем запрос в одном порядке, а база выполняет его в другом:
- FROM и JOIN — откуда берём данные
- WHERE — фильтруем строки
- GROUP BY — группируем
- HAVING — фильтруем группы
- SELECT — выбираем колонки
- ORDER BY и LIMIT — сортируем и ограничиваем
Поэтому псевдоним, заданный в SELECT, нельзя использовать в WHERE: на этом шаге его ещё не существует. Понимание порядка избавляет от половины непонятных ошибок.
Главное
- Базовый набор: SELECT, WHERE, ORDER BY, GROUP BY, HAVING, JOIN.
- WHERE фильтрует строки, HAVING — группы.
- UPDATE и DELETE — только с WHERE и после проверочного SELECT.
- Дальше — подзапросы, CTE и оконные функции.
Частые вопросы
Сколько времени нужно, чтобы выучить SQL?
Основы — несколько недель регулярной практики. Уверенный уровень с подзапросами и оконными функциями — 2–3 месяца.
Нужно ли уметь программировать?
Нет. SQL — декларативный язык: вы описываете, какой результат нужен, а база сама решает, как его получить.
Курс Бинариума
SQL с нуля до PRO
Закрепите каждую команду на задачах из реального бизнеса.
- От первого SELECT до оконных функций
- Практика на реальных наборах данных
- Навык, нужный аналитикам и разработчикам