Сортировка SQL – Предложение ORDER BY. Сортировка данных в SQL (ORDER BY) Что делает конструкция order by asc


Следующий цикл:

Шаг 8. Простая сортировка

Если результат вашего SQL запроса должен стать исходным материалом некоего отчета, то вопрос сортировки в нем данных становится чрезвычайно важным, поскольку человеку, читающему неотсортированный должным образом отчет очень сложно быстро найти в нем нужную именно ему часть информации. Для сортировки данных по колонкам результата запроса (в нашем случае - по полям таблицы) в SQL используется ключевое слово ORDER BY. Пример самой простой сортировки приведен ниже. За основу взят запрос из шага 2: “Запрос с простым критерием отбора”. Сортируем сотрудников по полю S_NAME (Ф.И.О.).

SELECT S_NAME, S_EXPERIENCE FROM D_STAFF WHERE S_EXPERIENCE

Сортировка результата SQL запроса по одному полю.

Шаг 9. Сложная сортировка

Часто и даже практически всегда необходимо отсортировать данные более чем по одной колонке и не всегда в порядке возрастания. Синтаксис SQL предполагает после ключевого слова ORDER BY список колонок, разделенных запятой, а также, способ сортировки для каждой колонки: в порядке возрастания значений - ASC или порядке их убывания - DESC. В приведенном ниже примере мы показываем записи уже обо всех сотрудниках в порядке убывания их стажа. Сотрудников с одинаковым стажем сортируем в алфавитном порядке.

SELECT S_EXPERIENCE, S_NAME FROM D_STAFF ORDER BY S_EXPERIENCE DESC, S_NAME ASC


Сортировка результата SQL запроса по двум полям.

Довольно часто обратный порядок сортировки используют с колонками типа [дата]. Если дата хранит, например, дату занесения информации, то при обратной сортировке в самом начале списка оказываются те записи, которые были добавлены недавно относительно остальных. В случае если запрос извлекает из базы данных анонсы новостей, то мы получаем список анонсов, отсортированных в порядке убывания их актуальности, что может быть крайне полезным, поскольку читают анонсы обычно сверху вниз, да и на новостных сайтах показывают их не все, а только несколько наиболее “свежих”.

Предложение ORDER BY в Access сортирует записи, возвращенные запросом, по возрастанию или по убыванию значений указанного поля (полей).

Синтаксис

SELECT список_полей
FROM таблица
WHERE условие_отбора
[, поле2 ][, ...]]]

Инструкция SELECT, содержащая предложение ORDER BY, включает в себя следующие элементы:

Замечания

Предложение ORDER BY не является обязательным. Его следует использовать, когда необходимо отобразить данные в отсортированном виде.

По умолчанию применяется порядок сортировки по возрастанию (от А до Я, от 0 до 9). В двух приведенных ниже примерах показана сортировка имен сотрудников по фамилиям.

SELECT LastName, FirstName
FROM Employees
ORDER BY LastName;
SELECT LastName, FirstName
FROM Employees
ORDER BY LastName ASC;

Чтобы выполнить сортировку по убыванию (от Я до А, от 9 до 0), добавьте зарезервированное слово DESC в конце каждого поля, по которому вы хотите отсортировать записи. В примере ниже выполняется сортировка фамилий сотрудников в порядке убывания заработной платы.

SELECT LastName, Salary
FROM Employees
ORDER BY Salary DESC, LastName;

Если в предложении ORDER BY указать поле, содержащее данные типа Memo или объекты OLE, возникнет ошибка. Ядро СУБД Microsoft Access не поддерживает сортировку по полям этих типов.

Предложение ORDER BY обычно является последним элементом в инструкции SQL.

В предложение ORDER BY можно включать дополнительные поля. Сначала записи сортируются по полю, указанному в предложении ORDER BY первым. Затем для записей с одинаковыми значениями первого поля выполняется сортировка по полю, указанному вторым, и т. д.

Нередко возникает необходимость вывести результат запроса в определённом порядке, например, по алфавиту. Для этого в СУБД существует специальная функция на языке SQL - сортировка. При этом программист может выбрать, по каким полям и в каком порядке она будет происходить, чтобы добиться желаемого результата, не применяя серьёзных навыков программирования.

Что такое сортировка в базе данных?

Работа с базами данных постоянно связана с большим объёмом информации, которой необходимо определять порядок. В настоящее время существует целый ряд СУБД, имеющий широкий спектр функций, самыми популярными из которых являются Oracle и MS SQL. Сортировка информации, как одна из главных процедур в работе с БД, обеспечивается специальной встроенной функцией в каждой из них.

Ранжирование данных позволяет упростить процесс поиска, а также в некоторых случаях помогает решить некоторые задачи или оптимизировать работу программы. SQL-сортировка производится по отдельно выбранному полю, а при необходимости, в случае наличия одинаковых значений в элементах этого поля, можно указать дополнительные параметры, определяющие расположение строк.

Команда сортировки

SQL-сортировка в базе данных обеспечивается путём использования функции ORDER BY. Так, при выводе информации из базы данных, после указания столбцов и таблиц из которых будет произведено считывание, в запросе необходимо указать команду сортировки, после чего определить поле или поля, по которым будет производиться сортировка.

Например, если из таблицы People необходимо получить данные из полей Name и Age, при этом выведя результат в алфавитном порядке по столбцу Name, то это поможет сделать следующий запрос: SELECT Name, Age FROM People ORDER BY Name.

Как задать порядок сортировки?

