В этом учебном материале вы узнаете, как использовать SQL оператор ORDER BY с синтаксисом и примерами.
Описание
SQL оператор ORDER BY используется для сортировки записей в наборе результатов запроса SELECT.
Синтаксис
Синтаксис для оператора ORDER BY в SQL.
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 оператор.
|
1 2 3 |
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.
|
1 2 3 |
SELECT * FROM customers ORDER BY last_name ASC; |
Большинство программистов пропускают атрибут ASC при сортировке в порядке возрастания.
Пример - сортировка результатов по убыванию
При сортировке набора результатов в порядке убывания вы используете атрибут DESC в предложении ORDER BY. Давайте внимательнее посмотрим.
В этом примере у нас есть таблица suppliers со следующими данными:
| supplier_id | supplier_name | city | state |
|---|---|---|---|
| 100 | Yandex | Moscow | Russian |
| 200 | Lansing | Michigan | |
| 300 | Oracle | Redwood City | California |
| 400 | Bing | Redmond | Washington |
| 500 | Yahoo | Sunnyvale | Washington |
| 600 | DuckDuckGo | Paoli | Pennsylvania |
| 700 | Qwant | Paris | France |
| 800 | Menlo Park | California | |
| 900 | Electronic Arts | San Francisco | California |
Введите следующий SQL оператор.
|
1 2 3 4 |
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 | 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 оператор.
|
1 2 3 4 5 |
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.
|
1 2 3 4 5 |
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 оператор.
|
1 2 3 4 5 |
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 в порядке возрастания.