SQL-запрос — это текстовая инструкция к базе данных. В ней вы указываете, какие данные нужны, откуда их взять, как отфильтровать, отсортировать, сгруппировать или соединить с другой таблицей
Самый базовый запрос выглядит так:
SELECT name, price
FROM products
WHERE price > 1000
ORDER BY price DESC;
Он читается почти по-человечески: выбрать название и цену из таблицы товаров, оставить только товары дороже 1000 и отсортировать их по цене от дорогих к дешевым
Из чего состоит SQL-запрос
SELECT отвечает за то, какие столбцы попадут в результат
SELECT name, price
FROM показывает, из какой таблицы брать данные
FROM products
WHERE фильтрует строки
WHERE price > 1000
ORDER BY сортирует результат
ORDER BY price DESC
Эти части не нужно учить как заклинание. Лучше понимать роль каждой строки. Тогда вы сможете менять запрос под свою задачу, а не только копировать готовый пример
Запрос с группировкой
Если нужно не вывести строки, а посчитать итоги, используют агрегатные функции и GROUP BY
SELECT category, COUNT(*) AS products_count
FROM products
GROUP BY category;
Такой запрос считает, сколько товаров есть в каждой категории. В результате будет не список всех товаров, а сводка по категориям
Запрос с JOIN
JOIN нужен, когда данные лежат в разных таблицах. Например, клиенты находятся в таблице clients, а заказы — в таблице orders
SELECT clients.name, orders.amount
FROM clients
JOIN orders ON orders.client_id = clients.id;
Этот запрос соединяет клиентов и заказы по идентификатору клиента. Без JOIN пришлось бы смотреть таблицы отдельно и вручную сопоставлять данные
Как читать чужой SQL-запрос
Не начинайте читать запрос сверху вниз как обычный текст. Сначала найдите FROM: он показывает главную таблицу. Потом посмотрите JOIN, чтобы понять, какие таблицы подключаются. Затем разберите WHERE, потому что именно фильтры чаще всего объясняют, почему в результате есть одни строки и нет других
После этого уже смотрите SELECT: какие поля выводятся пользователю. Такой порядок помогает не теряться в длинных запросах
Мини-практика
Создайте таблицу товаров и выполните три запроса: простой SELECT, фильтр и группировку
CREATE TABLE products (
id INTEGER,
name TEXT,
category TEXT,
price INTEGER
);
INSERT INTO products (id, name, category, price) VALUES
(1, 'Монитор', 'Техника', 18000),
(2, 'Клавиатура', 'Техника', 2500),
(3, 'Блокнот', 'Канцелярия', 300),
(4, 'Ручка', 'Канцелярия', 80);
SELECT name, price
FROM products
WHERE price > 1000
ORDER BY price DESC;
SELECT category, COUNT(*) AS count_items
FROM products
GROUP BY category;
Первый запрос должен показать монитор и клавиатуру. Второй — количество товаров в каждой категории
Частые ошибки
Первая ошибка — использовать SELECT * везде. Для обучения это удобно, но в рабочих запросах лучше выбирать конкретные столбцы
Вторая ошибка — забывать, что WHERE фильтрует строки до группировки, а HAVING фильтрует уже сгруппированный результат. Эта разница становится важной при отчетах
Третья ошибка — писать JOIN без понимания связи таблиц. Если условие соединения неверное, результат может раздуться в десятки раз или показать неправильные пары строк
Что почитать дальше по SQL
Если нужен общий маршрут по теме, откройте рубрику SQL. Для соседних задач пригодятся эти разборы:
- Как написать SQL-запрос в Access: SELECT, WHERE и запуск в режиме SQL
- GROUP BY и HAVING: группировка без каши
- JOIN SQL: как соединять таблицы в запросе
- JOIN в SQL: INNER, LEFT и ошибки новичка



