Сортировка возвращаемых данных (ORDER BY)

По умолчанию Oracle не возвращает запрошенные данные отсортированными. Для того, чтобы упорядочить данные полученные оператором SELECT используют конструкцию ORDER BY.

В этой фразе можно указать порядок сортировки для одного или нескольких столбцов в возрастающем или убывающем порядке для каждого из указанных столбцов. Если для порядка сортировки указано боле одного выражения, Oracle сортирует данные в порядке их появления в первом выражении. Если после этого в выходных данных останутся дубликаты, Oracle сортирует их в порядке, указанном в втором выражении, и так далее. Фраза ORDER BY обычно является последней в операторах языка структурированных запросов. Обычно в синтаксис фразы ORDER BY включаются как сам текст ORDER BY, так и имена столбцов, по которым Oracle должна упорядочить результаты, за каждым из которых может следовать специальная фраза, определяющая направление упорядочивания (asc для упорядочивания по возрастанию и desc для упорядочивания по убыванию). Значением по умолчанию для этой фразы является asc. Ниже приводится пример использования фразы ORDER BY:


SELECT name AS "ФИО", matches AS "Матчи", goals "Голы"
FROM russian_team
ORDER BY matches;


ФИОМатчиГолы
Саенко Иван Иванович139
Колодин Денис Алексеевич240
Торбинский Дмитрий Евгеньевич292
Зырянов Константин Георгиевич477
Сычев Дмитрий Евгеньевич4714
Павлюченко Роман Анатольевич4820
Жирков Юрий Валентинович480
Билялетдинов Динияр Ренатович486
Акинфеев Игорь Владимирович510
Семшов Игорь Петрович593
Анюков Александр Геннадьевич631
Семак Сергей Богданович654
Аршавин Андрей Сергеевич6816
Игнашевич Сергей Николаевич725



Пример сортировки выходных данных в убывающем порядке с использованием ключевого слова desc:

SELECT name AS "ФИО", matches AS "Матчи", goals "Голы"
FROM russian_team
ORDER BY goals DESC;


ФИОМатчиГолы
Павлюченко Роман Анатольевич4820
Аршавин Андрей Сергеевич6816
Сычев Дмитрий Евгеньевич4714
Саенко Иван Иванович139
Зырянов Константин Георгиевич477
Билялетдинов Динияр Ренатович486
Игнашевич Сергей Николаевич725
Семак Сергей Богданович654
Семшов Игорь Петрович593
Торбинский Дмитрий Евгеньевич292
Анюков Александр Геннадьевич631
Жирков Юрий Валентинович480
Акинфеев Игорь Владимирович510
Колодин Денис Алексеевич240

Вместо имен столбцов во фразе ORDER BY можно использовать порядковые номера, указывающие положение в таблице столбца, по которому следует выполнить упорядочение.

Следующим запросом мы сортируем футболистов по количеству проведенных матчей. Если количество сыгранных матчей одинаково, происходит сортировка по количеству забитых мячей.


SELECT name AS "ФИО", matches AS "Матчи", goals "Голы"
FROM russian_team
ORDER BY 2 DESC, 3 DESC;


ФИОМатчиГолы
Игнашевич Сергей Николаевич725
Аршавин Андрей Сергеевич6816
Семак Сергей Богданович654
Анюков Александр Геннадьевич631
Семшов Игорь Петрович593
Акинфеев Игорь Владимирович510
Павлюченко Роман Анатольевич4820
Билялетдинов Динияр Ренатович486
Жирков Юрий Валентинович480
Сычев Дмитрий Евгеньевич4714
Зырянов Константин Георгиевич477
Торбинский Дмитрий Евгеньевич292
Колодин Денис Алексеевич240
Саенко Иван Иванович139