# Команда ORDER BY

Команда 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 поле`

## Таблицы для примеров

таблица employees
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`,
  которая ограничивает количество выбираемых записей

↑