Программирование баз данных MS SQL Server (1084479), страница 37
Текст из файла (страница 37)
К таму же устаревший синтаксис действительно допускал создание загфосов, имеющих неоднозначное толкование. Иными азовами, иногда было возможно интфпретиФовать тексты запросов поразному А новый синтаксис устраняет эту гфоблегеу Соединения 151 Напомним, что выше в данной главе приведено сравнение конструкции 001И с конструкцией ХНЕВЕ. Это сравнение применялось еще с одной целью.
Дело в том, что в устаревшем синтаксисе все условия выполнения соединений выражаются в конструкции ИНЕВЕ. Устаревший синтаксис поддерживает все те соединения, которые были описаны в данной главе на основе синтаксиса АХБ1, за исключением операторов РОЬЬ Я01И. Поэтому даже тем разработчикам, которые упорно придерживаются устаревшего синтаксиса, для выполнения полного соединения приходится прибегать к использованию синтаксиса АХИ.
Синтаксис, альтернативный по отношению к синтаксису оператора 1аеа тО1н Еще раз вернемся к первому оператору 1ИИЕВ Б01И, который рассматривался в данной главе: БЕЬЕСТ * РВОМ Ргодоссэ 1ММЕВ Я01М Борр11егэ ОМ Ргооиссз.эорр1гег1Р = Борр11егз.зорр11ег10 Выполнение этого оператора приводит к получению 77 строк (опять-таки при условии, что база данных ИогЕНн1пс1 осталась той же, какой была сразу после ее развертывания в составе дистрибутива СУБД БЯЕ Веггег).
Но вместо использования конструкции 001И, предусмотренной стандартом АХИ, переформулируем этот запрос на основе синтаксиса соединения, предусматривающего применение конструкции ГНЕВЕ. Такая задача действительно является весьма несложной — достаточно исключить слова :ИМЕЯ Я01И и ввести запятую, а затем заменить операцию ОИ конструкцией ГНЕВЕ: Беьест * ЕВОН Ргооосгз, Борр11егз ХНЕВЕ Ргоаоссз.зорр11ег1Р = Яорр1гегз.зорр11ег10 На этом внесение изменений заканчивается, а после вызова полученного оператора на выполнение формируются те же 77 строк, которые были получены с применением другого синтаксиса.
Рассматриваемый в этом (зоздеае синтаксисе насзпояо1ее время поддеРживоется пРактически всеми основными системамц в которых предусмотрено использование языка Вф. (Огас(е, 1)В2, Му50® и т.д.). Синтаксис, альтернативный по отношению к синтаксису О~ТЕй ~01~ Синтаксис операторов, альтернативнгвй по отношению к синтаксису с конструкцией ООТЕВ о01И, во многом напоминает тот, который применяется вместо синтаксиса 1ИИЕВ О01И, за исключением того, что он требует использования некоторых особых знаков операций, специально предусмотренных для этой задачи, поскольку альтернативный синтаксис не поддерживает ключевые слова ЬЕГТ и В16НТ (а также в связи с этим ключевые слова ООТЕВ и Б01И). Указанные знаки операций приведены в табл.
4.12. 152 Глава 4 Таблица 4.12. Альтернативный и стандартный синтаксис операторов внешнего соединения Альтернативный синтаксис Синтаксис ло стандарту АЙЕ) ЬЕГТ З01М етонт зотм Рассмотрим в качестве примера первый оператор с конструкцией ООТЕЕ Ю01М, который был описан в данной главе. В этом операторе, приведенном ниже, использовалась база данных рп)оя. БЕЬЕСТ ббясопптхуре, ббзсоппх, з.зпог паве ГЕОМ бгясопппз б ЬЕГт ООТЕЕ ЗОЬН япогез я ОМ б.ясог гб = я.ясог 1б В этом случае также достаточно исключить слова ЬЕГТ ОСТЕН д01М и заменить операцию ОМ конструкцией ХНЕНЕ: Беьест бузсоппгсуре, б1ясоппс, з.зсог пате ГЕОМ б1ясопппя б, япогея з ННЕЕЕ б.япог Ьб *= я.япог Тс( Как и следовало ожидать, и в данном случае формируются такие же результаты, как и прежде: буясоппссуре б1зсоппп зсог пате 1пгсбв1 Спясотег Уо1пте Обясоппс Спяготег Ебзсоппх 10.50 6.70 5.00 КОЬЬ НОЬЬ Еоохоезп (3 гон(я) вГГесгеб) Оператор с конструкцией Е16НТ д01М принимает практически такой же вид: БЕЬЕСТ ббясопппхуре, б1ясоппп, з.япог паве ГЕОМ б1ясоппхя б, ягогез я ННЕЕЕ б.ясог Ьб =* з.зпог Ьб В поомднеи пфимедерезультаты пр(ьиенения двух опеРатфое, имеющих Разный агнтахаш, не угасходятся„но так было не всегда, поскольку до публинании синтаксического оп)зеделенил внешнего амдингния по ананда)зту АА)51 поддерхсха енманих соединений е разных СУБД действительно ха)зактмрилоеоласъ отсутствием единообразия.
Основнъм возможности опе. равий внешнего соединения совпадали, но нюансы изменллись от системы х системе и от версии х версии. Синтаксис, альтернативный по отношению к синтаксису скозз гоп~ Приведение операторов с конструкцией СНОБЕ 301М к альтернативному синтаксису является намного более простой задачей по сравнению со всеми другими конструкциями соединений. Чтобы создать с помощью альтернативного синтаксиса оператор, И в этом случае выполнение оператора приводит к получению того же количества строк (шести), как и при использовании оператора с синтаксисом АХИ. Соединения 153 равнозначный оператору с конструкцией СЕОБЯ 301Х, достаточно просто оставить его в неизменном виде.
Иными словами, ничего не нужно включать в конструкцию ХНЕВЕ в форме ТаЬ1еА. Со1швпА = ТаЬ1еВ. Со1О)ппА. Итак, в качестве чрезвычайно простого примера рассмотрим первый вариант оператора из раздела, посвященного описанию синтаксиса СЕОБЯ 301Х, который находится выше в данной главе. Оператор, соответствующий синтаксису А)ХЯ1, выглядит следующим образом: ЯЕ'ЕСТ ч.уепоогнаее, а.Ас)с)геяя ГКОМ Чепоогв ч СЕОБЯ 301М Аеогевя а Чтобы преобразовать его в оператор с альтернативным синтаксисом, достаточно удалить ключевое слово СЕОБЯ 301М и ввести запятую: ЯЕЬЕСТ ч.уепоогнаее, а.лс)овеяв ГВОМ Чеп4)огя ч, Аоогеяв а Как и при выполнении других примеров данного раздела, будут получены те же результаты, как и с помощью операторов с синтаксисом А)ХЯ1: Чеп4)огнаее Ас)с)геяв Оевтчп Япор Оев19п Бпор Ревьчп Бпор Оея19п Япор Оеятчп Япор )15 гое(я) аббеооео] Итак, теперь описаны конструкции и варианты синтаксиса, применяемые в большинстве систем управления базами данных.
Операция ~н10н На этом сравнение нового и альтернативного синтаксиса операторов соединения заканчивается. Перейдем к описанию операции ОХТОХ, которая всегда имеет одинаковую форму, независимо от того, какова в остальном синтаксическая форма оператора соединения. ОХТОХ вЂ” это специальная операция, с помощью которой можно создавать общий результирующий набор, используя данные, полученные с помощью двух или нескольких запросов. В действительности, в отличие от предыдущих рассматриваемых вариантов,операция ОМ10Х не представляет собой соединение, поскольку она в большей степени Ооп'я РаоаЬаяе Реп'в РаоаЬаве Роп'в ОаваЬаве Ооп'я РапаЬаяе Ооп'в ОасаЬаяе Паче'в Рава Оаче'в Оаоа Саче'в Рава Раче'я Рава паче'я Рава тпе ЯОЬ Яеяое1 Тпе БОЬ Яеяое1 Тпе ЯОЬ Беяое1 Тпе БОЬ Яеяие1 Тпе ЯОЬ Яечое1 1234 Апуепеге 567 Ма1п БС.
999 1вв ЯС. 1212 БМТСЬ Аче 364 Хеявьп 1234 Апуепеге 567 Ма1п БС. 999 1яг ЯС. 1212 БеЬСЬ Аче 364 Хеяп1п 1234 Апуепеге 567 Мвтп БС. 999 1яо ЯС. 1212 БеЬСЬ Аче 364 Хевотп 154 Глава 4 напоминает способ добавления данных из одного запроса непосредственно к концу данных, полученных с помощью другого запроса (с функциональной точки зрения выполняемые при этом действия выглядят немного иначе, но именно такая трактовка позволяет легче всего понять, как действует рассматриваемая конструкция). Конструкция 001Ы обеспечивает увеличение количества полей в строках (добавление столбцов), а конструкция 0))10Н позволяет увеличить длину столбцов (добавляя больше строк), как показано на рис.
4.1. Анализируя запросы, содержащие ключевое слово 0)110)), или формируя такие запросы, достаточно учитывать лишь несколько описанных ниже основных соображений. (3 Все запросы, результаты которых объединяются с помощью конструкции 0))10)), должны иметь одинаковое количество столбцов в списке выборки. Если количество столбцов в списке выборки первого запроса равно трем, то второй запрос (а также все последующие запросы, соединяемые операцией 0))10))) также должен иметь в списке выборки три столбца. А если в первом списке выборки предусмотрено пять столбцов, то и во втором их должно быть пять.
В каждом из последующих запросов всегда должно быть такое же количество столбцов, как в первом. Заголовки для столбцов комбинированного результирующего набора берутся только из формулировки первого запроса. Если первый запрос имеет список выборки, который выглядит, допустим, как БЕЕЕСТ Со11, Со12 АБ Бесопс), Со13 ЕЕО)4..., то независимо от имен или псевдонимов столбцов в последующих запросах заголовками столбцов, возвращенных оператором с конструкцией 0М10М, будут соответственно Со11, Бесово' и Со13.
О Типы данных каждого столбца, указанного в любом запросе, должны быть неявно совместимыми с типами данных столбцов, занимающих такое же относительное положение в списках выборки других запросов. Обратите внимание на то, что речь не идет о наличии в соответствующих столбцах данных одинаковых типов; достаточно лишь того, чтобы используемые данные допускали неявное преобразование типов (таблица преобразований, в которой показаны явные и неявные преобразования, приведена в главе 2). Если второй столбец в первом запросе относится к типу сваг (20), то вполне допустимо, чтобы второй столбец во втором запросе имел тип чагспаг (50) . Тем не менее за основу берется первый запрос, поэтому при обработке данных из второго результирующего набора все строковые значения, превышающие по длине 20 символов, будут усечены справа.