Команда ORDER BY позволяет сортировать записи по определенному полю при выборе из базы данных.
Синтаксис
Сортировка по одному полю:
SELECT * FROM имя_таблицы WHERE условие ORDER BY поле_для_сортировки
Можно сортировать не по одному, а по многим полям сразу:
SELECT * FROM имя_таблицы WHERE условие ORDER BY поле1, поле2...
По умолчанию записи сортируются по возрастанию,
чтобы отсортировать по убыванию - поставьте
DESC
:
SELECT * FROM имя_таблицы WHERE условие ORDER BY поле DESC
По умолчанию будет сортировка, будто поставлено
ASC
:
SELECT * FROM имя_таблицы WHERE условие ORDER BY поле ASC
Условие WHERE
не обязательно - если его не поставить, будут
выбраны все записи:
SELECT * FROM имя_таблицы ORDER BY поле
Таблицы для примеров
id айди |
name имя |
age возраст |
salary зарплата |
---|---|---|---|
1 | user1 | 23 | 400 |
2 | user2 | 25 | 500 |
3 | user3 | 23 | 500 |
4 | user4 | 30 | 900 |
5 | user5 | 27 | 500 |
6 | user6 | 28 | 900 |
Пример
Давайте получим все записи из таблицы и отсортируем их по возрастанию возраста:
SELECT * FROM employees WHERE id>0 ORDER BY age
SQL запрос выберет строки в следующем порядке:
id айди |
name имя |
age возраст |
salary зарплата |
---|---|---|---|
1 | user1 | 23 | 400 |
3 | user3 | 23 | 500 |
2 | user2 | 25 | 500 |
5 | user5 | 27 | 500 |
6 | user6 | 28 | 900 |
4 | user4 | 30 | 900 |
Так как выбираются все записи, то блок WHERE
можно не указывать:
SELECT * FROM employees ORDER BY age
Можно также указать тип сортировки в явном
виде - ASC
- результат от этого не
изменится:
SELECT * FROM employees ORDER BY age ASC
Пример
Давайте теперь отсортируем записи по убыванию возраста:
SELECT * FROM employees ORDER BY age DESC
SQL запрос выберет строки в следующем порядке:
id айди |
name имя |
age возраст |
salary зарплата |
---|---|---|---|
4 | user4 | 30 | 900 |
6 | user6 | 28 | 900 |
5 | user5 | 27 | 500 |
2 | user2 | 25 | 500 |
1 | user1 | 23 | 400 |
3 | user3 | 23 | 500 |
Пример
Давайте теперь отсортируем записи одновременно по возрастанию возраста и по убыванию зарплаты.
При этом записи сначала будут сортироваться по возрасту, а те записи, в которых возраст одинаковый (в нашем случае - 23), будут располагаться по убыванию зарплаты:
SELECT * FROM employees WHERE id>0 ORDER BY age ASC, salary DESC
SQL запрос выберет строки в следующем порядке:
id айди |
name имя |
age возраст |
salary зарплата |
---|---|---|---|
3 | user3 | 23 | 500 |
1 | user1 | 23 | 400 |
2 | user2 | 25 | 500 |
5 | user5 | 27 | 500 |
6 | user6 | 28 | 900 |
4 | user4 | 30 | 900 |
Пример
Давайте при тех же условиях (т.е. сначала сортировка по возрасту) отсортируем по возрастанию зарплаты.
Теперь первая и вторая запись поменяются местами так, чтобы сначала шла меньшая зарплата, а потом - большая:
SELECT * FROM employees WHERE id>0 ORDER BY age ASC, salary DESC
SQL запрос выберет строки в следующем порядке:
id айди |
name имя |
age возраст |
salary зарплата |
---|---|---|---|
1 | user1 | 23 | 400 |
3 | user3 | 23 | 500 |
2 | user2 | 25 | 500 |
5 | user5 | 27 | 500 |
6 | user6 | 28 | 900 |
4 | user4 | 30 | 900 |
Смотрите также
-
команду
LIMIT
,
которая ограничивает количество выбираемых записей