Команда ORDER BY (сортировка записей по определенному полю при выборе из базы данных)
Команда ORDER BY позволяет сортировать записи по определенному полю при выборе из базы данных.
Синтаксис
Сортировка по 1 полю:
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 (code.mu/sql/where.html) не обязательно - если его не поставить, будут выбраны все записи:
SELECT * FROM имя_таблицы ORDER BY поле
Примеры
Все примеры будут по таблице workers.
id | name | age-возраст | salary-зарплата |
---|---|---|---|
1 | Дима | 23 | 400 |
2 | Петя | 25 | 500 |
3 | Вася | 23 | 500 |
4 | Коля | 30 | 1000 |
5 | Иван | 27 | 500 |
6 | Кира | 28 | 1000 |
Давайте получим все записи из таблицы и отсортируем их по возрастанию возраста:
SELECT * FROM workers WHERE id>0 ORDER BY age
SQL запрос выберет строки в следующем порядке:
id | name | age-возраст | salary-зарплата |
---|---|---|---|
1 | Дима | 23 | 400 |
3 | Вася | 23 | 500 |
2 | Петя | 25 | 500 |
5 | Иван | 27 | 500 |
6 | Кира | 28 | 1000 |
4 | Коля | 30 | 1000 |
Так как выбираются все записи, то блок WHERE можно не указывать:
SELECT * FROM workers ORDER BY age
Можно также указать тип сортировки в явном виде ASC результат от этого не изменится:
SELECT * FROM workers ORDER BY age ASC
Давайте теперь отсортируем записи поубыванию возраста:
SELECT * FROM workers ORDER BY age DESC
SQL запрос выберет строки в следующем порядке:
id | name | age-возраст | salary-зарплата |
---|---|---|---|
4 | Коля | 30 | 1000 |
6 | Кира | 28 | 1000 |
5 | Иван | 27 | 500 |
2 | Петя | 25 | 500 |
1 | Дима | 23 | 400 |
3 | Вася | 23 | 500 |
Давайте теперь отсортируем записи одновременно по возрастанию возраста и по убыванию зарплаты.
При этом записи сначала будут сортироваться по возрасту, а те записи, в которых возраст одинаковый (в нашем случае - 23), будут располагаться по убыванию зарплаты:
SELECT * FROM workers WHERE id>0 ORDER BY age ASC, salary DESC
SQL запрос выберет строки в следующем порядке:
id | name | age-возраст | salary-зарплата |
---|---|---|---|
3 | Вася | 23 | 500 |
1 | Дима | 23 | 400 |
2 | Петя | 25 | 500 |
5 | Иван | 27 | 500 |
6 | Кира | 28 | 1000 |
4 | Коля | 30 | 1000 |
Давайте при тех же условиях (т.е. сначала сортировка по возрасту) отсортируем по возрастанию зарплаты.
Теперь 1-я и 2-я запись поменяются местами так, чтобы сначала шла меньшая зарплата, а потом - бОльшая:
SELECT * FROM workers WHERE id>0 ORDER BY age ASC, salary DESC
SQL запрос выберет строки в следующем порядке:
id | name | age-возраст | salary-зарплата |
---|---|---|---|
1 | Дима | 23 | 400 |
3 | Вася | 23 | 500 |
2 | Петя | 25 | 500 |
5 | Иван | 27 | 500 |
6 | Кира | 28 | 1000 |
4 | Коля | 30 | 1000 |
code.mu/sql/order-by.html