Оператор ORDER BY онлайн урок.


Оператор ORDER BY предназначен для сортировки значений полей. Базовый синтаксис (с учетом уже изученных операторов) этого предложения выглядит следующим образом:

SELECT ... FROM ... WHERE ... GROUP BY ... ORDER BY поле-1 [ASC | DESC], поле-2 [ASC | DESC], ... , поле-3 [ASC | DESC]

Сортировка по умолчанию выполняется по возрастанию числовых значений или по алфавиту строковых значений. Строки при этом сравниваются посимвольно - как в словаре.

Например, получим все записи таблицы, отсортированные по алфавиту:

SELECT * FROM student ORDER BY name;
+----+---------+------+-----------+
| id | name | age | phone |
+----+---------+------+-----------+
| 4 | Andy | 20 | 244-34-12 |
| 6 | Andy | 24 | 323-43-98 |
| 3 | Bob | 23 | 456-12-55 |
| 8 | Jeff | 25 | 213-56-23 |
| 2 | John | 27 | 123-65-12 |
| 1 | Mike | 25 | 345-65-78 |
| 7 | Mike | 23 | 313-54-21 |
| 5 | Rita | 21 | 432-65-11 |
| 9 | Stanley | 23 | 111-23-43 |
+----+---------+------+-----------+
9 rows in set (0.08 sec)

Тут мы видим, что записи отсортированы по имени студента - по алфавиту. Для сортировки в обратном порядке необходимо записать атрибут DESC после указанного поля. Запишем запрос для сортировки по возрасту, от больших значений к меньшим.

SELECT * FROM student ORDER BY age DESC;
+----+---------+------+-----------+
| id | name | age | phone |
+----+---------+------+-----------+
| 2 | John | 27 | 123-65-12 |
| 1 | Mike | 25 | 345-65-78 |
| 8 | Jeff | 25 | 213-56-23 |
| 6 | Andy | 24 | 323-43-98 |
| 3 | Bob | 23 | 456-12-55 |
| 7 | Mike | 23 | 313-54-21 |
| 9 | Stanley | 23 | 111-23-43 |
| 5 | Rita | 21 | 432-65-11 |
| 4 | Andy | 20 | 244-34-12 |
+----+---------+------+-----------+
9 rows in set (0.00 sec)

В запросе можно комбинировать сортировки по разным полям. Это значит, что таблица будет сначала отсортирована по первому указанному полю (с учетом порядка), а после этого - по второму (тоже с учетом порядка)

SELECT * FROM student ORDER BY name DESC, age ASC;
+----+---------+------+-----------+
| id | name | age | phone |
+----+---------+------+-----------+
| 9 | Stanley | 23 | 111-23-43 |
| 5 | Rita | 21 | 432-65-11 |
| 7 | Mike | 23 | 313-54-21 |
| 1 | Mike | 25 | 345-65-78 |
| 2 | John | 27 | 123-65-12 |
| 8 | Jeff | 25 | 213-56-23 |
| 3 | Bob | 23 | 456-12-55 |
| 4 | Andy | 20 | 244-34-12 |
| 6 | Andy | 24 | 323-43-98 |
+----+---------+------+-----------+
9 rows in set (0.00 sec)

Тут мы сначала отсортировали таблицу по именам в обратном порядке (name DESC), а потом, те записи, в которых дублируются значения в поле name (для Mike, Andy) будут отсортированы по возрасту от меньших к большим (age ASC). При этом атрибут ASC мы написали для наглядности, он не обязателен.

Проверьте свои знания
Таблица country: получить полную таблицу упорядоченную по названию страны. Получить полную таблицу упорядоченную по названию континентов и по названию страны.