Сортировка
Результат выборки данных при выполнении оператора 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;
Контрольные вопросы
- Надо ли использовать упорядочивание, если мы добавляли записи в правильном порядке?
- Что произойдет, если указать несколько полей для сортировки?
- Можно ли упорядочивать по одному полю по возрастанию, а по другому - по убыванию?
- Куда будут помещаться значения
NULLпри сортировке? - Что можно указывать в качестве элемента сортировки?