Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Упорядочение результата запроса. Предложение ORDER BY




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

Чтобы явно задать нужный нам порядок в оператор следует ввести предложение ORDER BY. В предложении перечисляются имена столбцов таблицы или порядковые номера столбцов, указанных в списке выбора. По умолчанию сортировка выполняется в возрастающем порядке, как если бы вы задали ключевое слово ASCENDING, однако для различных столбцов в одном и том же предложении вы можете указать и убывающий порядок, задав ключевое слово DESCENDING. Для ключевого слова ASCENDING допустимо сокращение ASC, для DESCENDING — DESC.

Предложение ORDER BY имеет следующий синтаксис:

ORDER BY {<имя столбца> | <номер столбца>} [{ASC[ENDING] | DESC[ENDING]]}

Помимо имен столбцов в этом предложении мы можем указать и порядковые номера столбцов в списке выбора. Столбцы в списке нумеруются, начиная с единицы. Чтобы можно было использовать номера столбцов, вы должны явно перечислить столбцы в списке выбора. Вариант * в этом случае недопустим.

Что интересно — столбцы, по которым выполняется сортировка данных, вовсе не обязательно должны быть включены в состав выбираемых столбцов, хотя и не совсем понятно, кому это может понадобиться. Такую сортировку допускают делать далеко не все реляционные базы данных.

Рассмотрим примеры с нашей таблицей людей. Введите и выполните:[6]

SELECT PR_NAME2 AS "Имя",

PR_NAME3 AS "Отчество",

'Фамилия:' AS "Текст",

PR_NAME AS "Фамилия",

PR_BIRTHDAY AS "Дата рождения"

FROM PERSON

ORDER PR_NAME, PR_NAME2;

Вначале выполняется упорядочение списка по столбцу PR_NAME (фамилия), а затем внутри списка еще и по PR_NAME2 (имя). Второй уровень сортировки называется вложенной (nested) сортировкой. Количество уровней вложенности не ограничивается.

В нашем примере мы получили список, отсортированный по фамилиям в возрастающем порядке. Если несколько человек имеют одну и ту же фамилию, то строки еще упорядочиваются и по именам. Как и должно быть. Если нужно, мы можем добавить еще один уровень сортировки — по отчествам.

Кстати, такая сортировка строковых полей называется сортировкой в лексикографическом порядке, когда порядок символов в точности соответствует расположению букв в алфавите соответствующего языка.

Зададим упорядочение не в виде имен столбцов, а указанием их номеров. Напомню, что столбцы в списке выбора нумеруются начиная с единицы, а в самом списке выбора нельзя указывать символ *.[7]

SELECT PR_NAME2 AS "Имя",

PR_NAME3 AS "Отчество",

'Фамилия:' AS "Текст",

PR_NAME AS "Фамилия",

PR_BIRTHDAY AS "Дата рождения"

FROM PERSON

ORDER 3, 2;

Получаем такой же упорядоченный список, как и в предыдущем случае, что мы видели в листинге 3. Проверим, можно ли в одном предложении указывать и номера, и имена. Введем и выполним:[8]

SELECT PR_NAME2 AS "Имя",

PR_NAME3 AS "Отчество",

'Фамилия:' AS "Текст",

PR_NAME AS "Фамилия",

PR_BIRTHDAY AS "Дата рождения"

FROM PERSON

ORDER BY PR_NAME, 2;

Это работает точно так же, как и в обоих предыдущих случаях.

Теперь проверим, действительно ли работает вариант различного направления сортировки в разных столбцах в одном предложении. Изменим оператор, добавив упорядочение по столбцу PR_NAME3 (имя человека) в убывающем порядке:[9]

SELECT PR_NAME2 AS "Имя",

PR_NAME3 AS "Отчество",

'Фамилия:' AS "Текст",

PR_NAME AS "Фамилия",

PR_BIRTHDAY AS "Дата рождения"

FROM PERSON

ORDER BY PR_NAME, PR_NAME2 DESC;

Все работает замечательно Фамилии сортируются в возрастающем порядке, а имена у однофамильцев — в убывающем.

Интересно, как поведут себя пустые значения (NULL) в результате сортировки? Стандарт допускает помещение всех таких строк либо в самое начало списка, либо в самый конец сортируемого набора данных. Посмотрим, как решается этот вопрос в наших системах управления базами данных.[10]

