English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Предложение ORDER BY SQL

В этом руководстве вы узнаете, как сортировать данные, возвращаемые запросом SELECT SQL.

Сортировка результатов

Обычно, когда вы используете предложение SELECT для получения данных из таблицы, строки в результатах запроса не имеют определенного порядка. Если вы хотите упорядочить результаты запроса по определенному порядку, вы можете указать предложение ORDER BY в конце предложения, которое скажет программе, как сортировать возвращаемые данные запроса. По умолчанию порядок сортировки составляет возрастание.

Грамматика

Предложение ORDER BY используется для сортировки возвращаемых данных запроса по возрастанию или убыванию. Основная грамматика предложения может быть дана следующим образом:

SELECT column_list FROM table_name ORDER BY column_name ASC|DESC;

Здесь,column_listявляется таблицей базы данных, из которой нужно получить значения.имя,Возраст,Странаи других столбцов/полейимя, а такжеcolumn_nameявляется именем столбца, по которому нужно выполнить сортировку. Давайте посмотрим на несколько примеров, чтобы понять, как это работает на практике.

Рассмотрим, что у нас есть в базе данныхemployeesТаблица, которая имеет следующие записи:

+--------+--------------+------------+--------+---------+
| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      1 | Ethan Hunt   | 2001-05-01 |   5000 |       4 |
|      2 | Tony Montana | 2002-07-15 |   6500 |       1 |
|      3 | Sarah Connor | 2005-10-18 |   8000 |       5 |
|      4 | Rick Deckard | 2007-01-03 |   7200 |       3 |
|      5 | Martin Blank | 2008-06-24 |   5600 |    NULL |
+--------+--------------+------------+--------+---------+

排序 по одному столбцу

Следующие SQL-запросы будут извлекать изemployeesВ таблице возвращается все employee, и они сортируются поemp_nameСортировка результатов по столбцу.

SELECT * FROM employees 
ORDER BY emp_name ASC;

Вы можете пропустить опцию ASC и использовать следующую грамматику. Она вернет такой же результат, как и предыдущая команда, так как по умолчанию SQL сортирует в порядке возрастания:

SELECT * FROM employees 
ORDER BY emp_name;

После выполнения команды вы получите следующий вывод:

+--------+--------------+------------+--------+---------+
| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      1 | Ethan Hunt   | 2001-05-01 |   5000 |       4 |
|      5 | Martin Blank | 2008-06-24 |   5600 |    NULL |
|      4 | Rick Deckard | 2007-01-03 |   7200 |       3 |
|      3 | Sarah Connor | 2005-10-18 |   8000 |       5 |
|      2 | Tony Montana | 2002-07-15 |   6500 |       1 |
+--------+--------------+------------+--------+---------+

Таким образом, вы можете использовать опцию DESC для выполнения сортировки в обратном порядке. Следующие инструкции будут сортировать по числовому значениюЗарплатаРезультаты сортировки по убыванию по столбцу (salary).

SELECT * FROM employees 
ORDER BY salary DESC;

В этот раз вы получите следующий результат:

+--------+--------------+------------+--------+---------+
| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      3 | Sarah Connor | 2005-10-18 |   8000 |       5 |
|      4 | Rick Deckard | 2007-01-03 |   7200 |       3 |
|      2 | Tony Montana | 2002-07-15 |   6500 |       1 |
|      5 | Martin Blank | 2008-06-24 |   5600 |    NULL |
|      1 | Ethan Hunt   | 2001-05-01 |   5000 |       4 |
+--------+--------------+------------+--------+---------+

Многостолбцовая сортировка

Вы также можете указать несколько столбцов для сортировки. Однако, изменения в результатном наборе будут не видны, если в таблице нет повторяющихся значений. Давайте найдем:

Чтобы лучше понять сортировку по нескольким столбцам, предположим, что у нас есть база данных с именемTraineesтаблицы, которая содержит следующие записи:

+----+------------+------------+-------------+--------+
| id | first_name | last_name  | birth_date  | gender |
+----+------------+------------+-------------+--------+
|  1 | Peter      | Parker      | 1998-03-04  |  M      |
|  2 | Harry      | Potter     | 2001-08-30  |  M     |
|  3 | Peter      | Pan        | 2004-09-19  |  M     |
|  4 | Alice      | Kingsleigh | 1999-07-02  |  F     |
|  5 | John       | Connor     | 2002-01-15  |  M     |
+----+------------+------------+-------------+--------+

Если вы внимательно посмотрите на таблицу, вы обнаружите, что у нас есть некоторые повторяющиеся значения. Однако, обучающиеся Peter Parker и Peter Pan имеют разные полные имена, но одно и то же имя.

Теперь выполните следующую команду, которая сортируетfirst_nameпроводится по столбцам результатного набораСортировка.

SELECT * FROM trainees 
ORDER BY first_name;

После выполнения, вы получите следующий результат:

+----+------------+------------+-------------+--------+
| id | first_name | last_name  | birth_date  | gender |
+----+------------+------------+-------------+--------+
|  4 | Alice      | Kingsleigh | 1999-07-02  |  F     |
|  2 | Harry      | Potter     | 2001-08-30  |  M     |
|  5 | John       | Connor     | 2002-01-15  |  M     |
|  1 | Peter      | Parker      | 1998-03-04  |  M      |
|  3 | Peter      | Pan        | 2004-09-19  |  M     |
+----+------------+------------+-------------+--------+

Теперь выполните эту команду, которая сортируетfirst_nameиlast_nameпроводится по столбцам результатного набораСортировка.

SELECT * FROM trainees 
ORDER BY first_name, last_name;
+----+------------+------------+-------------+--------+
| id | first_name | last_name  | birth_date  | gender |
+----+------------+------------+-------------+--------+
|  4 | Alice      | Kingsleigh | 1999-07-02  |  F     |
|  2 | Harry      | Potter     | 2001-08-30  |  M     |
|  5 | John       | Connor     | 2002-01-15  |  M     |
|  3 | Peter      | Pan        | 2004-09-19  |  M     |
|  1 | Peter      | Parker      | 1998-03-04  |  M      |
+----+------------+------------+-------------+--------+

Вы заметили разницу между предыдущим результатом и текущим результатом - в этот раз запись ученика «Peter Parker» сразу после «Peter Pan».

Поскольку имена двух участников обучения одинаковы «Peter», поэтому в этих двух участниках обученияlast_nameСтолбец выполняет вторичный сортиров, поэтому запись «Peter Parker» после «Peter Pan».

Внимание:Когда указывается несколько порядковых столбцов, результат сначала сортируется по первому столбцу, затем по второму столбцу к уже отсортированному списку, и так далее.