ORDER BY-спецификация

Функция

Определение порядка сортировки выбранных данных.

Спецификация

<ORDER BY-спецификация>::=
ORDER [SIBLINGS] BY порядок сортировки [, …]
<тип сортировки>::=
<по возрастанию>::=
ASC
<по убыванию>::=
DESC
<сортировка NULL-значений>::=
NULLS {FIRST | LAST}

Синтаксические правила

  1. Опция SIBLINGS применяется только к иерархическим запросам (см. пункт «Иерархический запрос»).

  2. Если <запрос выборки> содержит <ORDER BY-спецификацию> и относится к одной таблице (обновляемому представлению), то результатом выполнения <запроса выборки> будет обновляемая таблица с заданным порядком упорядочения.

  3. Каждое <имя столбца> в <ORDER BY-спецификации> должно идентифицировать столбец <запроса выборки>.

    select * from auto order by model;
    select distinct model, make from auto order by model desc;
    select distinct model, make, cylnders from auto order by make asc, cylnders desc;
  4. <Значимое выражение> может быть логическим выражением.

    create or replace table tst (i int, b boolean);
    insert into tst values (1,TRUE);
    insert into tst values (2,FALSE);
    insert into tst values (1,TRUE);
    insert into tst values (1,TRUE);
    
    select * from tst order by not b;
     I B
    - -
    |1|T|
    |1|T|
    |1|T|
    |2|F|
    
  5. Именованный столбец может быть указан с помощью порядкового номера или по <имени столбца>. Неименованный столбец идентифицируется указанием:

    • <беззнакового целого>

      select distinct model, make, to_char(weight)|| ' кг.' "Вес" , year+1900 as "Год выпуска" 
        from auto
       where rowid = 1 order by model, 3,4 ;
      
       MODEL                MAKE   Вес        Год выпуска
      |MERCURY COMET GT V8 | FORD | 2900 кг. | 1971        |
    • или псевдонима

      create or replace table t(i int);
      insert into t (i) values (1),(2),(1),(2),(3);,
      
      select i,sum(i) as "Сумма" from t group by i order by "Сумма";
       I           Сумма
       -           -----
      |          1|                    2.0         |
      |          3|                    3.0         |
      |          2|                    4.0         |
  6. Каждое <беззнаковое целое> должно быть больше 0 и не больше числа столбцов таблицы, порождаемой <запросом выборки>.

  7. Если не указан вид сортировки, то по умолчанию выполняется сортировка по возрастанию.

  8. <Порядок сортировки> определяет относительную значимость упорядочиваемых столбцов. Сначала результат выборки упорядочивается по первому столбцу. Затем полученное упорядоченное множество повторно упорядочивается по второму столбцу и т.д.

    create table tab1 ( c1 varchar(10), c2 varchar(10));
    insert into tab1 values ('23456', 'abcd');
    insert into tab1 values ('13456', 'bacd');
    insert into tab1 values ('32456', 'cdba');
    insert into tab1 values ('13456', 'abcd');
    select * from tab1;
    | 23456 | abcd  |
    | 13456 | bacd  |
    | 32456 | cdba  |
    | 13456 | abcd  |
    select * from tab1 order by 1;
    | 13456 | bacd  |
    | 13456 | abcd  |
    | 23456 | abcd  |
    | 32456 | cdba  |
    select * from tab1 order by 1,2;
    | 13456 | abcd  |
    | 13456 | bacd  |
    | 23456 | abcd  |
    | 32456 | cdba  |
  9. Опция <сортировка NULL-значений> задаёт местоположение NULL-значений в отсортированном столбце: FIRST – перед отсортированными данными, LAST – в конце. Если опция не задана, по умолчанию используется LAST.

    create or replace table test(c char(1), i int);
    insert into test (c, i) values('a', 1);
    insert into test (c, i) values('b', null);
    insert into test (c, i) values(null, 3);
    insert into test (c, i) values('d', null);
    insert into test (c, i) values(null, 5);
    select * from test order by c nulls first, i desc nulls last;
    |NULL    | 5     |
    |NULL    | 3     |
    |a       | 1     |
    |b       | NULL  |
    |d       | NULL  |
  10. Если опция <сортировка NULL-значений> не задана, NULL-значения сортируются так, как если бы они имели наибольшее значение в выборке. Т.е. в случае сортировки по возрастанию (неявной или с использованием спецификации ASC) по умолчанию используется вариант NULLS LAST, в случае сортировки по убыванию (спецификация DESC) по умолчанию используется вариант NULLS FIRST.

  11. Операция ORDER BY запрещена для столбцов типа BLOB.

  12. Операция ORDER BY разрешена в подзапросах.