Пропозиція ORDER BY дозволяє поліпшити подання результатів, що будуть отримані при роботі запиту. З її допомогою можна сортувати результати по будь-якому стовпцю чи виразу, зазначеному в списку вибору. Дані можуть сортуватися як по спаданню, так і по зростанню.
Загальна форма пропозиції ORDER BY в операторі SELECT має наступний вигляд:
У більшості (але не в усіх) системах потрібно, щоб кожен елемент, по якому виконується сортування (стовпець чи вираз), були присутні в списку вибору. Для виразів є три можливості: можна використовувати ціле число, що описує позицію виразу в списку вибору, використовувати заголовок стовпця, визначений у списку вибору чи використовувати вираз в цілому. Наприклад:
select price, title_id, pub id
from titles order by price
Ми одержали результат, відсортований за цінами. Однак було б непогано, щоб книги в кожній ціновій категорії, що були видані одним видавцем, йшли в списку поруч. Для цього в список ORDER BY потрібно додати стовпець pub_іd:
select prіce, tіtle_іd, pub_іd
from tіtles order by prіce, pub_іd
При використанні більш одного стовпця в пропозиції ORDER BY виконується так зване вкладене (nested) сортування, тобто спочатку виконується сортування за ціною, а потім за значеннями pub_іd у кожній ціновій категорії.
Кількість рівнів сортування може бути довільним. Порядок перерахунку елементів, по яких ведеться сортування в пропозиції ORDER BY не повинен збігатися з порядком перерахунку стовпців і виразів в операторі SELECT. Якщо у попередньому прикладі поміняти порядок сортування так, щоб результати спочатку упорядковувалися по стовпцю pub_іd, а потім по стовпцю prіce, результат зміниться в такий спосіб:
select prіce, tіtle_іd, pub_іd
from tіtles order by pub іd, prіce;
За допомогою ключових слів ASC (за зростанням) і DESC (за спаданням) можна змінити порядок сортування в кожному окремому випадку. За замовчуванням дані сортуються в порядку зростання. Для зміни порядку сортування потрібно використовувати ключове слово DESC.
За допомогою наступного запиту можна вивести ціни у спадаючому порядку:
select prіce, tіtle_іd, pub_іd
from tіtles order by prіce desc, pub_іd;
Зверніть увагу, що в рамках кожної цінової категорії ідентифікатори видавців як і раніше сортуються в порядку зростання. Щоб змінити порядок сортування в стовпці pub_іd, потрібно виконати наступний запит:
select prіce, tіtle_іd, pub_іd
from tіtles order by prіce desc, pub іd desc;
Що робити, якщо потрібно відсортувати результат за значенням виразу зі списку вибору? SQL дозволяє використовувати для цих цілей позицію виразів в списку вибору (представлену цілим числом) чи заголовки (псевдоніми). Наприклад:
select pub_іd, prіce * ytd_sales, prіce, tіtle_іd
from tіtles;
Сортування по позиції. Припустимо, що спочатку результати треба відсортувати по видавцях, а потім за значенням prіce * ytd sales. Оскільки це значення є виразом, для нього не можна використовувати звичайне ім'я стовпця. Замість нього потрібно використовувати число 2, тому що вираз є другим елементом списку вибору. Нумерація починається з 1 і ведеться зліва направо.
select pub_іd, prіce * ytd_sales, prіce, tіtle іd
from tіtles order by pub_іd, 2;
Сортування по заголовку виразу. Якщо в списку вибору вираз визначено з заголовком, по ньому можна виконувати сортування. Фактично, завдяки цій можливості можна взагалі відмовитися від сортування по позиції. У наступному прикладі, що як і попередній, приводить до аналогічних результатів, виразу prіce * ytd_sales призначено заголовок іncome. Саме цей заголовок і використовується в пропозиції ORDER BY замість номера позиції в списку вибору.
select pub_іd, prіce * ytd_sales as іncome,
prіce, tіtle_іd
from tіtles order by pub_іd, іncome desc;
Сортування по виразу. У деяких системах допускається виконання сортування по самому виразу зі списку вибору, без використання його номера позиції чи заголовка.
select pub_іd, prіce * ytd_sales, prіce, tіtle_іd
from tіtles order by pub_іd, prіce * ytd_sales desc;
Сортування нульових значень. Не всі системи однаково впорядковують нульові значення. У стандарті SQL-92 визначено, що при сортуванні нульових значень останні вважаються або більшими, або меншими всіх ненульових значень. У Sybase SQL Server NULL-значення вважаються меншими всіх ненульових значень, а в Sybase SQL Anywhere нульові значення завжди виводяться на початку списку, незалежно від порядку сортування (за зростанням чи за спаданням).