Какая инструкция sql используется для сортировки набора результатов

В этом учебном материале вы узнаете, как использовать SQL оператор ORDER BY с синтаксисом и примерами.

Описание

SQL оператор ORDER BY используется для сортировки записей в наборе результатов запроса SELECT.

Синтаксис

Синтаксис для оператора ORDER BY в SQL.

SELECT expressions
FROM tables
[WHERE conditions]
ORDER BY expression [ ASC | DESC ];

Параметры или аргумент

expressions
Столбцы или расчеты, которые вы хотите получить
tables
Таблицы, из которых вы хотите получить записи. В предложении FROM должна быть указана хотя бы одна таблица
WHERE conditions
Необязательный. Условия, которые должны быть выполнены для записей, которые будут выбраны
ASC
Необязательный. ASC сортирует результирующий набор в порядке возрастания по expressions. Это поведение по умолчанию, если модификатор не указан.
DESC
Необязательный. DESC сортирует результирующий набор в порядке убывания по expressions

Примечание

  • Если модификатор ASC или DESC не указан в предложении ORDER BY, результаты будут отсортированы по expressions в порядке возрастания. Это эквивалентно ORDER BY expressions ASC

Пример — сортировка результатов по возрастанию

Чтобы отсортировать результаты в порядке возрастания, вы можете указать атрибут ASC. Если после поля в предложении ORDER BY не указано значение (ASC или DESC), порядок сортировки по умолчанию будет соответствовать возрастающему. Давайте рассмотрим это дальше.
В этом примере у нас есть таблица customers со следующими данными:

customer_id first_name last_name favorite_website
4000 Justin Bieber google.com
5000 Selena Gomez bing.com
6000  Mila Kunis yahoo.com
7000 Tom Cruise oracle.com
8000 Johnny Depp NULL
9000 Russell Crowe google.com

Введите следующий SQL оператор.

SELECT *

  FROM customers

ORDER BY last_name;

Будет выбрано 6 записей. Вот результаты, которые вы должны получить.

customer_id first_name last_name favorite_website
4000 Justin Bieber google.com
9000 Russell Crowe google.com
7000 Tom Cruise oracle.com
8000 Johnny Depp NULL
5000 Selena Gomez bing.com
6000  Mila Kunis yahoo.com

В этом примере будут возвращены все записи из таблицы customers, отсортированные по полю last_name в порядке возрастания, и будет эквивалентен следующему SQL предложению ORDER BY.

SELECT *

  FROM customers

ORDER BY last_name ASC;

Большинство программистов пропускают атрибут ASC при сортировке в порядке возрастания.

Пример — сортировка результатов по убыванию

При сортировке набора результатов в порядке убывания вы используете атрибут DESC в предложении ORDER BY. Давайте внимательнее посмотрим.
В этом примере у нас есть таблица suppliers со следующими данными:

supplier_id supplier_name city state
100 Yandex Moscow Russian
200 Google Lansing Michigan
300 Oracle Redwood City California
400 Bing Redmond Washington
500 Yahoo Sunnyvale Washington
600 DuckDuckGo Paoli Pennsylvania
700 Qwant Paris France
800 Facebook Menlo Park California
900 Electronic Arts San Francisco California

Введите следующий SQL оператор.

SELECT *

  FROM suppliers

WHERE supplier_id > 40

ORDER BY supplier_id DESC;

Будет выбрано 5 записей. Вот результаты, которые вы должны получить.

supplier_id supplier_name city state
900 Electronic Arts San Francisco California
800 Facebook Menlo Park California
700 Qwant Paris France
600 DuckDuckGo Paoli Pennsylvania
500 Yahoo Sunnyvale Washington

В этом примере будет отсортирован набор результатов по полю supplier_id в порядке убывания.

Пример — сортировка результатов по относительной позиции

Вы также можете использовать SQL оператор ORDER BY для сортировки по относительной позиции в наборе результатов, где первое поле в наборе результатов равно 1, второе поле равно 2, третье поле равно 3 и т.д.
В этом примере у нас есть таблица products со следующими данными:

product_id product_name category_id
1 Pear 50
2 Banana 50
3 Orange 50
4 Apple 50
5 Bread 75
6 Sliced Ham 25
7 Kleenex NULL

Теперь введите следующий SQL оператор.

SELECT product_id,

       product_name

  FROM products

WHERE product_name <> ‘Bread’

ORDER BY 1 DESC;

Будет выбрано 6 записей. Вот результаты, которые вы должны получить.

product_id product_name
7 Kleenex
6 Sliced Ham
4 Apple
3 Orange
2 Banana
1 Pear

В этом примере результаты сортируются по полю product_id в порядке убывания, поскольку поле product_id находится в позиции № 1 в наборе результатов и будет эквивалентно следующему SQL оператору ORDER BY.

