|
Программирование >> Исключение дубликатов строк
Рис. 4.9. Синтаксис ключевого слова DISTINCT Как показано на диаграмме, DISTINCT является необязательным ключевым словом, которое предшествует списку столбцов, указанных в условии SELECT. Ключевое слово DISTINCT требует от СУБД оценить значения всех столбцов каждой строки как один элемент, строка за строкой, и исключить все обнаруженные повторения. Оставшиеся уникальные строки возвращаются в наборе результатов. В приведенном ниже примере представлено, какое различие может создать ключевое слово DISTINCT при соответствующих обстоятельствах. Предположим, что вы обращаетесь к базе данных со следующим запросом: Which cities are represented by our bowling league membership? ( Какие города представляют участники нашей лиги игры в боулинг? ) Вопрос кажется достаточно простым, поэтому перейдем к процессу преобразования. Преобразование: Select city from the bowlers table Уточнение: (Выбрать города из таблицы игроков в боулинг) Select city from the bowlers tdbie (Выбрать город из Игроки в боулинг ) SELECT City FROM Bowlers Здесь проблема состоит в том, что набор результатов для этого оператора SELECT показывает каждое появление каждого названия города, обнаруженного в таблице Bowlers (Игроки в боулинг). Например, если имеется 20 человек из Беллевью, 7 человек из Кента и 14 человек из Сиэтла, то в наборе результатов будет 20 раз упомянут Беллевью, 7 раз - Кент и 14 - Сиэтл. Очевидно, что эта избыточная информация не нужна. Хотелось бы видеть по одному названию каждогр города, которые были обнаружены в таблице Bowlers. Эта проблема решается посредством использования ключевого слова DISTINCT в операторе SELECT для исключения избыточной информации. Еще раз выполним перевод с использованием ключевого слова DISTINCT. Обратите внимание, что мы теперь включаем слово distinct ( по одному ) как на этапе преобразования, так и на этапе уточнения. Какие города представляют участники нашей лиги игры в боулинг? Преобразование: Select distinct city from the bowlers table (Выбрать no одному города из таблицы Игроки в боулинг ) Уточнение: Select distinct city from the bowlers t We (Выбрать no одному города из Игроки в боулинг ) SELECT DISTINCT City FROM Bowlers Набор результатов для этого оператора SELECT отображает именно то, что вы ищете,- единственное упоминание каждого уникального города в таблице. Ключевое слово DISTINCT также можно использовать для составных столбцов. Изменим предьщущий пример, запросив из таблицы Bowlers как штат, так и город. Наш новый оператор SELECT будет выглядеть так: SELECT DISTINCT State, City FROM Bowlers Этот оператор SELECT возвращает набор результатов, который содержит уникальные записи и показывает определенные отличия между городами с одинаковым названием. Например, показывается различие между Portland, ME и Port lywood, CA и Hollywood, FL (Голливуд, штат Калифорния, и Голливуд, штат Флорида). Ключевое слово DISTINCT - это очень полезный инструмент в определенных обстоятельствах. Используйте его, когда вы действительно хотите видеть уникальные строки в наборе результатов. Сортировко информоции Операцию SELECT можно разделить на три более мелкие операции: оператор SELECT, выражение SELECT и запрос SELECT. Можно объединять эти операции различными способами, чтобы ответить на сложные запросы. Также необходимо объединять эти операции для сортировки строк в наборе результатов. По определению строки набора результатов, возвращенные оператором SELECT, не упорядочены. Последовательность, в которой они появляются, основывается на Запрос S£££CT о- Оператор SELECT ORDER BYимястолбца ASC-LdesC Рис. 4.10. Синтаксическая диаграмма для запроса SELECT их физическом расположении в таблице. Единственный способ сортировки набора результатов заключается во встраивании оператора SELECT в запрос SELECT, как показано на рис. 4.10. Запрос SELECT определяется как оператор SELECT с условием ORDER BY. Именно условие ORDER BY запроса SELECT позволяет определить последовательность строк в окончательном наборе результатов. Из последующих глав вы узнаете, что для ответа на очень сложные вопросы можно вложить оператор SELECT в другой оператор SELECT или в выражение SELECT. Однако запрос SELECT невозможно вложить в какой-либо другой уровень. Внимание! Во всей данной книге используются термины, которые можно найти в стандарте SQL от ANSI или которые являются общеупотребительными в большинстве систем базы данных. Однако стандарт ANSI SQL определяет условие ORDER BY только как часть курсора - объекта, который определяется внутри прикладной программы (полное обсуждение курсоров выходит за рамки данной книги). Поскольку многие реализации SQL позволяют в конце оператора SELECT включать условие ORDER BY, нами придуман термин запрос SELECT для описания такого типа оператора. Это также позволяет обсудить концепцию сортировки окончательного вывода запроса для оперативного отображения или для использования в отчете. Условие ORDER BY позволяет упорядочить набор результатов указанного оператора SELECT по одному или нескольким столбцам, а также содержит опцию упорядочивания по возрастанию или убыванию для ка>вдого столбца. В условии ORDER BY можно использовать только те столбцы, которые в настоящий момент перечислены в условии SELECT. Хотя это требование указано в стандарте SQL, некоторые реализации его полностью игнорируют (однако во всех примерах, используемых в данной книге, это требование нами соблюдается). Когда в условии ORDER BY используются два или более столбцов, каждый столбец отделяется запятой. Как только сортировка завершается, запрос SELECT возвращает окончательный набор. Внимание! Условие ORDER BY не оказывает влияния на физический порядок строк в таблице. Если требуется изменить порядок строк, обратитесь к документации по программному обеспечению для базы данных. Важные дела а первую очередь: Схемы сортировки Способ сортировки (или упорядочения) информации, определяемый условием ORDER BY, зависит от схемы сортировки, используемой в конкретной СУБД. Эта схема определяет порядок предшествования для каждого символа, перечисленного в текущем наборе символов языка, определенном операционной системой. Например, он устанавливает, должны ли буквы нижнего регистра располагаться при сортировке перед символами верхнего регистра или регистр не имеет значения. Проверьте
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |