Сортировка

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

Синтаксис:

SELECT ... FROM ...
...
ORDER BY <элемент сортировки> [, <элемент сортировки> ...]

где <элемент сортировки> состоит из

    {имя столбца | псевдоним столбца | позиция столбца | выражение}
    [ASC | DESC] [NULLS FIRST | NULLS LAST]

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

Ключевое слово ASC задаёт упорядочение по возрастанию значений. Применяется по умолчанию. Ключевое слово DESC задаёт упорядочение по убыванию значений. В одном предложении упорядочение по одному столбцу может идти по возрастанию значений, а по другому — по убыванию.

Ключевое слово NULLS определяет, где в отсортированном наборе данных будут находиться значения NULL соответствующего столбца - в начале выборки (FIRST) или в конце (LAST). По умолчанию принимается NULLS FIRST.

Рассмотрим несколько примеров.

Сортировка сотрудников по фамилии (last_name) в алфавитном порядке:

SELECT EMP_NO, FIRST_NAME, LAST_NAME
FROM EMPLOYEE
ORDER BY LAST_NAME ASC;

Сортировка сотрудников по зарплате (salary) от самой высокой к самой низкой:

SELECT EMP_NO, FIRST_NAME, LAST_NAME, SALARY
FROM EMPLOYEE
ORDER BY SALARY DESC;

Сортировка сотрудников сначала по отделу (dept_no), а затем по фамилии (last_name):

SELECT EMP_NO, FIRST_NAME, LAST_NAME, DEPT_NO
FROM EMPLOYEE
ORDER BY DEPT_NO ASC, LAST_NAME ASC;

Сортировка сотрудников по длине их имени (first_name):

SELECT EMP_NO, FIRST_NAME, LAST_NAME
FROM EMPLOYEE
ORDER BY CHAR_LENGTH(FIRST_NAME) DESC;

Сортировка сотрудников по дате приема на работу (hire_date):

SELECT EMP_NO, FIRST_NAME, LAST_NAME, HIRE_DATE
FROM EMPLOYEE
ORDER BY HIRE_DATE ASC;

Сортировка по второму столбцу в результате выборки (в данном случае first_name):

SELECT EMP_NO, FIRST_NAME, LAST_NAME
FROM EMPLOYEE
ORDER BY 2 ASC;

Сортировка сотрудников по зарплате, но сначала выводятся те, у кого зарплата не указана (NULL):

SELECT EMP_NO, FIRST_NAME, LAST_NAME, SALARY
FROM EMPLOYEE
ORDER BY SALARY NULLS FIRST;

Контрольные вопросы

  1. Надо ли использовать упорядочивание, если мы добавляли записи в правильном порядке?
  2. Что произойдет, если указать несколько полей для сортировки?
  3. Можно ли упорядочивать по одному полю по возрастанию, а по другому - по убыванию?
  4. Куда будут помещаться значения NULL при сортировке?
  5. Что можно указывать в качестве элемента сортировки?