Чек-лист сборки запроса: от фильтрации к витрине
Зачем это нужно
Одна из частых ошибок новичков — пытаться писать SQL в том порядке, в котором они хотели бы видеть результат. Но когда вы пишете запрос с нуля, ваш мозг работает иначе: вы сначала представляете данные, а потом решаете, что с ними делать.
Этот чек-лист — не про то, как работает база данных (она умная и сама оптимизирует порядок выполнения). Это про удобный алгоритм для вашей головы, чтобы не забыть ни одно условие и написать синтаксически верный запрос с первого раза.
Почему мы думаем в этом порядке, хотя пишем иначе?
Синтаксис SELECT → FROM → WHERE удобен для чтения: вы сразу видите, какие данные вам выведут. Но при написании логичнее собирать запрос пошагово:
- Откуда? (
FROM) — выбираем исходную таблицу. - Какие именно строки? (
WHERE) — отсекаем лишнее (это сужает задачу). - Что показать? (
SELECT) — теперь, когда мы знаем, какие строки остались, проще выбрать нужные столбцы (или посчитать агрегаты). - В каком порядке? (
ORDER BY) — сортируем уже готовый результат. - Сколько показать? (
LIMIT) — берём срез от отсортированного списка.
Важно: Это не порядок выполнения запроса в СУБД. Это порядок сборки, который гарантирует, что вы не забудете
WHEREпередSELECTи не поставитеLIMITдо сортировки.
Стандартный порядок в коде
SELECT столбцы -- 1. Что показать
FROM таблица -- 2. Откуда
WHERE условие -- 3. Какие строки
ORDER BY столбец -- 4. Как сортировать
LIMIT N; -- 5. Сколько
Обратите внимание: мы пишем SELECT первым, потому что так требует синтаксис, но продумываем шаги в логической последовательности. Это нормально — синтаксис для чтения, логика для написания.
Разбор примера
Задача: «Книги дешевле 500₽ — только название и цена, по алфавиту»
| Шаг | Действие |
|---|---|
| 1. FROM | products |
| 2. WHERE | category = 'Книги' AND price < 500 |
| 3. SELECT | name, price |
| 4. ORDER BY | name ASC |
| 5. LIMIT | не нужен |
SELECT name, price -- 3. Теперь, когда мы отфильтровали строки, берём только нужные колонки
FROM products -- 1. Сначала берём все данные из таблицы
WHERE category = 'Книги' -- 2. Сразу применяем фильтр, чтобы не тащить лишнее
AND price < 500
ORDER BY name ASC; -- 4. Упорядочиваем финальный набор
Аналогия с Excel: сначала открываешь нужный лист (
FROM), ставишь фильтр (WHERE), потом выбираешь, какие столбцы нужны (SELECT), сортируешь (ORDER BY). Именно в таком порядке думает голова — чек-лист просто повторяет эту привычную логику.
Частые ошибки
| Ошибка | Почему не работает |
|---|---|
WHERE после ORDER BY | Синтаксическая ошибка — PostgreSQL отклонит запрос |
LIMIT перед ORDER BY | Сначала порядок, потом срез — иначе результат будет несортированным |
ORDER BY без ASC / DESC | По умолчанию ASC, но лучше указывать явно для читаемости |
| Путаница с «порядком выполнения» | Новички думают: «Раз я думаю FROM → WHERE, значит, база сначала читает всю таблицу». Это не так! База использует индексы и оптимизатор, который может начать с WHERE, даже если в коде сначала написан SELECT. Чек-лист нужен для вашего удобства, а не для управления движком. |
Запомни главное
- Пишем запрос мы всегда по синтаксису:
SELECT → FROM → WHERE → ORDER BY → LIMIT. Это стандарт, его нужно соблюдать. - Продумываем запрос мы в логической последовательности: сначала «откуда и какие строки», потом «что вывести и как отсортировать».
Чек-лист FROM → WHERE → SELECT → ORDER BY → LIMIT — это шпаргалка для мозга, которая помогает не пропустить важные фильтры до того, как вы начнёте выбирать колонки. Как только навык закрепится, вы будете писать сразу в синтаксическом порядке, автоматически мысленно пробегая этот чек-лист.
Мини-практика
Составь чек-лист для задачи:
«Три самых дорогих товара из категории Спорт — название и цена»
Ответы
- FROM →
products - WHERE →
category = 'Спорт' - SELECT →
name, price - ORDER BY →
price DESC - LIMIT →
3
SELECT name, price
FROM products
WHERE category = 'Спорт'
ORDER BY price DESC
LIMIT 3;
Прочитайте урок до конца — прогресс засчитается автоматически