Зарегистрируйтесь, чтобы продолжить обучение

Выборка данных Основы реляционных баз данных

В этом уроке разберем одну из самых часто используемых операций SQL — SELECT. С помощью этой команды выполняют выборку данных из таблиц.

Запросы выполняемые в этом уроке, можно повторить локально, используя подготовленную базу данных или через сервис sqlfiddle

Выборка данных

В типичных веб-приложениях данные выбираются в 10 раз чаще, чем модифицируются. Для этого используют запрос SELECT. Его простая форма выглядит так:

SELECT * FROM users;

SELECT всех полей из таблицы

Этот запрос достает все содержимое таблицы users. Звездочка в примере означает все поля. Если поля нужны не все, то достаточно перечислить их через запятую вместо звездочки:

SELECT username, email FROM users;

SELECT только определенных полей

Поля необязательно перечислять в том же порядке, в котором они идут в таблице. В результате такого запроса порядок полей в выводе будет соответствовать не тому, что в таблице, а указанному в части 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 позволяют ограничивать число выборки записей, а также упорядочивать их. Все эти возможности можно комбинировать в одном запросе.


Дополнительные материалы

  1. SELECT

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»