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