SQL-запросы для начинающих: как устроены SELECT, WHERE, JOIN и GROUP BY

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. Для соседних задач пригодятся эти разборы:

Оцените статью
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x