ORDER BY: Сортировка результатов запроса SQL на примерах

Антон Меринов

Антон Меринов

Автор статьи. Интересы, навыки: Профессиональное администрирование СУБД Oracle Database, веб-разработка, IT-World. Подробнее.

 
 
 

Строки результатов запроса, как и строки таблицы базы данных, не имеют оп­ределенного порядка. Но, включив в инструкцию SELECT предложение ORDER BY, можно отсортировать результаты запроса. Это предложение, синтаксическая диа­грамма которого изображена на рис. 1, содержит список имен или порядковых номеров столбцов, разделенных запятыми. Например, результаты следующего за­проса отсортированы по двум столбцам, REGION и CITY.

Показать фактические объемы продаж для каждого офиса, отсортированные в алфа­витном порядке по регионам, а в каждом регионе — по городам.

SELECT CITY, REGION, SALES
    FROM OFFICES
  ORDER BY REGION, CITY;

CITY               REGION            SALES
------------     --------     ------------
Atlanta           Eastern      $367,911.00
Chicago           Eastern      $735,042.00
New York          Eastern      $692,637.00
Denver            Western      $186,042.00
Los Angeles       Western      $835,915.00

Рис. 1. Синтаксическая диаграмма предложения ORDER ВУ

Первый указанный в предложении ORDER BY столбец (REGION) является стар­шим ключом сортировки; столбцы, следующие за ним (в данном примере CITY), являются младшими ключами, что позволяет сортировать строки результатов с одинаковыми старшими ключами. Предложение ORDER BY позволяет выполнять сортировку в возрастающем или убывающем порядке, при этом сортируя резуль­таты запроса по любому элементу списка возвращаемых столбцов.

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

Вывести список офисов, отсортированный по фактическим объемам продаж в поряд­ке убывания.

SELECT CITY, REGION, SALES
    FROM OFFICES
  ORDER BY SALES DESC;

CITY               REGION            SALES
------------     --------     ------------
 Los Angeles      Western      $835,915.00
     Chicago      Eastern      $735,042.00
    New York      Eastern      $692,637.00
     Atlanta      Eastern      $367,911.00
      Denver      Western      $186,042.00

Как видно из рис. 13, чтобы определить порядок сортировки по возрастанию, необходимо использовать ключевое слово ASС, однако из-за того, что этот порядок принят по умолчанию, ключевое слово ASС обычно не указывают.

Если столбец результатов запроса, используемый для сортировки, является вы­числяемым, то у него нет имени, которое можно указать в предложении сорти­ровки. В таком случае вместо имени столбца необходимо указать его порядковый номер или повторить выражение в предложении ORDER BY, как в приведенном далее примере. Использование номера столбца — более старый способ, который не рекомендуется к применению, как более подверженный ошибкам (например, при изменении порядка столбцов в предложении select).

Вывести список всех офисов, отсортированный по разности между фактическим и плановым объемами продаж в порядке убывания.

SELECT CITY, REGION, (SALES - TARGET)
    FROM OFFICES
  ORDER BY 3 DESC;

или:

SELECT CITY, REGION, (SALES – TARGET)
    FROM OFFICES
  ORDER BY (SALES – TARGET) DESC;

CITY               REGION       (SALES-TARGET)
------------     --------     ---------------
     New York     Eastern         $117,637.00
  Los Angeles     Western         $110,915.00
      Atlanta     Eastern          $17,911.00
      Chicago     Eastern         –$64,958.00
       Denver     Western        –$113,958.00

Полученные результаты запроса отсортированы по третьему столбцу, значения которого представляют собой разности между значениями столбцов SALES и TARGET для каждого офиса. Одновременно используя имена и номера столбцов, а также возрастающий и убывающий порядки сортировки, можно сортировать ре­зультаты запроса по достаточно сложному алгоритму, как это сделано в следую­щем примере.

Вывести список офисов, отсортированный в алфавитном порядке по названиям ре­гионов, а в каждом регионе — по разности между фактическим и плановым объе­мами продаж в порядке убывания.

SELECT CITY, REGION, (SALES - TARGET)
    FROM OFFICES
  ORDER BY REGION ASC, 3 DESC;

CITY               REGION      (SALES-TARGET)
------------     --------     ---------------
New York          Eastern         $117,637.00
Atlanta           Eastern          $17,911.00
Chicago           Eastern         –$64,958.00
Los Angeles       Western         $110,915.00
Denver            Western        –$113,958.00

Стандарт SQL позволяет управлять порядком сортировки отдельных символов в наборе, что может оказаться очень важным при работе с локализованными набора­ми символов (например, можно указать порядок сортировки для диакритических символов) или для обеспечения переносимости между системами с таблицами коди­ровок ASCII и EBCDIC. Однако эта часть стандарта SQL очень сложна, и во многих реализациях SQL либо вообще игнорируются вопросы, связанные с порядком сор­тировки, либо используются собственные схемы для управления сортировкой.

Предыдущие статьи:

  1. Простейщие запросы SQL: оператор SELECT
  2. Вычисления в SQL запросах Select
  3. Выборка всех данных из таблицы
  4. SELECT DISTINCT - выборка уникальных значений
  5. WHERE: отбор по условию в операторе SELECT

Вас заинтересует / Intresting for you:

SQL: Правила выполнения однота...
SQL: Правила выполнения однота... 1442 просмотров Дэйзи ак-Макарова Sat, 31 Jul 2021, 06:47:05
Операции SQL в базе данных Ora...
Операции SQL в базе данных Ora... 6770 просмотров Antoni Wed, 11 Apr 2018, 12:22:28
Типы данных SQL: стандарт ANSI...
Типы данных SQL: стандарт ANSI... 4860 просмотров Дэн Sat, 05 Jun 2021, 09:43:17
Правила именование объектов SQ...
Правила именование объектов SQ... 9753 просмотров Дэн Sat, 05 Jun 2021, 09:02:07
Войдите чтобы комментировать