← Все вопросы

Как работает SELECT — с чего начать?

Задан 8 часов назад463 просмотров2 ответа
3

Пришёл из фронтенда, базы данных раньше почти не трогал. Понимаю, что SELECT — это «достать данные», но дальше каша: где писать условие, как отсортировать, как взять только первые 10 строк. Объясните базовую структуру запроса по-человечески, чтобы можно было начать писать самому.

2 ответа

9
✓ Принятый ответ — помог автору

Отлично, что начинаете с SELECT — это 80% повседневной работы с базой. Разберём по кирпичикам.

Базовый скелет запроса:

SELECT name, price        -- какие столбцы вернуть
FROM products             -- из какой таблицы
WHERE price > 1000        -- условие фильтрации строк
ORDER BY price DESC       -- сортировка (DESC — по убыванию)
LIMIT 10;                 -- сколько строк вернуть

По частям:

  • SELECT name, price — перечисляете нужные столбцы. SELECT * вернёт все, но в реальных запросах лучше указывать конкретные — быстрее и понятнее.
  • FROM products — таблица-источник.
  • WHERE price > 1000 — оставит только строки, где условие истинно. Можно комбинировать через AND/OR.
  • ORDER BY price DESC — сортировка; ASC (по возрастанию) — по умолчанию, DESC — по убыванию.
  • LIMIT 10 — взять только первые 10 строк (удобно, чтобы не вытащить миллион записей за раз).

И вот что важно понять с самого начала — порядок, в котором SQL это исполняет, не совпадает с порядком, в котором вы пишете. Логически шаги такие:

  1. FROM — берём таблицу.
  2. WHERE — отсеиваем строки.
  3. SELECT — выбираем столбцы.
  4. ORDER BY — сортируем.
  5. LIMIT — отрезаем нужное количество.

Именно поэтому в WHERE нельзя сослаться на псевдоним из SELECT — на момент фильтрации он ещё «не вычислен». А в ORDER BY — уже можно, он идёт после SELECT.

Небольшое замечание по диалектам: LIMIT 10 работает в PostgreSQL, MySQL и SQLite. В SQL Server вместо него SELECT TOP 10 .... В остальном этот скелет универсален — смело тренируйтесь.

1

Добавлю практический лайфхак для обучения: пока осваиваетесь, ставьте LIMIT почти в каждый запрос. На учебной базе это не критично, но привычка спасёт, когда дорвётесь до таблицы с миллионами строк и случайно запустите SELECT * FROM huge_table без ограничения — клиент может зависнуть надолго.

И ещё: WHERE со строками требует кавычек, а сравнение с NULL пишется особо:

WHERE city = 'Москва'      -- строка в одинарных кавычках
WHERE deleted_at IS NULL   -- НЕ "= NULL", а IS NULL

Это частая ошибка новичков: = NULL всегда даёт «неизвестно» и не вернёт строк.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект