С.Д. Кузнецов - Основы баз данных (1121716), страница 57
Текст из файла (страница 57)
Кроме того, в данной лекции мы не будем точно придерживаться порядка введения понятий и синтаксических конструкций, принятого в стандарте языка. Мы начнем с некоторой общей картины, дающей представление об операторе выборки, а затем будем постепенно уточнять ее. Скалярные выражения Скалярное выражение« вЂ” это выражение, вырабатывающее результат некоторого типа, специфицированного в стандарте. Скалярные выражения являются основой языка Я~(., поскольку, хотя это реляционный язык, все условия, элементы списков выборки и т. д, базируются именно на скалярных выражениях. В В()1.:1999 имеется несколько разновидностей скалярных выражений. К числу наиболее важных разновидностей относятся численные выражения; выражения со значениями-строками символов; выражения со значениями даты-времени; выражения со значениями-временными интервалами; булевские выражения.
Мы не будем слишком глубоко вникать в тонкости, но тем не менее приведем некоторые базовые спецификации и пояснения. Конечно, материал этой лекции опирается на разделы «Типы данных Я )Ьз и «Неявные и явные преобразования типа или домена» лекции 11, в которых упоминались некоторые базовые операции над значениями типов данных Б() 1. и обсуждался оператор Одзт, позволяющий разрешенным образом изменять тип данных результата скалярного выражения. Прежде чем перейти к конкретным видам скалярных выражений, рассмотрим некоторые наиболее общие языковые конструкции, на которых эти выражения базируются.
' В стандарте языка ьОь в качестве абшего термина лля обозначения таких выведения используется термин та1ие ехргемюя. Однако в менее формальных публикациях обычно применяется более понятный термин зса!иг ехргеиюл, для которого, вдобавок, сугдествует адекватный русский эквивалент скалярное выражение. В этом курсе мы такзке предпочитаем использовать именно этот термин. 2бд Лекция 13 Характе истика оператора ЗЕЬЕСТ и ссылки на таблицы вздела РВОМ Общие синтаксические правила построения скалярных выражений В БО(.:2003 имеются девять разновидностей выражений в соответствии с девятью категориями типов данных, значения которых вырабатываются при вычислении выражения ча1це ехргеяя(оп пщвег(с ча1ие ехргеяя(оп ясг(пд ча1це ехргеяя(оп с(агег(ше ча1пе ехргеяя(оп гпгегча1 на1це ехргеяяуоп Ьоо1еап ча1це ехргеяя1оп аггау ча1це ехргеяя(оп гщ1С(яег на1пе ехргеяя(оп гоы ча1це ехргеяя(оп цяег Йе((пес( на1це ехргеяя(оп гегегепсе ча1пе ехргеяя(оп Как уже отмечалось в начале этого раздела, мы ограничимся обсуждением первых пяти разновидностей выражений.
В основе построения этих видов выражений лежит первичное выражение, определяемое следующим синтаксическим правилом: на1це ехргеяя(оп рг(шагу цпя(днес( ча1це ярес(1(саг1оп со1цюп ге(егепсе яес ГцпсГ(оп ярес(1(сасзоп яса1аг яцЬс(негу 1 саяе ехргеяя(оп (ча1це ехргеяя1оп( санс ярес(1(сас(оп В пределах этого курса можно считать, что спецификация беззнакового значения (цпя(апет( ча1це ярес(1(саг(оп) — это всегда литерал соответствующего типа или вызов ниладической функции (например, сБРЗЕнт УЯЕЕ)*.
При вычислении выражения удля строки таблицы каждая ссылка на столбец (со(пгпп гегегепсе) этой таблицы, непосредственно "Другие вариантьг появляются во встраиваемом и динамическом Зггь, а так:ке расширении языка, предназначенного лля написания кода хранимых процедур, триггеров, методов определяемых пользователями типов и тл.
В любом случае беззнаковое значение известно до начала компиляции любой содер:кащей его конструкции языка БГ)Г.. 265 Основы баз данных Курс содержащаяся в (г, рассматривается как ссылка на значение данного столбца в данной строке. Агрегатные функции (функции над множествами — яег Тапсе(оп ярес111саг(оп) обсуждаются в следующих лекциях. Если первичное выражение является скалярным подзапросом (яса1аг яп)х(песу, или подзапросом, результатом которого является таблица, состоящая из одной строки и одного столбца) и результат подзапроса пуст, то результат первичного выражения — неопределенное значение. (Подзапросы обсуждаются в следующей лекции, выражения с переключателем (саяе ехргеяя(оп) рассматриваются ниже в этом разделе.) Оператор явного преобразования типов (саяг ярес111саг(оп) рассматривался в разделе «Неявные и явные преобразования типа или домена» лекции 11.
Численные выражения Численное выражение — это выражение, значение которого относится к числовому типу данных. Вот формальный синтаксис численного выражения: пппег(с ча1пе ехргеяя(оп>::= яппег(с сего пппег(с ча1пе ехргеяя(оп «гегп пшаег1с ча1пе ехргеяя1оп — гегп пожег(с гегп ::= пппег1с Тасгог пппег)с Гегп * пппег1с Тассог пппег(с гегп ! пппег(с 1асгог пппег)с 2асгог ::= [ ( « ( — ) 1 пппег(с рг)пагу пчпег(с рг1пагу ::= ча1пе ехргеяя(оп рг(пату пппег(с ча1пе Тппсг(оп Следует обратить внимание на то, что в численных выражениях КОЕ первичная составляющая (попег(с рг.1пагу) является либо первичным выражением (см.
выше), либо вызовом функции с численным значением (пппег(с ча1пе Тппсг(оп). Из этого, в частности, следует, что в численные выражения могут входить выражения с переключателем и операции преобразования типов. Вызовы функций с численным значением определяются следующими синтаксическими правилами: пспег)с ча1пе 2ппсг(ап РОЯТТТОН (сбагассег ча1пе ехргеяя)сп ТИ сНагасгег ча1пе ехргеяя(сп) ( ( СНАЕ 1 ЕИСТН ~ СНйРАСТЕЕ 1 ЕИСТН ) (ягг1пд ча1пе ехргеяя)сп) Лекция 13 Характеристика оператора ЕЕ»ЕСТ и ссылки иа таблицы раздела ЕЯОМ ОСТЕТ ЬЕИОТН (я»гупц ча1ие ехргеяяуоп) В1Т ЬЕМОТН (я»ттпц ча1ие ехргеяятоп) ЕХТРАСТ (( ба»е»1ве 11е1й ( »1ве топе »1е1д ) )ЕОМ ( »)а»е»1ве ча1ие ехргеяяуоп 1п»етча1 ча1ие ехртеяяуоп )) САЕО1МАЬТТУ (аттау ча1ие ехртеяяуоп ви1»тяе» ча1ие ехргеяятоп) АВБ (пиве»ус ча1ие ехртеяятоп) МОЕ (пивег1с ча1ие ехргеяя1оп) Мы достаточно подробно обсуждали функции определения позиции и длины по отношению к символьным и битовым строкам при рассмотрении соответствующих типов данных; здесь приводится только уточненный синтаксис их вызова.
Функция ехтелст извлечения поля из значений дата-время нли интервал позволяет получить в виде точного числа с масштабом 0 значение любого поля (года, месяца, дня и т. д.). Какой конкретный тип точных чисел будет выбран — определяется в реализации. Функцию слеОТМЛЫТу мы обсуждали в лекции 11. Функции лВЕ и МОО возвращают абсолютное значение числа и остаток от деления одного целого значения на другое соответственно. Выражения, значениямн которых являются символьные нли битовые строки Выражения символьных и битовых строк — это выражения, значениями которых являются символьные или битовые строки. Соответствующие конструкции определяются следующим синтаксисом: я»тгпд ча1ие ехргеяятоп ::= с)татас»ег ча1ие ехргеяятоп Ы» ча1ие ехргеяя1оп с)татас»ег ча1ие ехргеяяуоп ::= сопса»епа»1оп с)тагас»ет 1ас»ог солса»епа»1оп::= с)тагас»ег ча1ие ехргеяятоп )( сЬагас»ет 1ас»ог с)татас»ег йас»ог ::= с)татас»ег ртплату [ со11а»е с1аияе ] с)тагас»ет рттвагу ::= ча1ие ехргеяятоп ргтвату я»тунц ча1ие Гипс»1оп Ы» ча1ие ехртеяяуоп ::= Ы» сопса»епа»1оп ) Ы» 1ас»ог Ы» сопса»епа»1оп ::= Ы» ча1ие ехргеяятоп () Ы» ртувагу Ы» ртувагу ::= ча1ие ехргеяятоп ргтвату я»Ыпд ча1ие Еипс»1оп 267 Основы баэ данных Курс Если не вдаваться в тонкости, смысл выражений символьных и битовых строк понятен из описания синтаксиса: единственная применимая для построения выражений операция — это конкатенация, производящая «склейку» строк-операндов.
Более важно то, что первичной составляющей выражения над строками может быть как первичное скалярное выражение (см. выше), так и вызов функций, возвращающих строчные значения. Репертуар и синтаксис вызова таких функций определяются следующими правилами: ясгтгд ча1пе йппсс(ог.::= сйагассег уа1ие 1ппсс(оп ) Ыг ъа1пе 2пгсг(ог. сйагассег оатие 1игсс(ог ::= БЦВБТВ1НС (сЬагасгег уа1ие ехргеяя)ог. РВОМ ясагс ров(Г)оп [ РО[( ясгтгд 1епдсй ]) БОВБТР1НС (с)тагассег уа1пе ехргеяя(оп Б1М1ЕАЕ сЬагассег оа1пе ехргеяя(оп ЕБОАРЕ сйагассег га1пе ехргеяя(оп) ОРРЕР. ( 1 ОХЕВ ) (сЬагасгег оа1пе ехргеяя(ог.) ООНЧЕВТ (спагассег оа1пе ехргеяя(оп ОБТНС сопоегя1оп патпе) ТВАНБВАТЕ (сйагассег оа1пе ехргеяя(ог.) ОБ1НС Ггапя1астоп папе) ТР1М ([ (1 ЕАО1МС ( ТРА1Е|НС ( ВОТИ) ] [ с)тагасгег уа1пе ехргеяя(оп [ сйагасгег уа1ие ехргеяя(оп ]) ОЧЕ[(ЕАУ (сЬагассег оа1пе ехргеяя(ог. РЕАО1НС сйагассег га1пе ехргевя1оп РВОМ ясагс ров111оп РОВ ясгтпд 1епдсп ]) ЫГ оа1пе 1ппсс(оп ::= БОВБТВ1НС (Ь1Г оа1пе ехргеяя(оп Р[(ОМ ясагс роя(ГЕоп РОВ ясг(пд 1епдГЬ ]) ясагс роя(стоп:: = плпег1с оа1пе ехргеяятог, ягг1пд 1епдгй ::= пожег(с уа1пе ехргеяя(оп Основные полезные функции — выделение подстроки (БОВБтвтнс) и замена малых букв на заглавные и наоборот (ОРРЕВ и ЬОХЕЕ) — мы упоминали при рассмотрении тинов символьных и битовых строк.