SQLLab
Теория· 7 мин· 15 XP

Чек-лист сборки запроса: от фильтрации к витрине

Зачем это нужно

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

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

Почему мы думаем в этом порядке, хотя пишем иначе?

Синтаксис SELECT → FROM → WHERE удобен для чтения: вы сразу видите, какие данные вам выведут. Но при написании логичнее собирать запрос пошагово:

  1. Откуда? (FROM) — выбираем исходную таблицу.
  2. Какие именно строки? (WHERE) — отсекаем лишнее (это сужает задачу).
  3. Что показать? (SELECT) — теперь, когда мы знаем, какие строки остались, проще выбрать нужные столбцы (или посчитать агрегаты).
  4. В каком порядке? (ORDER BY) — сортируем уже готовый результат.
  5. Сколько показать? (LIMIT) — берём срез от отсортированного списка.

Важно: Это не порядок выполнения запроса в СУБД. Это порядок сборки, который гарантирует, что вы не забудете WHERE перед SELECT и не поставите LIMIT до сортировки.

Стандартный порядок в коде

sql
SELECT   столбцы         -- 1. Что показать
FROM     таблица         -- 2. Откуда
WHERE    условие         -- 3. Какие строки
ORDER BY столбец         -- 4. Как сортировать
LIMIT    N;              -- 5. Сколько

Обратите внимание: мы пишем SELECT первым, потому что так требует синтаксис, но продумываем шаги в логической последовательности. Это нормально — синтаксис для чтения, логика для написания.

Разбор примера

Задача: «Книги дешевле 500₽ — только название и цена, по алфавиту»

ШагДействие
1. FROMproducts
2. WHEREcategory = 'Книги' AND price < 500
3. SELECTname, price
4. ORDER BYname ASC
5. LIMITне нужен
sql
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 — это шпаргалка для мозга, которая помогает не пропустить важные фильтры до того, как вы начнёте выбирать колонки. Как только навык закрепится, вы будете писать сразу в синтаксическом порядке, автоматически мысленно пробегая этот чек-лист.


Мини-практика

Составь чек-лист для задачи:

«Три самых дорогих товара из категории Спорт — название и цена»

Ответы
  1. FROM → products
  2. WHERE → category = 'Спорт'
  3. SELECT → name, price
  4. ORDER BY → price DESC
  5. LIMIT → 3
sql
SELECT name, price
FROM products
WHERE category = 'Спорт'
ORDER BY price DESC
LIMIT 3;

Прочитайте урок до конца — прогресс засчитается автоматически