Сортировка данных в SQL (ORDER BY). Как задаётся SQL-сортировка? 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-сортировки, можно написать один из известных алгоритмов. При необходимости достижения самого быстрого упорядочивания элементов, стоит применить метод основанный на половинном разбивании массива элементов. Большой популярностью также обладают способы ранжирования "пузырьком", в котором два соседних элемента меняются местами в случае неверного расположения, "пирамидальная сортировка", отправляющая наибольший элемент в конец списка, а также "сортировка вставками", предопределяющая местоположение каждого элемента по очереди.

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

В будущем нам может понадобиться сортировать нашу выборку - в алфавитном порядке для текста или по возрастанию/убыванию - для цифровых значений. Для таких целей в SQL есть специальный оператор ORDER BY .

1. Сортировка выбранных данных.

Давайте всю нашу таблицу посортируем по сумме реализации продукции, а именно по столбцу Amount .

SELECT * FROM Sumproduct ORDER BY Amount

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

Также особенностью оператора ORDER BY является то, что он может сортировать данные по полю, которого мы не выбирали в запросе, то есть достаточно, чтобы оно вообще было в БД.

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

Теперь посортируем наш пример дополнительно за еще одним полем. Пусть это будет поле City , которое отображает место реализации продукции.

SELECT * FROM Sumproduct ORDER BY Amount, City

Очередность сортировки будет зависеть от порядка расположения полей в запросе. То есть, в нашем случае сначала данные будут рассортированы по колонке Amount , а затем по City .

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

Несмотря на то, что по умолчанию оператор ORDER BY сортирует по возрастанию, мы можем также прописать сортировки значений по убыванию. Для этого в конце каждого поля проставляем оператор DESC (что является сокращением от слова DESCENDING).

SELECT * FROM Sumproduct ORDER BY Amount DESC , City

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


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

Шаг 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 запроса по двум полям.

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

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

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

За упорядочивание строк, выгружаемых в SQL-запросе, отвечает предложение ORDER BY. Оно располагается в самом конце запроса:

SELECT <Перечень столбцов> FROM <Перечень таблиц> ORDER BY <Условие сортировки>

В условии сортировки указываются столбцы, по которым будут упорядочены полученные строки таблицы:

ORDER BY col1, col2

Порядок сортировки в SQL

Возможны 2 варианта сортировки: по возрастанию и по убыванию. Для указания типа сортировки в запросе после названия столбца указывается ключевое слово ASC (ascending) или DESC (descending), которые определяют возрастающий либо убывающий порядок соответственно. По умолчанию используется тип ASC:

ORDER BY col1 -- следующее предложение будет равнозначным ORDER BY col1 ACS

Также возможно указать разный порядок для разных столбцов:

ORDER BY col1 DESC, col2 ASC

Для закрепления материала решите задачу на учебной БД:

Необходимо получить список идентификаторов сотрудников, отсортированный по группам в порядке возрастания и дате найма "от новых к старым".

SELECT id, Группа, Дата_найма FROM Сотрудники ORDER BY Группа, Дата_найма DESC

Пополним синтаксис оператора SELECT предложением ORDER BY (вертикальная черта означает необходимость выбора одного из вариантов):

SELECT [Имя_таблицы.]Имя_столбца[, [Имя_таблицы.]Имя_столбца2 …] FROM [[Имя_базы_данных.]Имя_Схемы.]Имя_таблицы Имя_столбца [, [Имя_таблицы.]Имя_столбца2 …]]

  • Вперёд >

Если материалы office-menu.ru Вам помогли, то поддержите, пожалуйста, проект, чтобы мы могли развивать его дальше.