Начальный ~22 мин чтения

SELECT: базовые запросы

Урок 2 из 6 в курсе SQL: быстрый старт

SELECT: базовые запросы

SELECT — основная команда чтения данных из таблиц; WHERE, ORDER BY и LIMIT управляют выборкой.

Почему это важно: SELECT — самая частая операция в backend. Медленные или неправильные SELECT-запросы замедляют API и перегружают БД.

Главная идея

SELECT описывает, какие столбцы нужны, FROM — из какой таблицы, WHERE — какие строки, ORDER BY — в каком порядке, LIMIT — сколько.

Как это выглядит на практике

  1. SELECT * FROM users возвращает все строки и столбцы таблицы users.
  2. WHERE email = 'user@example.com' фильтрует по конкретному значению.
  3. ORDER BY created_at DESC сортирует по дате создания от новых к старым.
  4. LIMIT 20 OFFSET 40 возвращает 20 строк, пропустив первые 40 — пагинация.

Что происходит под капотом

  • Порядок выполнения SQL: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT.
  • SELECT * читает все столбцы, включая ненужные — для production-кода лучше перечислять конкретные.
  • LIKE '%pattern%' не использует индексы и медленен на больших таблицах.
  • EXPLAIN или EXPLAIN ANALYZE показывает план выполнения запроса и помогает найти узкие места.

Типичные ошибки и заблуждения

  • Ошибка: ORDER BY без LIMIT даёт стабильный порядок. Без явной сортировки порядок строк не гарантирован.
  • Ошибка: SELECT * — удобный вариант для production. Это создаёт риск утечки данных и перегружает сеть.
  • Ошибка: WHERE id = '5' и WHERE id = 5 — одно и то же. Несовпадение типов может вызвать неявное приведение и потерю индекса.
  • Ошибка: LIMIT ускоряет запрос. LIMIT только ограничивает вывод; без индекса БД всё равно сканирует всю таблицу.

Ключевые выводы

  • WHERE фильтрует строки; используйте конкретные условия для работы с индексами.
  • ORDER BY + LIMIT — основа пагинации.
  • SELECT * опасен в production: перечисляйте нужные столбцы.
  • EXPLAIN помогает понять, как БД выполняет запрос.

Термины урока

SELECT: команда выборки данных.
WHERE: условие фильтрации строк.
ORDER BY: сортировка результата.
LIMIT / OFFSET: ограничение количества строк и пагинация.

Связь с работой backend-разработчика

В ORM (ActiveRecord, SQLAlchemy) каждый вызов .where, .order, .limit в итоге генерирует SQL. Умение читать и писать SQL вручную помогает оптимизировать медленные запросы.

Мини-разбор реальной ситуации

Эндпоинт /api/users возвращает список пользователей. Без LIMIT он возвращает все 500 000 строк, что роняет сервер. Добавление LIMIT 50 и пагинации через OFFSET решает проблему.

Что запомнить

  • Всегда указывайте LIMIT в запросах, которые возвращают списки.
  • WHERE должен использовать проиндексированные столбцы для производительности.
  • EXPLAIN — ваш инструмент диагностики медленных запросов.

Итог

SELECT — это язык общения с базой данных. Правильные фильтры, сортировка и лимиты — основа производительного backend.