Команда ORDER BY позволяет сортировать записи по определенному полю при выборе из базы данных.

См. также команду LIMIT, которая ограничивает количество выбираемых записей.

Синтаксис

Сортировка по одному полю:

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 поле

Примеры

Все примеры будут по этой таблице 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

Пример

Давайте при тех же условиях (т.е. сначала сортировка по возрасту) отсортируем по возрастанию зарплаты.

Теперь первая и вторая запись поменяются местами так, чтобы сначала шла меньшая зарплата, а потом - большая:

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