Программирование >>  Реализация целостности данных 

1 ... 33 34 35 [ 36 ] 37 38 39 ... 124


ЧАСТЬ ория реляционныаэ данных

Тета-соеДииенй1 : :rU-

Формально все соединения являются тета-соедИнениямя.;Однак6

если соединение товаио на операторе равенства, его обычно называют эквисоедияением или просто соединением. Соединение, основанное бом другом оператора ения, кроме равенства (О, >j >=, <, <=) называется тета-соединением.

На практике Texa-coejndHeHHH встречаются довольно редко, однако они представляют собой очен ньтй и изящный метод решения определенных типов задач, Как правило, эти задачи связаны с поиском записей, для которых значение некоторых нолей превосходит срсдн1Ч; или суммарное значение, либо записей, ,1!.. которых значение некоторых полей укладывается в определенный диапазон.

Предположим, : создали два представления, одно из чоторых* содержит среднее mt.iо единиц проданного товара для каждой кате. гории товаров (рис. 5-3). Далее в этой главе я расскажу, как создать такое же просто договоримся, что оно уже су-

ществует.

ProductCategoryAverages

Beverages

Condiments ..

1IQriS

Dairy Produetd (jrains/Cerejlls MeafPoul1r);

Produce ВЭД


ProductTotals

nchai...................

2; Chang 7 -. 3; AiiisBBd Syrtjp 4 CKefyWon> Cajun Eeasonini j.S.ChefAnlonBGumbo Mix Ё Grandmas Boysenberry Spread

7 Uncle Bobs Organic DrteJ 1 Р9Ш

8 NurthwoDde Crarvberrj Sauce

Mlshi krtbb NJbiL

828 1057 Э2Е

. 453

t

301

if fTHPJ IVBOfl >ЧЯЦ

lOlkma

i 1OuesoCabfaies

t2;Queso Mancheaa La Pastara . 13iKonbu . - -

Г -.. .... зм

... m

liitsb

рис, 5-3. эти представления М0ЖНО соединить, используя тета-соединение ,.,



Этот оператор SELECT аданный на операторе сравнения > , поэиоляет получить список продуктов, лидирующих по продажам в каждой категории: V . , .. - .

SELECT oryAverages.GategoryNane,. - :

ProductTotaLs.ProductName . FROM ProductCategoryAverages у ; INNER Min ProductTotals - .f

ON ProductCategoryAverages.CategorylD = ProductTotals-.CategorylD AND ProductTotals.TotalSoia > [ProductCategoryAverages]. [AverageSold];

Результат выполнения этого оператора показан на рис. 5-4.

Beverages

Beverage Beverag8S

Beverages Beverages

Beverages

CondiiriEnts Condiments

Condiments

Condiments

Condiments Confections

Chai

Chang ., !l,:il.!2j;

Guarans FaMisfica .

Steeleye Stout

0utbacl< l ager ;

Rhijnbrau Klosteitier

Лакка1кбаг[ ZiT.IZ,

Cheons Cajun S8asonirtg

GulSMalacca Simp dsrable

Vegie-spread ......., J

Fiery Hot Sauce

Оп1Ы Franl<furter jrurie Solje Pavliwa

Puc. 5-4. Набор записей - результат тета-соединения

В приведенном примере представление можно создать, использовав условие WHERE в операторе выборки. Но на самом деле Access изменит синтаксис SQL-запроса, если вы оставите его в таком виде:

SELECT DISTINCTROW ProductCategoryAverages.CategoryName,

ProductTotals.ProductName FROM ProductCategoryAverages INNER JOIN ProductTotals

erages.CategorylD = ProductTotals.CategorylD WHERE

(((ProductTotals.TotalSold)>[ProductCategoryAverages]. [AverageSold]));

С технической точки зрения, все соединения, в том числе эквисо-единения и естественные, можно переформулировать, переписав в виде операторов SELECT вуюшим!! ограничениями. (С точки зрения баз данных, тета-соединение не является атомарным оператором]. В случае тета-соединений, такая формулировка запро-



сов предпочтительна, так как механизмы СУБД лучше оптимизируют выполнение запросов,

Внешние соединения

До сих нор мы рассматривали внутренние соединения, то есть соединения [ающл. записи, для которых выполняется условие соединения (результат выполнения соответствующей логической операции - значение True). Часто внутреннее соединение определяют как операцию, возвращающую записи, у которых совпадают значения определенных нолей. Однако это не так: данное определение предполагает, что соединение основывается на операторе равенства, а как мы видели, далеко не для всех соединений это утверждение справедливо.

В реляционной алгебре поддерживается также другой вид соединений - внешние соединения (outerjoins). Внешнее сосл.инснш возвращает все записи, которые возвращает внутреннее соединение, плюс все записи из одного или обоих наборов данных, участвующих в соединении. значения (те, для которых не существу-

ет соответствия) замещаться значениями

Внешние соединения можно разделить на несколько групп: левые, правые и полные - в зависимости от того, какие именно дополнительные записи включены в них. Левое внешнее соединение (left outer join) возвращает все записи из отношения, находящегося на стороне один связи один ко многим , а правое внешнее соединение (right outer join) - все записи из отношения, на стороне

многие. такой связи. В механизме СУБД Microsoft Jet и SQL Server порядок, в котором наборы записей перечисляются в операторе SELECT, различается для левого и правого внешнего соединения. Так, следующие два оператора возвращают все записи из таблицы X, а также те записи из таблицы Y, для которых значение логического выражения <условие> - True:

SELECT FROM X LEF TEfi JOIN Y ON <услозие> SELECT - FROM Y RIGHT CUTE X ON <VCnOBMe>

Полное внешнее соединение (full outer join) возвращает все записи из обоих наборов, комбинируя те, для которых выполняется условие данного соединения. В SQL для полного внешнего соединения

используется следующий оператор:

SELECT ОМ X FULL OUTEP JOIN Y ON УСЛОВИе>



1 ... 33 34 35 [ 36 ] 37 38 39 ... 124

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика