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

В предыдущей статье цикла вы освоили базовые команды SELECT и FROM и уже можете написать элементарный запрос к базе. В этой мы продолжим изучение английского (зачёркнуто) SQL и выучим ещё три слова: ORDER BY, ASC и DESC.

Если вы не знаете английский – можно открыть онлайн переводчик и найти перевод:

  1. ORDER BY – упорядочить (отсортировать) по;
  2. ASC – (сокращение от ascending – восходящий) порядок то есть сортировка от меньшего к большему (0, 1, 2, 3 .. ) в случае сортировки слов – по алфавиту (А -> Я);
  3. DESC – (сокращение от descending – нисходящий) порядок то есть сортировка от большего к меньшему (100, 99, 98 …). Слова в этом случае сортируются в порядке обратном алфавитному (Я -> А).

Как мы можем использовать эти ключевые слова в написании запросов? Например, так:

			SELECT name, score
FROM students
ORDER BY name ASC;
		

Если перевести запрос с английского на русский получим:

			ВЫБЕРИ имя и оценку
ИЗ ТАБЛИЦЫ студентов
УПОРЯДОЧИВ ПО имени ПО ВОЗРАСТАНИЮ;
		

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

			|------------------|-------|
| name             | score |
|------------------|-------|
| Илья Краснов     | 3     |
| Марина Кузина    | 4     |
| Сергей Петров    | 5     |
| Татьяна Говорова | 5     |
		

Как видите мы получили список студентов в алфавитном порядке. Выполним ещё задачу – отсортируем список студентов так чтобы в начале были студенты с более высокими оценками. Для этого напишем запрос:

			SELECT name, score FROM students ORDER BY score DESC;
		
			|------------------|-------|
| name             | score |
|------------------|-------|
| Сергей Петров    | 5     |
| Татьяна Говорова | 5     |
| Марина Кузина    | 4     |
| Илья Краснов     | 3     |
		

Как видите порядок записей изменился – в начале списка отличники Сергей и Татьяна, а Илья со своей тройкой оказался внизу списка. Уделим ещё пару минут нашим отличникам. Они оба имеют оценку 5, значит при выполнении нашего запроса с сортировкой обе записи имеют равный приоритет и то что Сергей оказался выше Татьяны – дело случая. База данных не гарантирует порядок строк кроме того который явно указан в запросе. Если нам принципиально чтобы студенты с равными оценками были упорядочены по имени придется уточнить запрос следующим образом:

			SELECT name, score FROM students ORDER BY score DESC, name ASC;
		

В этом запросе мы прописали что хотим получить данные отсортированные по убыванию оценки, а в случае если оценки равны – отсортировать такие строки по имени. Таким запросом мы гарантируем порядок выдачи строк вне зависимости от настроения базы данных.

Таким образом вы знаете уже пять слов из лексикона SQL и можете выполнить задания 3 и 9 на SQLtest.online

Следующий урок можно найти здесь а вопросы по теме задать можно тут.

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

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

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

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

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

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

SELECT name FROM Company ORDER BY name;

Сортировка по возрастанию и убыванию для основных типов

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

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

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

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

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

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

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

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

Выведем информацию о полётах, отсортированную по городу вылета самолёта в порядке возрастания и по городу прибытия в аэропорт в порядке убывания, из таблицы Trip:

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

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

Демонстрация работы сортировки

При выборке данных бывает важно получить их в определенном упорядоченном виде. Сортировка может быть выполнена по любым полям с любым типом данных. Это может быть сортировка по возрастанию или убыванию для числовых полей. Для символьных (текстовых) полей это может быть сортировка в алфавитном порядке, хотя по сути, она так же является сортировкой по возрастанию или убыванию. Она так же может быть выполнена в любых направлениях – от А, до Я, и наоборот от Я, до А.

Суть процесса сортировки заключается к приведению последовательности к определенному порядку. Подробней о сортировки можно узнать в статье «Алгоритмы сортировки». Например, сортировка произвольной числовой последовательности по возрастанию:

2, 4, 1, 5, 9

должна привести к упорядоченной последовательности:

1, 2, 4, 5, 6

Аналогично, при сортировке по возрастанию строковых значений:

Иванов Иван, Петров Петр, Иванов Андрей

результат должен быть:

Иванов Андрей, Иванов Иван, Петров Петр

Здесь строка «Иванов Андрей» перешла в начало, так как сравнение строк производится посимвольно. Обе строки начинаются одинаковых символов «Иванов «. Так как символ «А» в слове «Андрей» идет раньше в алфавите, чем символ «И» в слове «Иван», то эта строка будет поставлена раньше.

Сортировка в запросе SQL

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

Для примеров используем таблицу товаров goods:

num
(номер товара)
title
(название)
price
(цена)
1 Мандарин 50
2 Арбуз 120
3 Ананас 80
4 Банан 40

Данные здесь уже упорядочены по столбцу «num». Теперь, построим запрос, который выведет таблицу с товарами, упорядоченными в алфавитном порядке:

SELECT * FROM goods ORDER BY title

SELECT * FROM goods – указывает выбрать все поля из таблицы goods;

ORDER BY – команда сортировки;

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

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

num title price
3 Ананас 80
2 Арбуз 120
4 Банан 40
1 Мандарин 50

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

Направление сортировки

По умолчанию, команда ORDER BY выполняет сортировку по возрастанию. Чтобы управлять направлением сортировки вручную, после имени столбца указывается ключевое слово ASC (по возрастанию) или DESC (по убыванию). Таким образом, чтобы вывести нашу таблицу в порядке убывания цен, нужно задать запрос так:

SELECT * FROM goods ORDER BY price DESC

Сортировка по возрастанию цены будет:

SELECT * FROM goods ORDER BY price ASC

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

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

column1 column2 column3
3 1 c
1 3 c
2 2 b
2 1 b
1 2 a
1 3 a
3 4 a

Отсортируем таблицу по следующим правилам:

SELECT * FROM mytable ORDER BY column1 ASC, column2 DESC, column3 ASC

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

column1 column2 column3
1 3 a
1 3 c
1 2 a
2 2 b
2 1 b
3 1 a
3 1 c

Порядок команды ORDER BY в запросе

Сортировка строк чаще всего проводится вместе с условием на выборку данных. Команда ORDER BY ставится после условия выборки WHERE. Например, выбираем товары с ценой меньше 100 рублей, упорядочив по названию в алфавитном порядке:

SELECT * FROM goods WHERE price < 100 ORDER BY title ASC

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

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

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

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

SELECT
    id,
    username,
    created_at
FROM users ORDER BY username;
id username

12

Abelardo58

33

Alanna99

58

Alena17

39

Alfonzo_Lehner

44

Amely1

…​

View on DB Fiddle

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

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

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

SELECT
    id,
    username,
    created_at
FROM users ORDER BY created_at;
id username created_at

16

Davonte78

2022-06-13T20:45:36.590Z

61

Carmela.Raynor42

2022-06-13T20:49:36.072Z

67

Gertrude_Hand29

2022-06-13T20:49:39.486Z

46

Edd_Harris

2022-06-13T20:58:22.247Z

13

Tina_Huels

2022-06-13T20:59:54.222Z

…​

View on DB Fiddle

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

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Таблетки для очистки стиральной машины инструкция
  • Должностная инструкция главного инженера теплоснабжающей организации
  • Форсип сироп для детей инструкция по применению
  • Gommage exfoliant peau neuve clarins инструкция по применению
  • Как посмотреть пенсионные накопления через госуслуги пошаговая инструкция с телефона