В этом учебном материале вы узнаете, как использовать 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 в порядке возрастания.