SELECT product_id,

       product_name

  FROM products

WHERE product_name <> ‘Bread’

ORDER BY product_id DESC;

Пример — использование атрибутов ASC и DESC

При сортировке набора результатов с помощью SQL предложения ORDER BY вы можете использовать атрибуты ASC и DESC в одном операторе SELECT.
В этом примере давайте использовать ту же таблицу products, что и в предыдущем примере.

product_id product_name category_id
1 Pear 50
2 Banana 50
3 Orange 50
4 Apple 50
5 Bread 75
6 Sliced Ham 25
7 Kleenex NULL

Теперь введите следующий SQL оператор.

SELECT *

  FROM products

WHERE product_id <>

ORDER BY category_id DESC,

  product_name ASC;

Будет выбрано 6 записей. Вот результаты, которые вы должны получить.

product_id product_name category_id
5 Bread 75
4 Apple 50
2 Banana 50
3 Orange 50
1 Pear 50
6 Sliced Ham 25

В этом примере возвращаются записи, отсортированные по полю category_id в порядке убывания, а вторичная сортировка — по полю product_name в порядке возрастания.

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

Общая структура запроса с оператором ORDER BY

SELECT поля_таблиц FROM наименование_таблицы
WHERE ...
ORDER BY столбец_1 [ASC | DESC][, столбец_n [ASC | DESC]]

Где ASC и DESC — направление сортировки:

  • ASC — сортировка по возрастанию (по умолчанию)
  • DESC — сортировка по убыванию

Сортировка по нескольким столбцам

Для сортировки результатов по двум или более столбцам их следует указывать
через запятую.

...ORDER BY столбец_1 [ASC | DESC], столбец_2 [ASC | DESC];

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

Правило сортировки применяется только к тому столбцу, за которым оно следует.

ORDER BY столбец_1, столбец_2 DESC

не то же самое, что

ORDER BY столбец_1 DESC, столбец_2 DESC

Примеры использования

  • Выведем названия авиакомпаний в алфавитном порядке из таблицы Company:

    Сортировка строковых данных по возрастанию подразумевает сортировку в лексикографическом (алфавитном) порядке.

    SELECT name FROM Company ORDER BY name;
    
  • Выведем информацию о полётах, отсортированную по городу вылета самолёта в порядке возрастания и по городу прибытия в аэропорт в порядке убывания, из таблицы Trip:

    SELECT DISTINCT town_from, town_to FROM Trip
    ORDER BY town_from, town_to DESC;
    

    В данном примере в начале записи сортируются по полю town_from. Затем там, если есть несколько записей с одинаковым значением в поле town_from,
    то отрабатывает обратная сортировка по полю town_to.

Допустим, нам нужно отсортировать данные в базе:

Сортировка строк

Сортировка задается с помощью оператора ORDER BY. За ней следует имя поля, по которому происходит сортировка:

SELECT * FROM users ORDER BY username;

Такой запрос вернет всю информацию о пользователях, отсортированную по username. Если порядок не указан, то сортировка происходит по возрастанию ASC.

Сортировка подразумевает сравнение значений между собой. По какому принципу база данных сортирует строки username, как в примере выше? Самый распространенный способ — лексикографический порядок, то есть по алфавиту.

База данных знает, как сравнивать не только числа, но и строки, и даты. Сортировка по датам — крайне частая операция, выглядит она идентично любой другой сортировке:

SELECT * FROM users ORDER BY created_at;

Здесь мы отсортировали пользователей по дате создания в прямом порядке, то есть по возрастанию.

Для сортировки данных, получаемых в результате запроса в языке SQL используется ключевое слово ORDER BY. База данных (далее – БД) сортирует данные по указанному параметру по убыванию, либо по возрастанию, в зависимости от условия указанного в запросе (ASC / DESC – соответственно).

Мы также можем использовать более одной колонки при использовании элемента ORDER BY.

Данный запрос имеет следующий общий вид:


SELECT колонка1, колонка2 ... колонкаN
FROM имя_таблицы
[WHERE условие] 
[ORDER BY колонка1, колонка2 ... колонкаN] [ASC | DESC];

Пример:

Предположим, что у нас есть таблица developers, которая содержит следующие данные:


+----+-------------------+------------+------------+--------+
| ID | NAME              | SPECIALTY  | EXPERIENCE | SALARY |
+----+-------------------+------------+------------+--------+
|  1 | Eugene Suleimanov | Java       |          2 |   2500 |
|  2 | Peter Romanenko   | Java       |          3 |   3500 |
|  3 | Andrei Komarov    | JavaScript |          3 |   2500 |
|  4 | Konstantin Geiko  | C#         |          2 |   2000 |
|  5 | Asya Suleimanova  | UI/UX      |          2 |   1800 |
+----+-------------------+------------+------------+--------+

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