SELECT PR_NAME2 AS "Имя",

PR_NAME3 AS "Отчество",

'Фамилия:' AS "Текст",

PR_NAME AS "Фамилия",

PR_BIRTHDAY AS "Дата рождения"

FROM PERSON

ORDER BY PR_BIRTHDAY, PR_NAME

Получим следующий список, упорядоченный по датам рождения.

Листинг 5. Список личностей упорядоченный по дате рождения

Имя Отчество Фамилия Дата рождения
Татьяна Валерьевна Веремчук 23.08.1948
Татьяна Николаевна Некрасова 04.12.1949
Елена Алевтиновна Варанкина 01.02.1952
Татьяна Владимировна Хемлих 25.10.1953
Татьяна Сергеевна Арсентьева 10.09.1954
Татьяна Анатольевна Баландина 11.01.1955
Кирил Владимирович Бешляга 07.01.1956
Марина Валентиновна Бычкова 01.04.1957
Людмила Александровна Блинова 28.08.1957
Елена Александровна Беляева 30.04.1958
Павел Павлович Попутько 05.05.1959
Татьяна Викторовна Владысик 19.10.1960
Светлана Александровна Ветошкина 23.12.1960
Татьяна Александровна Звездина 01.10.1961
Татьяна Фёдоровна Леушина 04.05.1963
Олег Владимирович Лядов 07.06.1964
Оксана Васильевна Власова 11.02.1965
Надежда Александровна Зеленина 11.12.1965
Татьяна Евгеньевна Беспалова 21.12.1965
Татьяна Александровна Соснина 05.12.1968
Татьяна Александровна Мазеина 06.04.1969
Татьяна Геннадьевна Зырянова 22.01.1970
Максим Владимирович Бычков 08.09.1970
Юлий Альбертович Алексеев 19.09.1974
Татьяна Сергеевна Бартош 02.12.1974
Александр Анатольевич Лебедев 03.04.1977
Татьяна Владимировна Алтынцева 03.09.1977
Оксана Владимировна Мельчакова 06.07.1978
Татьяна Михайловна Мосина 30.06.1979
Татьяна Юрьевна Шарапова 14.04.1980
Лариса Вилльевна Вашкарина 05.11.1980
Анна Николаевна Верхоланцева 06.10.1991
Наталья Владимировна Алавердян  
Назгуль Асановна Алиева  
Руслан Рафаилович Амерзянов  
Ксения Аркадьевна Антонова  

Видно, что все пустые значения помещаются в самый конец списка. Этот результат мы получим при использовании Firebird версии 1.5, в Firebird 2.0 все получается с точностью до наоборот — пустые значения находятся в начале списка.

Поделиться:





Читайте также:

II. Требования к результатам освоения
IV. Переведите предложение с обособленным причастным оборотом, подчеркните Partizip I или Partizip II.
IV. Переведите предложение с обособленным причастным оборотом, подчеркните Partizip I или Partizip II.
IV. Переведите предложение с обособленным причастным оборотом, подчеркните Partizip I или Partizip II.
IV. ТРЕБОВАНИЯ К РЕЗУЛЬТАТАМ ОСВОЕНИЯ ОСНОВНОЙ ОБРАЗОВАТЕЛЬНОЙ ПРОГРАММЫ ДОШКОЛЬНОГО ОБРАЗОВАНИЯ
obelarus.net – сайт о всех результатах и жизни ориентирования; http://ogomel.ucoz.net/ - Все об ориентировании в Гомеле и Гомельской обл.
V. ТРЕБОВАНИЯ К РЕЗУЛЬТАТАМ ОСВОЕНИЯ ОСНОВНОЙ ПРОФЕССИОНАЛЬНОЙ ОБРАЗОВАТЕЛЬНОЙ ПРОГРАММЫ
Анализ качества сырья и готовой продукции. Оценка качества сырья по результатам лабораторных анализов.
Анализ формулы (4.56) позволяет получить простые правила оценивания погрешности результата косвенного измерения.
Бухгалтерский учет финансового результата деятельности торговой организации. Учет расходов на продажу (издержек обращения).






Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...