Введение в системы БД (542480), страница 274
Текст из файла (страница 274)
1035 Приложение А. Выражения языка БЯС <простое условие> <условие <условне сравнения> <хонструхтор строки> <оператор сравнения> <конструктор строки> <оператор сравнення> = [ < [ <= ] > ] >= ] <> <условие Еп> <конструктор строки> [ НОТ ] 1Н [<табличное выражение> ) ! <скалярное выражение> [ НОТ ] 1Н [<список скалярных выражений> ) <условие 1з)ге> <выражение нз символьных строк> [ НОТ ] ЫКЕ <шаблон> [ КЕСАРЕ <исключения> ] <условие шаСсб> <конструктор строки> ИАТСН ОН1ООЕ [<табличное выражение> ) <условие а11 или алу> <конструктор строки> <оператор сравнения> КЫ [<табличное выражение> ) [ <конструктор строки> <оператор сравнения> нНХ [<табличное выражение> ) <условие ехйвСз> ЕХ1ЯТЯ [<табличное выражение> ) <условие ппзспе> ОН1ЦОЕ [<табличное выражение> ) Условие 1ЛКЕ Условия ЫКЕ предназначены для простой проверки соответствия символьных строк заданному шаблону.
Еше раз приведем синтаксис этого условия. <выражение из символьных строк> [ НОТ ) ЫКЕ <шаблон> [ ЕЯСАРЕ <исключение> ] 1036 Приложения <условие <условие <условие <условие <условие <условие сравнения> Тл> 1з)ге> вайса> а11 или апу> ех1зсз> оп1спе> Здесь параметр <шаблол> представляет собой произвольное выражение наподобие символьной строки, а параметр <лсклвчение> (если указана фраза ЕЯСАРЕ) — выражение наподобие символьной строки, которое в результате вычисления дает единственный символ. Рассмотрим пример. НЕВЕСТ Р.Р)), Р.РИАИЕ УКОМ Р ИНЕЕЕ Р.РНАМЕ ЫКЕ 'СЕ'; Это сформулированный на языке ЯО).
запрос "Определить номера и наименования деталей, назвавания которых начинаются с буквы С". Резулыпат выполнения запроса представлен ниже. Поскольку предложение ЕЯСАРЕ не указано, символы в параметре <шаблон> интерпретируются так. ° Символ подчеркивания" "задается лля любого отдезьного синеока. ° Символ процента "Г устанавливается для любой последовательности из и символов, где л может быть равно нулю.
° Все остальные символы представляют сами себя. В данном примере по запросу будут возвращены строки из таблицы Р, для которых значение в столбце РНАИЕ начинается с большой буквы "С", за которой следует произвольная последовательность символов (в количестве, большем либо равном нулю). Приведем еще несколько примеров. АООЕЕЯЯ ЫКЕ 'ФйекХ1еу' Я)) ЫКЕ 'Я Дает результат истина, если в любом месте значения в столб- це АООЕЕЯЯ содержится строка "ВегИеу" Дает результат истина, если значение в столбце Я)) состоит ровно из трех символов и первый символ — "Я" Дает результат исанина, если значение в столбце РИАИЕ состоит из четырех или более символов и последним трем предшест- вует символ "С" Дает результат истина, если значение в столбце ИХТЕХТ начи- нается с символа подчеркивания (см. ниже) РИАИЕ ЫКЕ 'ЕС МХТЕХТ ЫКЕ '= Ъ' ЕЯСАРЕ В последнем примере символ "=" указан как символ исключения, означающий, что специальное назначение для символов "Е" и" " может быть отменено, если им будет предшествовать символ "=', И наконец отметим, что в предложении ЫКЕ <условие ((ке> условие вида х ИОТ ЫКЕ у [ ЕЯСАРЕ г ) определяется как равносильное следующему.
НОТ ( х ЫКЕ у [ ЕЯСАРЕ г ] ) 1037 Приложение А. Выражения языка пои. Условие МАТСН Параметр <условие жаГсЛ> имеет следуюший формат. <конструктор строки> ИАТСН ОМ1()ОЕ (<табличиое выражение> ) Пусть г1 — строка, которая получается в результате вычисления значения параметра <коиструктор строки>, и пусть Т вЂ” таблица, которая получается в результате вычисления выражения в параметре <табличное выражение>. Тогда условие, определенное параметром <условие васей>, будет истинным, если и только если таблица Т содержит ровно одну строку (скажем, г2), такую, что операция сравнения г1 = г2 дает для нее результат истина.
Приведем пример. БЕЬЕСТ ЯР.* ГНОИ ЯР ННЕКЕ ИОТ ( БР.Я() ИАТСН ОИ1ООЕ ( БЕЬЕСТ Я.Я() ГНОМ Я ) ) Это сформулированный на языке Б( Н. запрос "Найти поставки, которые выполнятся более чем одним поставшиком из таблицы поставщиков". Он может быть полезен при проверке целостности базы данных, поскольку, если база данных корректна, таких поставок, безусловно, не должно был~ь. Отметим, что для выполнения этой же проверки могло бы использоваться условие принадлежности (вхождення) <условие Тл>. Кроме того, в фразе ИАТСН ОИ1()ВЕ ключевое слово ОИ1ООЕ может быть опушено, но то~да фраза ИАТСН превратится в синоним фразы 1И (по крайней мере, если не учитывать ЪПЛЛ -значения).
Условие АЬЬ или А( (х' Параметр <условие а11 или алу> имеет следующий обший синтаксис. <конструктор строки> <оператор сравнения> <квалификатор> (<табличное выражение> ) Здесь параметр <олератор сравнении> представляет любой оператор из обычного набора операторов сравнения (=, <> и т.д.), а уточнение <квалификатор> может иметь значение АЬЬ или йНГ. В общем случае параметр <условие а11 или алу> принимает значение истина, если и только если результат соответствующего сравнения при значении квалнфикатора АЬЬ (либо АИГ) является истиной для всех (соответственно для каких- нибудь) строк в таблице, определяемой значением параметра <табличиое выражеиие>.
(Если таблица пуста, то условие йЬЬ всегда дает значение иоиииа, а условие АИХ вЂ” значение ложь). Приведем пример: "Определить наименования деталей, вес которых больше, чем вес любой из голубых деталей". ЯЕЬЕСТ 01ЯТ1ИСТ РХ.РИАИЕ ГНОИ Р АЯ РХ ИНЕКЕ РХ.НЕ16ТН > АЬЬ ( ЯЕЬЕСТ РГ.ИЕ16ТН ГНОИ Р АЯ РГ ННЕКЕ РГ.СОЬОК = 'В1це' ) Приложения 1038 Для данных нашего обычного примера результат будет таким. Пояснения. Вложенный параметр <табличное выражение> возвращает множество значений веса голубых деталей. Внешнее предложение ЯЕЬЕСТ возвращает наименования тех деталей, вес которых больше любого значения веса из указанного множества.
В общем случае в конечном результате, безусловно, может содержаться любое количество наименований деталей (в том числе и нулевое). Замечание. Здесь уместно предупредить читателя, что при использовании параметра <усповне а11 нпн алу> неискушенные пользователи часто делают ошибки. В формулировке предыдущего запроса на языке ЯОЬ было бы естественнее использовать ключевое слово "любой" (АНХ) вместо "каждый" (АЬЬ), что привело бы к (неверному) использованию сравнения > АНХ вместо > А1 Ь.
Аналогичные замечания справедливы и для всех остальных операторов сравнения с квапификаторами АНХ и АЬЬ. Условие 1ЛЧ'101) Е Параметр <условие ип1сие> используется для проверки, является ли каждая строка некоторой таблицы уникальной (т.е. не имеет ли дубликатов). Синтаксис >того условия следующий.
ОН100Е ( <табличное ввражение> ) Условие принимает значение истпиа, если в результате вычисления выражения, заданного параметром <табличное выражение>, получается таблица, в которой все строки различны, и ложь — в противном случае. В языке БОЬ допустимые значения параметра <скапярное внражение> образуют достаточно типичный набор и вполне самоочевидны.
Здесь мы ограничимся перечнем наиболее важных операторов, которые могут быть использованы в конструкциях таких выражений, и дадим лишь несколько комментариев для операторов САЯЕ и САЯТ, смысл которых, возможно, не совсем очевиден. Список операторов в алфавитном порядке выглядит так. * /) 1039 А.4.
Скалярные выражения Арифметические операторы (+, -, В1Т ЬЕНОТН САЯЕ САЯТ САКАСТЕК 1 ЕНОТЕ Операция конкатенации ( ) ~ ) СОККЕИТ 0БЕК ЬОИЕК Приложение А. Выразгсения языка ЯД1, ОСТЕТ ЬЕНЯТН РОЯТТ1ОН ЯЕББ1ОН ОЯЕК ЯОВЯТК1НБ ЯХЯТЕМ 0ЯЕК ТК1М 0РРЕК 0БЕК Отметим, что обращение к оператору обобщения также может использоваться внутри значения параметра <скалярное выражение>, поскольку такой оператор всегда возвращает скалярное значение.
Более того, результат вычисления выражения, заданного параметром <табличное выражение> и заключенного в круглые скобки, также может считаться скалярным значением, поскольку в результате вычисления получается таблица ровно с одной строкой и одним столбцом. Теперь рассмотрим операторы САЯЕ и САБТ. Оператор САЯЕ Оператор САБЕ возвращают одно значение из указанного множества значений в зависимости от заданного условия, как, например, показано ниже. Оператор САЯТ Оператор САЯТ преобразует заданное скалярное значение в указанный скалярный тип данного, как, например, показано ниже. САЯТ ( Р.ИЕЬБНТ АЯ ГЬОАТ ) Не все пары типов данных взаимно преобразуемы.
Например, не поддерживаются преобразования между числами и битовыми строками. (См. публикацию [4,22), где подробно и точно описано, какие типы данных могут быть преобразованы и в какие именно типы.) 1040 Приложения САЯЕ ИНЕИ Б.БТАТПЯ < ИНЕИ Я.БТАТОЯ < ИНЕИ Я.БТАТПБ < ИНЕИ Я.БТАТОЯ < ИНЕИ Я.ЯТАТОЯ < ЕЬБЕ ЕИО 5 ТНЕИ 'Обращаться в крайнем случае' 10 ТНЕИ 'Сомнительный' 15 ТНЕИ 'Не очень хороший' 20 ТНЕИ 'Посредственный' 25 ТНЕН 'Приемлемый' 'Отличный' ется точка с запятой ";*' как символ завершения оператора.