Программирование баз данных MS SQL Server (1084479), страница 21
Текст из файла (страница 21)
В выводе присутствуют те же данные, но порядок их представления существенно изменился: Ргобпсгкшпьег Кеогоегго1пг Аб)оягаЪ1е Васе Веаггпч Ва11 ЬЬ ВоССов Вгасаег МЬ Воггов Вгаскег АК-5381 ВА-8327 ВВ-7421 ВВ-8107 750 750 375 375 С1аяягс ЧеяС, Ь С1авяьс Чевя, М С1аяягс Чеяг, Б Ыавег ВоСС1е — 30 ов. (504 гов(я) аггесвеб) ЧЕ-С304-1 ЧЕ-С304-М ЧЕ-С304 †ИВ-8098 Оказалось, что результаты запроса были отсортированы в порядке возрастания значений столбца Ргобоос1().
Причина этого состоит в том, что СУБД БЯЕ Бегчег было принято решение по выбору такого наиболее подходящего способа выборки данных, в котором используется индекс, обеспечивающий сортировку данных в соответствии со значениями столбца Ргобосс10. Просто так оказалось, что решение, принятое СУБД, приводит к наименьшим затратам при выполнении запроса (с точки зрения израсходованного процессорного времени и количества выполненных операций ввода-вывода).
Если бы точно такой же запрос был выполнен после того, как указанная в нем таблица выросла и стала гораздо больше, то СУБД БОИ Яегчег мог ла бы выбрать совсем другой план выполнения и поэтому отсортировала бы данные полностью иным образом.
Но мы имеем также возможность задать схемы упорядочения принудительно, изменив запрос так, чтобы он принял следующую форму: Основные операторы языка Т-БЯЕ 91 В данном приме))е впервые используется одна из баз данных, не создаваемых по умолчанию в ходе осуществления инстолляуионной пфокедуфы. Чтобы иметь возможность выполнять следующие лапу)осы, а также многие д))угие, пуза веденные в Разных главах данной хниги, необ хойгмо установить обу)озкы баз данных, Мотглнзпб и роЬБ, с помощью диступгбутива Я(3Ь Бетоет 2000 Яатр1ез Тпзга11, кото)зый можно получить с узла компании Мгсюзоу).
Инст~ук уии по уппановке зт х оброзуов п))иведены в пу)иложении Д. В ходе изучения матгу)иола в данной книге читателю пу)идется довольно часто пеу)входить от одной базы данных, используемой в качестве пу)имка, к другт1, а в конечном итом даже проводить зксперименты по пу)именению данных балыке чем из однт1 базен данных одновременно. Пфи написании настоящей книги было у)ешено пРедусмот))еть))аботу с несхольними разными базами данных по многим пу>ичинам, не последней из котоузых было сту)емление ознакомить читателя с базами данных, спроектированными на основе немного ))азных подходов. ге у) обеем ы 7)величий в подходах к пу)петти~званию угассмат))иваются более подуюбно в главе, посвященной п))оехтиу)званию.
Следующий запрос по-прежнему применяется к таблице, содержащей сведения о товарах, но имена объектов базы данных стали немного другими (обратите внимание на наличие в них буквы "з"), кроме того, указаны другая схема и другая база данных: БЕЬЕОТ Ртобпс110, Ртобпсгнапе, Оп1тз1пБтос)с, Оп11вопотбет РВОМ Ртобпсгз ХНЕНЕ Опттзопогбег > 0 БМО Оп11з1пБСоск < 10 РЕРЕН Ву Оп11зопотбет РЕВО После выполнения этого запроса будут получены такие результаты: Ртобпс110 Ртобосьнапе Оп 1 С з 1 пБ Сот)с Оп11зопотбет бб 31 45 21 32 74 68 Ьоп1з1апа Нот Бртсеб Окса Ботаопго1а Те1тпо Ноаебе зт1б Бтт Нобпеу'з Бсопез Мазсатропе РаЬто1). Ьопд11ге Того Бсост1зЬ ЬопНЬтеабз 100 70 70 40 40 20 10 (7 гон(з) аггесгеб) В рассматриваемом запросе заслуживают внимания несколько особенностей.
Вопервых. вием используются многие конструкции,о которых шла речь в этой главе. В конструкции ХНЕНЕ объединено несколько условий, а также предусмотрена конструкция РЕРЕН Ву. Во-вторых, в конструкцию РЕРЕН Ву введено нечто новое — ключевое слово РЕВО. Это ключевое слово сообщает СУБД ЕО). Еегуег, что конструкция СУБД ЕО1, Еегчег по-прежнему выбирает метод предоставления пользователю тре. буемых результатов с наименьшими издержками, но конкретный набор операций, фактически осуществляемый для решения этой задачи, немного изменяется, поскольку другим становится и сам характер запроса. Кроме того, сортировка данных может осуществляться по значениям столбцов с числовыми данными.
Попытаемся применить первый из рассматриваемых запросов к базе данных НотСЬн1пб. 92 Глава 3 ОКОЕВ Нт должна действовать, сортируя данные в порядке убывания, а не в порядке возрастания значений данных, предусмотренном по умолчанию. (Чтобы явно указать, что сортировка данных должна осуществляться по возрастанию, следует ввести ключевое слово АЯС.) На этом возможности сортировки не исчерпываются.
Теперь рассмотрим, как можно отсортировать данные по нескольким столбцам. Для этого достаточно ввести запятую, а за ней указать имя следующего столбца, по которому требуется выполнить сортировку. Предположим, например, что требуется получить листинг со всеми заказами, оформленными в период с 10 по 20 декабря 1996 года. Но чтобы немного усложнить задачу, примем дополнительные предположения, что заказы необходимо отсортировать по дате, а также выполнить вторичную сортировку с учетом значений столбца ссзготег1О. Кроме того, просто ради интереса примем еще одно небольшое допущение: предусмотрим сортировку по значениям ссзсомег1Р в порядке убывания. Запрос, соответствующий указанным требованиям, должен выглядеть следующим образом: ЯЕЬЕСТ Огсегоате, Сизтовег1Р ГНОМ Огоегз ИНЕВЕ Огоегоаге ВЕТНЕЕН '12-10-1996' АНС '12-20-1996' СВОЕВ Вт Огоегоате, Сиэтовег10 СЕЯС В данном случае полученные данные отсортированы двумя способами: Сиэтовег10 Огоегоате (12 гон(э) айтестес) В этих результатах даты по-прежнему отсортированы в порядке возрастания (предусмотренном по умолчанию), поскольку не было дано других указаний, но анализ данных за 1б-е декабря показывает, что значения Ссэгок(есть действительно отсортированы от последнего к первому, т.е.
в порядке убывания. . В рассыатриааемых примерок сортировка Т)еаудьтЕТСВ в Основном ОСТЩеотавяетоя с ис- ' , СОЛЬЗЕаЕНИЕМТЗНаЧЕНИй ОДНОГО НЗ'СтОЛбнсаг4СННМЕ КОТОРОГО аКДЮЧаЮТСЕ"В КОНЕЧйый РЕ; .ЗтдЬТЕТ, НО СЛЕдувт унйтЬЕНТЬ, Чтб КОНСТ))унцна ОВСЕЕ Нт 'Мсг)хот. ЕКНЮЧЕТЬ Л(Юбсй.отодбвц7 любОЙ'тйбяицм, сриыенйемой'е, запросе( нйааайсиыс ст.того, уйомииаетоя яи имя"етоЙ .
таб))нцы)в ссбиске аыборкн. 1996-12-10 00:00:00.000 1996-12-11 00:00:00.000 1996-12-12 00:00:00.000 1996-12-12 00:00:00.000 1996-12-13 00:00:00.000 1996-12-16 00:00:00.000 1996-12-16 00:00:00.000 1996-12-17 00:00:00.000 1996-12-18 00:00:00.000 1996-12-18 00:00:00.000 1996-12-19 00:00:00.000 1996-12-20 00:00:00.000 ГОЬКО СОЕСЕ Ь1ЬАЯ НОНСО ЕВНЯН НЕВСЯ АВОСТ ЯРЬ|Р, ЯАНТС ГАМ1А ЯЕ'/ЕЯ ВОПИ Основные операторы языка Т-БЯЬ 93 Агрегирование данных с использованием конструкции оаоо~ ат Описание конструкции ОНОЕВ ВХ в настоящей главе приведено не в той последовательности, в которой представлены конструкции в описании оператора БЕЗВЕСТ, приведенном в начале главы.
Еще раз рассмотрим полное определение структуры этого оператора: БЕЬЕСТ <со1отп 1>яс> [Рвом <яоогсе гаь1е(я)>] [ННЕНЕ <геясггссяма сепг(101оп>] [ОЕОПР ВХ <со1отп пате ог ехргеяягоп оя1по а со1отп 1п Гье БЕЬЕСТ 11яг>] (Р)АХТНО <гаясг1сс1яа соя<(1Г1оп Ьаяег) оп Гве ОНОПР ВХ геяо1ся>] [ОНСЕН Ну <со1птп 11яг>] [[РОН ХМЬ] [НАН, АНТО, ЕХРЬ1С1Т][, ХМ1,ОАТА] [, ЕЬЕМЕНТБ][, ВТНАНХ Ьаяе 64]] [ОРт1он (<чоегу н1пг>, [, ...и])] (3 Конструкция ОНОЕН ВХ используется гораздо чаще, чем ОНООР ВХ, поэтому целесообразно больше времени посвятить ее изучению. (3 Желательно, чтобы читатель понял, что он может произвольно соединять и согласовывать все конструкции, которые следуют за конструкцией ЕЕОМ, при условии, что порядок нх расположения будет соответствовать тому, который готова принять СУБД БОБ Яегуег (и который определен в описании синтаксиса).
Конструкция ОНООР ВХ предназначена для агрегирования информации. Рассмотрим простой запрос без конструкции СЕООР ВХ. Предположим, что требуется узнать, сколько деталей было заказано в каком-то конкретном наборе заказов: БЕЬЕСТ Огоег10, Опапс16у ТНОМ (Огг(ег Овса>1я] ННЕНЕ Ог<(ег10 ВЕТНЕЕН 11000 АНО 11002 "Обратите енммание< на. ТО;: Что Е Этом Вопроса ЛримеаяютабкаадРатмые скобки; Как было .оказано.в глеае н, если е имбнй какбгоятО обьекка И данном олучаб теблицыуобдар)кетов " :пробелы,"то денное.имя необкодимо'ем<делить,о-даук сторон:о йомощйо деадратнйк.ою-'': :ббк илн одинаднык каеычак; это дозволяет СУБД бй.
Зеп]е оорадабить',тда начинаетал 'и заканчиэадетов,имл осбьек]уе. бщб раз отметйм, чтосаатбр:не рекомендует' использовать) имена о пробелами на практика. Выполнение этого запроса приводит к получению следующего результирующего набора: Ооапгггу Огг(аг10 11000 11000 11000 11001 25 30 30 60 Очевидно,что конструкция СЕРЕЕ ВХ находится на одном из последних мест,но рассматривалась прежде, чем конструкция ОНООР ВХ. На это есть две причины, описанные ниже. 94 Глава 3 ПОО1 11ОО1 ПОО1 11оог 11002 поог 11оог 25 25 6 56 15 24 ао (11 гсе(я) аТТесгесо Нам действительно требовалось получить только итоговые данные по трем заказам, но была выведена каждая отдельная строка расшифровки из каждого заказа.