Операцию SELECT можно разделить на три более мелкие операции: оператор SELECT, выражение SELECT и запрос SELECT. Можно объединять эти операции различными способами, чтобы ответить на сложные запросы. Также необходимо объединять эти операции для сортировки строк в наборе результатов.
По определению строки набора результатов, возвращенные оператором SELECT, не упорядочены. Последовательность, в которой они появляются, основывается на их физическом расположении в таблице.
Условие ORDER BY запроса SELECT позволяет определить последовательность строк в окончательном наборе результатов. Из последующих глав вы узнаете, что для ответа на очень сложные вопросы можно вложить оператор SELECT в другой оператор SELECT или в выражение SELECT. Однако запрос SELECT невозможно вложить в какой-либо другой уровень.
Условие ORDER BY позволяет упорядочить набор результатов указанного оператора SELECT по одному или нескольким столбцам, а также содержит опцию упорядочивания по возрастанию или убыванию для каждого столбца. В условии ORDER BY можно использовать только те столбцы, которые в настоящий момент перечислены в условии SELECT. Хотя это требование указано в стандарте SQL, некоторые реализации его полностью игнорируют (однако во всех примерах, используемых в данной книге, это требование нами соблюдается). Когда в условии ORDER BY используются два или более столбцов, каждый столбец отделяется запятой. Как только сортировка завершается, запрос SELECT возвращает окончательный набор.
Пример:
SELECT Category FROM Classes ORDER BY Category
В данном примере можно предположить, что категория будет использоваться для сортировки, поскольку это единственный столбец, указанный в запросе. Также можно предположить, что сортировка должна производиться в порядке возрастания, потому что в запросе не указано противоположное. Это безопасное предположение.
В следующем запросе столбец, необходимый для сортировки, определяется более явно:
SELECT VendName, VendZipCode
FROM Vendors
ORDER BY VendZipCode
В соответствие со стандартом SQL, если не определен порядок сортировки, то автоматически предполагается сортировка в порядке возрастания. Однако, если вы хотите все указать явно, вставьте ASC (от Ascending — по возрастанию) после Category в условии ORDER BY.
SELECT EmpLastName, EmpFirstName, EmpPhoneNumber, EmployeelD FROM Employees ORDER BY EmpLastName DESC, EmpFirstName ASC
Если нужно отобразить набор результатов в обратном порядке, вставьте ключевое слово DESC (от Descending — по убыванию) после соответствующего столбца в условии ORDER BY. Посмотрите, как изменяется оператор SELECT из предыдущего примера, когда требуется представить информацию, отсортированную по почтовому индексу в порядке убывания:
SELECT VendName, VendZipCode FROM Vendors
ORDER BY VendZipCode DESC
Пример совместного использования сортировки по возрастанию и по убыванию:
SELECT TourneyDate, TourneyLocation FROM Tournaments