Сортировка и ограничение: ORDER BY и LIMIT
Расставьте строки в нужном порядке, а затем оставьте только те, что нужны
Главная мысль: Таблица хранит строки, но не обещает никакого порядка.
ORDER BY позволяет отсортировать строки как вам угодно, а LIMIT — оставить только первые несколько. Вместе они отвечают на вопросы вроде «Кто три лучших игрока?»
К концу урока вы сможете:
- сортировать строки с помощью
ORDER BY— от меньшего к большему (ASC) или от большего к меньшему (DESC), - разрешать «ничьи», сортируя сразу по нескольким столбцам,
- оставлять только несколько строк с помощью
LIMIT, - пропускать строки с помощью
OFFSET, чтобы строить страницы, - писать запрос «топ-N», чтобы найти лучшие или худшие строки.
1. Наш пример: таблица рекордов игры
Каждый пример этого урока использует одну маленькую таблицу под названием players. Это таблица рекордов видеоигры. Создадим её один раз, чтобы все представляли одни и те же данные.
CREATE TABLE players (
id INT,
name VARCHAR(20),
score INT,
level INT,
country VARCHAR(15)
);
INSERT INTO players (id, name, score, level, country) VALUES
(1, 'Aisha', 950, 7, 'Kenya'),
(2, 'Bilal', 720, 5, 'Egypt'),
(3, 'Chen', 950, 8, 'China'),
(4, 'Diego', 610, 4, 'Peru'),
(5, 'Elena', 880, 6, 'Spain'),
(6, 'Farah', 720, 5, 'Iran'),
(7, 'Grace', 1040, 9, 'Kenya'),
(8, 'Hiro', 610, 4, 'Japan');
Если просто попросить всё, база данных вправе вернуть строки в любом порядке (часто в том, в каком они были сохранены):
SELECT name, score, level, country FROM players;
| name | score | level | country |
|---|---|---|---|
| Aisha | 950 | 7 | Kenya |
| Bilal | 720 | 5 | Egypt |
| Chen | 950 | 8 | China |
| Diego | 610 | 4 | Peru |
| Elena | 880 | 6 | Spain |
| Farah | 720 | 5 | Iran |
| Grace | 1040 | 9 | Kenya |
| Hiro | 610 | 4 | Japan |
Это беспорядочная таблица рекордов! Никто не хочет видеть рейтинг не по порядку. Давайте это исправим.