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 разрешена в подзапросах.