Сортировка результатов запроса (предложение ORDER BY)
Составные условия отбора строк
На практике очень часто простого условия отбора бывает недостаточно. В таких случаях можно задать составное условие отбора, включающую в себя комбинацию простых условий, логических операций AND, OR, NOT и круглых скобок.
Операнды логических операций AND, OR, NOT следует заключать в круглые скобки.
Пример 15. Вывести список исходящих вызовов (код=2) длительностью более 50 секунд.
SELECT *
FROM VYZOVY
WHERE (TIP_ID=2) AND (DLIT>50)
Пример 16. Вывести список контактов, для которых указан лишь один из параметров: пол или возраст.
SELECT *
FROM KONTAKTY
WHERE ((POL_ID IS NULL) AND (VOZRAST IS NOT NULL)) OR
((POL_ID IS NOT NULL) AND (VOZRAST IS NULL))
Предложение ORDER BY позволяет упорядочить строки в таблице результатов запроса в соответствии с указанными столбцами сортировки.
Синтаксис:
ORDER BY <столбец сортировки1> [ASC|DESC][, <столбец сортировки2> [ASC|DESC]] [,…]
Предложение ORDER BY может содержать несколько столбцов сортировки, разделенных запятыми. В качестве столбца сортировки может выступать имя столбца таблицы или порядковый номер (1,2, и т.д.) возвращаемого столбца (из предложения SELECT).
Примечание. В качестве столбца сортировки не может выступать вычисляемое выражение. Если это необходимо, следует указать порядковый номер возвращаемого столбца.
После каждого столбца сортировки можно задать одно из двух слов: ASC (по возрастанию) или DESC (по убыванию).
По умолчанию сортировка производится в порядке возрастания значений (для текстовых данных – в алфавитном порядке).
В случае сортировки по нескольким столбцам сортировка по каждому следующему столбцу не отменяет результаты сортировки по предыдущему.
Сначала сортировка производится по значениям первого столбца сортировки. Если в нескольких строках значения в этом столбце совпадают, то порядок следования строк определятся по второму столбцу (при его наличии). Если в нескольких строках совпадают значения в первых двух столбцах сортировки, то сортировка производится по третьему столбцу сортировки (при его наличии) и т.д.
Пример. Необходимо упорядочить список людей (фамилия, имя, отчество хранятся в отдельных столбцах). Сначала необходимо отсортировать по фамилии, затем в рамках каждой фамилии – по имени, затем в рамках каждой совокупности фамилии и имени – по отчеству).
Пример 17. Вывести список групп контактов в алфавитном порядке.
SELECT ID, NAZV, MEL_ID
FROM GRUPPY
ORDER BY NAZV
Пример 18. Вывести список входящих звонков в порядке убывания их длительности.
SELECT ID, TIP_ID, VREMYA, NOMER_ID, DLIT
FROM VYZOVY
WHERE TIP_ID=1
ORDER BY DLIT DESC
Пример 19. Вывести список исходящих звонков. Результаты отсортировать сначала в порядке убывания их тарифов, а затем – в хронологическом порядке.
SELECT TIP_ID, VREMYA, NOMER_ID, DLIT, STOIM, STOIM/DLIT*60
FROM VYZOVY
WHERE TIP_ID=2
ORDER BY 6 DESC, VREMYA ASC