Сортировка возвращаемых данных (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;
ФИО | Матчи | Голы |
---|---|---|
Саенко Иван Иванович | 13 | 9 |
Колодин Денис Алексеевич | 24 | 0 |
Торбинский Дмитрий Евгеньевич | 29 | 2 |
Зырянов Константин Георгиевич | 47 | 7 |
Сычев Дмитрий Евгеньевич | 47 | 14 |
Павлюченко Роман Анатольевич | 48 | 20 |
Жирков Юрий Валентинович | 48 | 0 |
Билялетдинов Динияр Ренатович | 48 | 6 |
Акинфеев Игорь Владимирович | 51 | 0 |
Семшов Игорь Петрович | 59 | 3 |
Анюков Александр Геннадьевич | 63 | 1 |
Семак Сергей Богданович | 65 | 4 |
Аршавин Андрей Сергеевич | 68 | 16 |
Игнашевич Сергей Николаевич | 72 | 5 |
Пример сортировки выходных данных в убывающем порядке с использованием ключевого слова desc:
SELECT name AS "ФИО", matches AS "Матчи", goals "Голы"
FROM russian_team
ORDER BY goals DESC;
ФИО | Матчи | Голы |
---|---|---|
Павлюченко Роман Анатольевич | 48 | 20 |
Аршавин Андрей Сергеевич | 68 | 16 |
Сычев Дмитрий Евгеньевич | 47 | 14 |
Саенко Иван Иванович | 13 | 9 |
Зырянов Константин Георгиевич | 47 | 7 |
Билялетдинов Динияр Ренатович | 48 | 6 |
Игнашевич Сергей Николаевич | 72 | 5 |
Семак Сергей Богданович | 65 | 4 |
Семшов Игорь Петрович | 59 | 3 |
Торбинский Дмитрий Евгеньевич | 29 | 2 |
Анюков Александр Геннадьевич | 63 | 1 |
Жирков Юрий Валентинович | 48 | 0 |
Акинфеев Игорь Владимирович | 51 | 0 |
Колодин Денис Алексеевич | 24 | 0 |
Вместо имен столбцов во фразе ORDER BY можно использовать порядковые номера, указывающие положение в таблице столбца, по которому следует выполнить упорядочение.
Следующим запросом мы сортируем футболистов по количеству проведенных матчей. Если количество сыгранных матчей одинаково, происходит сортировка по количеству забитых мячей.
SELECT name AS "ФИО", matches AS "Матчи", goals "Голы"
FROM russian_team
ORDER BY 2 DESC, 3 DESC;
ФИО | Матчи | Голы |
---|---|---|
Игнашевич Сергей Николаевич | 72 | 5 |
Аршавин Андрей Сергеевич | 68 | 16 |
Семак Сергей Богданович | 65 | 4 |
Анюков Александр Геннадьевич | 63 | 1 |
Семшов Игорь Петрович | 59 | 3 |
Акинфеев Игорь Владимирович | 51 | 0 |
Павлюченко Роман Анатольевич | 48 | 20 |
Билялетдинов Динияр Ренатович | 48 | 6 |
Жирков Юрий Валентинович | 48 | 0 |
Сычев Дмитрий Евгеньевич | 47 | 14 |
Зырянов Константин Георгиевич | 47 | 7 |
Торбинский Дмитрий Евгеньевич | 29 | 2 |
Колодин Денис Алексеевич | 24 | 0 |
Саенко Иван Иванович | 13 | 9 |