mysql> SELECT * FROM developers ORDER BY SALARY ASC;

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


+----+-------------------+------------+------------+--------+
| ID | NAME              | SPECIALTY  | EXPERIENCE | SALARY |
+----+-------------------+------------+------------+--------+
|  5 | Asya Suleimanova  | UI/UX      |          2 |   1800 |
|  4 | Konstantin Geiko  | C#         |          2 |   2000 |
|  1 | Eugene Suleimanov | Java       |          2 |   2500 |
|  3 | Andrei Komarov    | JavaScript |          3 |   2500 |
|  2 | Peter Romanenko   | Java       |          3 |   3500 |
+----+-------------------+------------+------------+--------+

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


mysql> SELECT * FROM developers ORDER BY NAME ASC;

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


+----+-------------------+------------+------------+--------+
| ID | NAME              | SPECIALTY  | EXPERIENCE | SALARY |
+----+-------------------+------------+------------+--------+
|  3 | Andrei Komarov    | JavaScript |          3 |   2500 |
|  5 | Asya Suleimanova  | UI/UX      |          2 |   1800 |
|  1 | Eugene Suleimanov | Java       |          2 |   2500 |
|  4 | Konstantin Geiko  | C#         |          2 |   2000 |
|  2 | Peter Romanenko   | Java       |          3 |   3500 |
+----+-------------------+------------+------------+--------+

Мы также можем задать свой собственный прядок сортировки.
Для этого нам необходимо составить следующий запрос:


mysql> SELECT * FROM developers
 ORDER BY (CASE SPECIALTY 
 WHEN 'C#' THEN 1 
 WHEN 'Java' THEN 2 
 WHEN 'UI/UX' THEN 3 
 ELSE 10 END) ASC;

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


+----+-------------------+------------+------------+--------+
| ID | NAME              | SPECIALTY  | EXPERIENCE | SALARY |
+----+-------------------+------------+------------+--------+
|  4 | Konstantin Geiko  | C#         |          2 |   2000 |
|  1 | Eugene Suleimanov | Java       |          2 |   2500 |
|  2 | Peter Romanenko   | Java       |          3 |   3500 |
|  5 | Asya Suleimanova  | UI/UX      |          2 |   1800 |
|  3 | Andrei Komarov    | JavaScript |          3 |   2500 |
+----+-------------------+------------+------------+--------+

На этом мы заканчиваем изучение способов сортировки данных, полученных в результате обработки SQL запроса.
В следующей статье мы рассмотрим группировку данных.



Ключевое слово ORDER BY

Ключевое слово ORDER BY используется для сортировки результирующего набора в порядке возрастания или убывания.

Ключевое слово ORDER BY по умолчанию сортирует записи в порядке возрастания.
Чтобы отсортировать записи в порядке убывания, используйте ключевое слово DESC.

Синтаксис с ORDER BY

SELECT column1, column2, …
FROM table_name
ORDER BY column1, column2, … ASC|DESC;


Демо база данных

Ниже приведен выбор из таблицы «Customers» в образце базы данных Northwind:

CustomerID CustomerName ContactName Address City PostalCode Country
1 Alfreds Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Germany
2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitución 2222 México D.F. 05021 Mexico
3 Antonio Moreno Taquería Antonio Moreno Mataderos 2312 México D.F. 05023 Mexico
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
5 Berglunds snabbköp Christina Berglund Berguvsvägen 8 Luleå S-958 22 Sweden

Пример ORDER BY

Следующая инструкция SQL выбирает всех клиентов из таблицы «Customers», отсортированных по столбцу «Country»:



Пример ORDER BY DESC

Следующая инструкция SQL выбирает всех клиентов из таблицы «Customers», отсортированных по убыванию столбца «Country»:


Пример ORDER BY несколько столбцов

Следующая инструкция SQL выбирает всех клиентов из таблицы «Customers»,
отсортированных по столбцу «Country» и «CustomerName».
Это означает, что он заказывает по стране, но если некоторые строки имеют одну и ту же страну, он заказывает их по имени клиента:


Пример 2 ORDER BY несколько столбцов

Следующая инструкция SQL выбирает всех клиентов из таблицы «Customers»,
отсортированных по возрастанию по столбцу «Country» и по убыванию по столбцу «CustomerName»:

Пример

SELECT * FROM Customers
ORDER BY Country ASC, CustomerName DESC;

Попробуйте сами »


Понравилась статья? Поделить с друзьями:
  • Тарифное руководство на железнодорожном транспорте
  • Garmin venu sq инструкция на русском
  • Гемаза инструкция по применению в офтальмологии цена отзывы
  • Оперативного руководства экономикой
  • Диоскорея виллоза с 9 инструкция по применению