Как работает SELECT — с чего начать?
Пришёл из фронтенда, базы данных раньше почти не трогал. Понимаю, что SELECT — это «достать данные», но дальше каша: где писать условие, как отсортировать, как взять только первые 10 строк. Объясните базовую структуру запроса по-человечески, чтобы можно было начать писать самому.
2 ответа
Отлично, что начинаете с 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 это исполняет, не совпадает с порядком, в котором вы пишете. Логически шаги такие:
FROM— берём таблицу.WHERE— отсеиваем строки.SELECT— выбираем столбцы.ORDER BY— сортируем.LIMIT— отрезаем нужное количество.
Именно поэтому в WHERE нельзя сослаться на псевдоним из SELECT — на момент фильтрации он ещё «не вычислен». А в ORDER BY — уже можно, он идёт после SELECT.
Небольшое замечание по диалектам: LIMIT 10 работает в PostgreSQL, MySQL и SQLite. В SQL Server вместо него SELECT TOP 10 .... В остальном этот скелет универсален — смело тренируйтесь.
Добавлю практический лайфхак для обучения: пока осваиваетесь, ставьте LIMIT почти в каждый запрос. На учебной базе это не критично, но привычка спасёт, когда дорвётесь до таблицы с миллионами строк и случайно запустите SELECT * FROM huge_table без ограничения — клиент может зависнуть надолго.
И ещё: WHERE со строками требует кавычек, а сравнение с NULL пишется особо:
WHERE city = 'Москва' -- строка в одинарных кавычках
WHERE deleted_at IS NULL -- НЕ "= NULL", а IS NULL
Это частая ошибка новичков: = NULL всегда даёт «неизвестно» и не вернёт строк.