В этом уроке разберем одну из самых часто используемых операций SQL — SELECT
. С помощью этой команды выполняют выборку данных из таблиц.
Запросы выполняемые в этом уроке, можно повторить локально, используя подготовленную базу данных или через сервис sqlfiddle
Выборка данных
В типичных веб-приложениях данные выбираются в 10 раз чаще, чем модифицируются. Для этого используют запрос SELECT
. Его простая форма выглядит так:
SELECT * FROM users;
Этот запрос достает все содержимое таблицы users
. Звездочка в примере означает все поля. Если поля нужны не все, то достаточно перечислить их через запятую вместо звездочки:
SELECT username, email FROM users;
Поля необязательно перечислять в том же порядке, в котором они идут в таблице. В результате такого запроса порядок полей в выводе будет соответствовать не тому, что в таблице, а указанному в части SELECT
.
На практике выборка, которая извлекает все записи, встречается редко. Дело в том, что у таблиц бывают большие объемы и нужно ограничивать вывод для конкретного пользователя. В этом случае используется WHERE
, который мы рассматривали в прошлом уроке. Он работает одинаково вне зависимости от типа выполняемого запроса, будь-то UPDATE
, DELETE
или SELECT
:
-- После WHERE указывается имя поля, которое сравнивается с некоторым значением (это один из вариантов)
-- Выбираем всех пользователей, которые родились ранее 21 октября 2018 года
SELECT * FROM users WHERE birthday < '2018-10-21';
Даже в таком варианте количество возможных записей может быть слишком большим. Поэтому нужно сделать так, чтобы из всей информации выбиралось ограниченное количество записей.
Пагинация
Когда записей очень много, можно реализовать пагинацию — она позволяет перемещаться по страницам, если их много. Этот механизм можно реализовать целиком в коде. Но так не делают, потому что количество данных, перегоняемых из базы данных в код, может быть огромным. На такую задачу не хватит ресурсов сервера. Поэтому пагинацию реализуют на уровне базы данных.
Чтобы реализовать его, используют LIMIT
— ограничение на количество записей, которые выбирают из базы данных:
SELECT * FROM users LIMIT 3;
Число после LIMIT
— это количество записей, которые мы хотим выбрать. В нашем примере запрос выберет не больше трех записей. Если в таблице их меньше, то выберутся все. Количество записей в лимите можно увеличивать или уменьшать.
SQL не гарантирует порядка в выборках выше. Если не указать сортировку, то мы не можем знать, в каком порядке вернутся данные. Поэтому в подобных выборках всегда присутствует секция ORDER BY
:
SELECT * FROM users ORDER BY birthday;
Такой запрос отсортирует данные по ключу birthday
в прямом порядке — кто родился раньше, будет выше. Если нужно отсортировать в обратном порядке, то надо добавить ключевое слово DESC
:
SELECT * FROM users ORDER BY birthday DESC;
Такой запрос вернет пользователей, отсортированных по дню рождения в обратном порядке — выше будут те, кто младше.
На этом базовые возможности SELECT
заканчиваются. Все части запроса, которые мы рассмотрели, комбинируются друг с другом и даже могут использоваться одновременно:
-- Порядок следования частей `WHERE`, `ORDER BY` и `LIMIT` в SQL запросе фиксирован.
SELECT username, created_at FROM users WHERE birthday < '2018-10-21' ORDER BY birthday DESC LIMIT 2;
Запрос читается практически как фраза на английском языке: "Выбрать поля username и created_at из таблицы users для пользователей, которые родились раньше 2018-10-21. Результат должен быть отсортирован по дню рождения в обратном порядке. Ограничить выборку двумя записями."
Чтобы было удобно считывать код, длинные запросы разбивают на строчки:
SELECT
username,
created_at
FROM users
WHERE birthday < '2018-10-21'
ORDER BY birthday DESC
LIMIT 2;
В будущих уроках мы рассмотрим каждую из этих частей подробнее.
Выводы
В этом уроке мы разобрали одну из самых часто используемых операций SQL — SELECT
. С ее помощью можно выбирать данные из таблицы. Кроме того, дополнительные секции в SELECT
позволяют ограничивать число выборки записей, а также упорядочивать их. Все эти возможности можно комбинировать в одном запросе.
Дополнительные материалы
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты