русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2015-07-09; просмотров: 527; Нарушение авторских прав


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

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

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

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

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

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

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

SELECT PR_NAME2 AS"Имя",

PR_NAME3AS "Отчество",

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

PR_NAMEAS"Фамилия",

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

FROM PERSON

ORDER PR_NAME,PR_NAME2;

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



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

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

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

SELECT PR_NAME2 AS"Имя",

PR_NAME3AS "Отчество",

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

PR_NAMEAS"Фамилия",

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

FROM PERSON

ORDER 3, 2;

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

SELECT PR_NAME2 AS"Имя",

PR_NAME3AS"Отчество",

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

PR_NAMEAS"Фамилия",

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

FROM PERSON

ORDER BY PR_NAME, 2;

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

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

SELECT PR_NAME2 AS"Имя",

PR_NAME3AS "Отчество",

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

PR_NAMEAS"Фамилия",

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

FROM PERSON

ORDER BY PR_NAME, PR_NAME2 DESC;

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

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

SELECT PR_NAME2 AS"Имя",

PR_NAME3AS "Отчество",

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

PR_NAMEAS"Фамилия",

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

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 все получается с точностью до наоборот — пустые значения находятся в начале списка.



<== предыдущая лекция | следующая лекция ==>
ЗАМЕЧАНИЕ | ЗАМЕЧАНИЕ


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.056 сек.