С.Д. Кузнецов - Основы баз данных (1121716), страница 60
Текст из файла (страница 60)
Кстати, если в списке выборке присутствует явно или неявно заданный элемент вида г. а, то в пределах запроса соответствующий столбец таблицы т4 получает то же имя. "' Мы снова проигнорируем спецификацию раздела сойаге, связанную с использованием национальных наборов символов. 2Т7 Основы баз данных Курс чие АВс) или в порядке убывания (при наличии спецификации Ветс) в соответствии со значениями выражения, содержащегося в данном элементе, которые вычисляются для каждой строки таблицы 14. Далее выбирается второй элемент списка сортировки, и в соответствии со значениями заданного в нем выражения и порядка сортировки расставляются строки, которые после первого шага сортировки образовали группы с одинаковым значением выражения первого элемента списка сортировки.
Операция продолжается до исчерпания списка элементов сортировки. Результирующий отсортированный список строк является окончательным результатом запроса. В общем случае выражение, входящее в элемент списка сортировки, основывается на именах столбцов таблицы 1Ф и именах столбцов таблицы, над которой вычислялся раздел Яеьест (11 или тз). идея состоит в том, что если некоторое выражение могло бы быть использовано в элементе списка выборки, то его можно использовать в элементе списка сортировки. В стандарте $0$.:1999 присутствует ряд чисто технических ограничений на вид выражений, допустимых в элементах списка сортировки, если в запросе присутствуют разделы СЕОСР Ву и/или НАЧ1НС и если в разделе БЕЬЕСт присутствует спецификация В1Я11НСт. Но в любом случае это выражение может иметь вид а, где а — имя столбца таблицы 14.
Заметим, что в предыдущих версиях стандарта языка ЯО(., включая $( (./92, элемент списка сортировки определялся следующим синтаксическим правилом: огдег (сеп:: = ( со1опп папе ~ цпа(цпег1 (пгедег [ ( АБС ~ ВЕТС ) ) В качестве имени столбца (со1нпп паве) можно было использовать любое имя, вводимое для столбца таблицы 14 в элементе списка выборки.
Вместо имени столбца можно было использовать его порядковый номер (опз(дпед (псецег) в списке элементов выборки раздела Яеьест. как мы видели, в новом стандарте вторая возможность исключена. Доводом является не тот факт, что использование номеров столбцов противоречит реляционной модели. Использование номеров столбцов запрещено, поскольку не давало возможности применять в элементах списка сортировки выражения.
Тем не менее, по нашему мнению, возможность использования номеров столбцов в течение долгого времени будет продолжать поддерживаться в коммерческих реализациях Б()(., поскольку она применяется во многих существующих приложениях. Ссылки на таблицы раздела ГйОМ Напомним, что раздел ееом оператора выборки определяется синтаксическим правилом 278 Лекция 13 Характеристика оператора ЯЕьЕСТ и ссылки на таблицы раздела ЕНОМ ГНОМ гаЫе ге1егепсе совва11яг Рассмотрим более подробно, какой вид могут иметь элементы этого списка. Для начала приведем полный набор синтаксических правил э) ))л)999, определяющий ГаЫе ге1егепсе.« ГаЫе ге1егепсе::= ГаЫе ргтвагу ) )с1пес) Сне ГаЫе рг1пагу :с= ГаЫе ог снесу петле [ [ АЯ ] согге1астсп гаве [с)ег(чес) со1шпп 11яг) ] ] с)ег(чес) ГаЫе [ [ АЯ ] согге1атуоп паве [с)ег(чес) со1пвп 1(яг) ) 1агега1 с)ег1чес) гаЫе [ [ АЯ ) согге1агуоп паве [ )с)ег1чес) сс1пвп 1(яг) со11есг1сп с)ег1чес) гаЫе [ [ АЯ ) сотге1аг(оп паве [ [с)ег(чес) со1цвп 11яс) ] ] ОМАЛ [ГаЫе сг сртегу паве)[ [ АЯ ) ссгге1асуоп гатпе [ [с)ег1чес) со1цспт~ 11яс) ) ] ) [)о(пес) ГаЫе) ГаЫе ог с)иегу пап1е::= [ ГаЫе паве ) с)негу паве ) с)ег1чес) гаЫе ::= [с)негу ехргеяя(оп) 1агега1 с)ег1чеб гаЫе ::= НАТЕЕАь [с)нету ехргеяя(оп) сс11есстоп с)ег(чей СаЫе ::= НИИЕЯТ [со11есс(оп ча1пе ехгеяяусп) [ И1ТН ОНО1НАЫТу ] Мы отложим до следуюших лекций обсуждение порождаемых таблиц с горизонтальной связью (1асега1 с)ег(чес) гаЫе) и «соединенных таблиц» () с1пес) гаЫе).
Кроме того, мы не будем рассматривать в этом курсе конструкции со11есгтоп с)ег(чес) гаЫе и Оньу [гаЫе сг с)негу паве), поскольку они относятся к объектным расширениям языка $()]., которые в данном курсе подробно не рассматриваются (на неформальном уровне объектнореляционный подход обсуждается в последней лекции этого курса).
Но даже при таких самоограничениях для дальнейшего продвижения нам придется определить несколько дополнительных синтаксических конструкций языка Я.)[.. Табличное выражение, спецификация запроса и выражение запросов Табличным выражением (гаЫе ехргеяя(оп) называется конструкция ГаЫе ехргеяя(оп ::= ЕНОМ ГаЫе ге1егепсе совва11яс ИНЕВЕ сопс)1С1опа1 ехргеяя(сп ) [ СНООР ВУ со1шпп паве сопппа1(яс ] [ НАЧ1ИС сопс)(Ыспа1 ехргеяяусп ] * В связи с введением в стандарте ЯО).:2003 конструтсторв типов мультимножеств, в кпчестве элеметпв списка ссылок нв тпблины раздела риси теперь можно использовать и вырпжение со знпчением-мультимножеством. Однвко в этом курсе мы не будем подробно рпссмвтривпть эту возможность.
279 Основы баа данных К с Спецификацией запроса (с(негу прес(11састоп) называется конструкция с(негу ярес1Исаг(оп БЕЬЕСТ ( АЬЬ ] РТЯТ1ИСТ ) яе1есг тгею союгпа11яс СаЫе ехргеяя1оп Наконец, выражением запросов (с]негу ехргеяятоп) называется конструкция с]негу ехргеяятоп ::= ( н(гЬ с1ацяе ) с]негу ехргеяятоп Ьоду снегу ехргеяятоп Ьос]у ::= ( поп зо(п с]негу ехргеяяэ.оп 3о(пес] ЬаЫе ) поп Зотп с]негу ехргеяятоп ::= поп ]о(п снегу Сегпг с1цегу ехргеяяэоп Ьос]у ( РИ10И ] ЕХСЕРТ )( АЬЬ ] Р1БТТИСТ ( соггеяропс](пд прес ] огэегу гегпэ с]негу Сегю гг= поп >отп с]негу Сегпг ] >отнес] СаЫе поп ]о)п с]негу пегги ::= поп ]о(п с]негу рг(пгагу ] снегу Сегэп 1НТЕЕЯЕСТ ( АЬЬ ] Р1ЯТ1ИСТ ) соггеяропс]1по прес ] снегу ргттагу с]негу ргтгпагу ;;= поп ]отп с]негу рг(пэагу ] ]отвес] СаЫе поп Зотп с]негу ргнпагу: г= япгр1е саЫе (поп ]о1п снегу ехргеяятоп) ятюр1е СаЫе::= срэегу ярес(1(саЫоп СаЫе уа1це сопяСгцсгог ТАВЬЕ СаЫе пагпе соггеяропЖпд прес ::= СОЕЕЕЯРОИР1ИО ВУ со1цппт пагпе сопппа 1(яг ] Если не обращать внимания на не обсуждавшиеся пока конструкции зотин саЫе и гаые уа1це сопясгцссог, синтаксические правила показывают, что выражение запросов строится из выражений, значениями которых являются таблицы, с использованием «теоретико-множественных»* операций Рн10н (объединение), ехсерт (вычитание) и 1нтееЯест (пересечение).
Операция пересечения является «мультипликативной» и обладает более высоким приоритетом, чем «пддитивные» операции объединения и вычитания. Вычисление выражения производится слева направо с учетом приоритетов операций и круглых скобок. При этом действуют следующие правила. ° Если выражение запросов не включает ни одной теоретико-множественной операции„то результатом вычисления выражения запросов яв- ' Мы испольэовали кавычки, поскольку таблицы, к которым применяются операции, в оба»ем случае могут содержать строки-дубликаты, т,е.
являться мул»гяимяолсесгявпии. 280 Лекция 13 Характеристика оператора ЗЕСЕСТ н ссыпки на таблицы раздела РВОМ ляется результат вычисления простой или соединенной таблицы. ° Если в терме )поп зосп с)негу гегпз) или выражении запросов (поп Зоуп с)нету ехргеап(оп) без соединения присутствует теоретико- множественная операция, то пусть т1 „т2 и тк обозначают соответственно первый операнд, второй операнд и результат герма или выражения соответственно, а ОР— используемую теоретико-множественную операцию.
° Если в операции присутствует спецификация соккеЯРОКР1ио, то: (а) если присутствует конструкция Ву со1шпп паве сопзпа 1(ат, то все имена в этом списке должны быть различны, и каждое имя должно являться одновременно именем некоторого столбца таблицы т1 и именем некоторого столбца таблицы т2, причем типы этих столбцов должны быть совместимыми; обозначим данный список имен через ЯЦ (ь) если список соответствия столбцов не задан, пусть ВВ обозначает список имен столбцов, являющихся именами столбцов и в т1, и в т2, в том порядке, в котором эти имена фигурируют в Т1; (с) вычисляемые терм или выражение запросов без соединения эквивалентны выражению (Веьест ВВ Ркон т1) ОР )кеьест е~, Рком т2), не включающему спецификацию соккезронп1но. ° При отсутствии в операции спецификации СОККЕЯРОИО1ИО операция выполняется таким образом, как если бы эта спецификация присутствовала и включала конструкцию ВУ со1пппт папе соптка 1(аг, в которой были бы перечислены все столбцы таблицы Т1.' ° При выполнении операции оР две строки э1 с именами столбцов с1, с2, ..., сп и а2 с именами столбцов с)1, с)2, ..., сзп считаются строками-дубликатами, еслидля каждого 1 (1 = 1, 2, ..., и) либо с) и с)1 несо- держат нпьЬ, н ) сд = с)з) = Оие*', либо и су, и с)з содержат нс)ы,.
° Если в операции ОР не задана спецификация )сьь, то в тк строки-дубликаты удаляются. ° Если спецификация дьь задана, то пусть а — строка, являющаяся дубликатом некоторой строки т1, или некоторой строки Т2, или обеих; пустып — число дубликатов а в Т1, а и — число дубликатов а в т2. Тогда: ° если указана операция ОНТОН, то число дубликатов а в ТК равно сп+и; ° если указана операция ехсеРт, то число дубликатов а в тк равно тах ( (лс-п), 0) ', ° если указана операция 1НТЕКВЕСТ, то число дубликатов э в ТК равно слзп (гл,п). * Другими словами, при отсутствии спецификации СОКККЗКОНПтне требуется, чтобы заголовки таблиц-операндов совпадали за исключением, возможно, порядка сяедования столбцов.
"' С учетом возможности неявного приведения типов. 281 Основы баз данных Курс Раздел [((1)ТН выражения запросов Как видно из синтаксиса выражения запросов, в этом выражении может присутствовать раздел Х1ТН. Он задается в следующем синтаксисе: ы1т]т с1ацяе::= Х:ТН [ НВС(ЖЯ17Е ] ытт]т е1елзепт сстща 1тят н[т]т е1ещепт::= с(нету пагле [ (со1цпп лаве 1тят] АБ (снегу ехртеяяуоп] ( яеагс[т ог сус1е стацяе ] Обшую форму раздела хТТН мы обсудим в следуюших лекциях, когда будем рассматривать средства формулировки рекурсивных запросов. Пока ограничимся случаем, когда в разделе Х1ТН отсутствуют спецификация Ввсцй81уЕ н яеагс[з ог сус1е с1ацяе, Тогда конструкция ХТТН с(цету паще (с1, с2, ...
сп] АЯ (цсету ехр 1] с(иегу ехо 2 означает, что в любом месте выражения запросов с(нету ехр 2, где допускается появление ссылки на таблицу, можно использовать имя ацету паве. Можно считать, что перед выполнением с[цегу ехр 2 происходит выполнение чцегу ехр 1, и результирующая таблица с именами столбцов с1, с2, ...
сп сохраняется под именем анкету папе. Как мы увндим позже, в этом случае раздел Х:ТН фактически служит для локального определения представляемой таблицы (уТВХ). Конструкторы значения строки и таблицы Чтобы завершить обсуждение выражений запросов (с учетом того, что конструкция соединенных таблиц (3 о1пес] таЫ е) отложена на следующие лекции), нам осталось рассмотреть конструкции таЫе уа1це сопяттцсгот и ТАВЬК таЫе паще. В определении конструктора значения-таблицы используется конструктор значения-строки, который строит упорядоченный набор скалярных значений, представляюший строку (возможно и использование подзапроса* ): гоы уа1це сопяттцстог ::= гоы уа1пе сопяттцсгог е1ещепт [ НОХ , '(»оы уа1це сопяттцсто» е1елзепт сопща 1тят] гоы яыЬс(нету тоы уа1пе сопяттпстот е1ещепт ::= уа1пе ехргеяятоп ((((Л.Ь ( ПВГАСАТ Заметим, что значение элемента по умолчанию можно использовать только в том случае, когда конструктор значения-строки применяется в " В следующей лекции мы более подробно обсудим подзапросы.