Современные условия ставят перед программистами различные задачи, и порой необходимо предопределить, в каком порядке будет выведен результат - по убыванию или возрастанию, по алфавиту или в обратном порядке? И для этого на языке SQL порядок сортировки определяется добавлением ключевого слова в запрос. После выбора полей и таблиц, из которых будет получена желаемая информация, необходимо добавить ORDER BY, после чего указать имя столбца, по которому необходимо произвести сортировку.

Для получения обратного порядка необходимо после имени указать параметр DESC. В случае если упорядочить элементы необходимо по двум и более критериям, то столбцы указываются через запятую, а приоритет при ранжировке будет отдан тому полю, которое идет в списке первым. Стоит отметить, что выстраивание элементов в обратном порядке параметр DESC предусматривает лишь по одному полю, после названия которого указано это ключевое слово, поэтому при необходимости его нужно указать во всех выбранных столбцах.

Альтернативные методы сортировки

В случае отсутствия возможности использования встроенной функции SQL-сортировки, можно написать один из известных алгоритмов. При необходимости достижения самого быстрого упорядочивания элементов, стоит применить метод основанный на половинном разбивании массива элементов. Большой популярностью также обладают способы ранжирования "пузырьком", в котором два соседних элемента меняются местами в случае неверного расположения, "пирамидальная сортировка", отправляющая наибольший элемент в конец списка, а также "сортировка вставками", предопределяющая местоположение каждого элемента по очереди.

Собственноручное написание алгоритма не позволит существенно увеличить скорость сортировки, однако, поспособствует развитию навыков программирования, а также позволит модифицировать процесс, подстроив схему ранжирования под определённую базу данных для повышения эффективности работы программы.

При выборке данных бывает важно получить их в определенном упорядоченном виде. Сортировка может быть выполнена по любым полям с любым типом данных. Это может быть сортировка по возрастанию или убыванию для числовых полей. Для символьных (текстовых) полей это может быть сортировка в алфавитном порядке, хотя по сути, она так же является сортировкой по возрастанию или убыванию. Она так же может быть выполнена в любых направлениях – от А, до Я, и наоборот от Я, до А.

Суть процесса сортировки заключается к приведению последовательности к определенному порядку. Подробней о сортировки можно узнать в статье "Алгоритмы сортировки" Например, сортировка произвольной числовой последовательности по возрастанию:

2, 4, 1, 5, 9

должна привести к упорядоченной последовательности:

1, 2, 4, 5, 6

Аналогично, при сортировке по возрастанию строковых значений:

Иванов Иван, Петров Петр, Иванов Андрей

результат должен быть:

Иванов Андрей, Иванов Иван, Петров Петр

Здесь строка "Иванов Андрей" перешла в начало, так как сравнение строк производится посимвольно. Обе строки начинаются одинаковых символов "Иванов ". Так как символ "А" в слове "Андрей" идет раньше в алфавите, чем символ "И" в слове "Иван", то эта строка будет поставлена раньше.

Сортировка в запросе SQL

Для выполнения сортировки в строку запроса нужно добавить команду ORDER BY. После этой команды указывается поле, по которому производится сортировка.

Для примеров используем таблицу товаров goods:

num
(номер товара)
title
(название)
price
(цена)
1 Мандарин 50
2 Арбуз 120
3 Ананас 80
4 Банан 40

Данные здесь уже упорядочены по столбцу "num". Теперь, построим запрос, который выведет таблицу с товарами, упорядоченными в алфавитном порядке:

SELECT * FROM goods ORDER BY title

SELECT * FROM goods – указывает выбрать все поля из таблицы goods;

ORDER BY – команда сортировки;

title – столбец, по которому будет выполняться сортировка.

Результат выполнения такого запроса следующий:

num title price
3 Ананас 80
2 Арбуз 120
4 Банан 40
1 Мандарин 50

Так же можно выполнить сортировку для любого из полей таблицы.

Направление сортировки

По умолчанию, команда ORDER BY выполняет сортировку по возрастанию. Чтобы управлять направлением сортировки вручную, после имени столбца указывается ключевое слово ASC (по возрастанию) или DESC (по убыванию). Таким образом, чтобы вывести нашу таблицу в порядке убывания цен, нужно задать запрос так:

SELECT * FROM goods ORDER BY price DESC

Сортировка по возрастанию цены будет:

SELECT * FROM goods ORDER BY price ASC

Сортировка по нескольким полям

SQL допускает сортировку сразу по нескольким полям. Для этого после команды ORDER BY необходимые поля указываются через запятую. Порядок в результате запроса будет настраиваться в той же очередности, в которой указаны поля сортировки.

column1 column2 column3
3 1 c
1 3 c
2 2 b
2 1 b
1 2 a
1 3 a
3 4 a

Отсортируем таблицу по следующим правилам:

SELECT * FROM mytable ORDER BY column1 ASC, column2 DESC, column3 ASC

Т.е. первый столбец по возрастанию, второй по убыванию, третий опять по возрастанию. Запрос упорядочит строки по первому столбцу, затем, не разрушая первого правила, по второму столбцу. Затем, так же, не нарушая имеющихся правил, по третьему. В результате получится такой набор данных:

column1 column2 column3
1 3 a
1 3 c
1 2 a
2 2 b
2 1 b
3 1 a
3 1 c

Порядок команды ORDER BY в запросе

Сортировка строк чаще всего проводится вместе с условием на выборку данных. Команда ORDER BY ставится после условия выборки WHERE. Например, выбираем товары с ценой меньше 100 рублей, упорядочив по названию в алфавитном порядке:

SELECT * FROM goods WHERE price 100 ORDER BY price ASC