|
Программирование >> Реализация целостности данных
ЧАСТЬ ория реляционныаэ данных Тета-соеДииенй1 : :rU- Формально все соединения являются тета-соедИнениямя.;Однак6 если соединение товаио на операторе равенства, его обычно называют эквисоедияением или просто соединением. Соединение, основанное бом другом оператора ения, кроме равенства (О, >j >=, <, <=) называется тета-соединением. На практике Texa-coejndHeHHH встречаются довольно редко, однако они представляют собой очен ньтй и изящный метод решения определенных типов задач, Как правило, эти задачи связаны с поиском записей, для которых значение некоторых нолей превосходит срсдн1Ч; или суммарное значение, либо записей, ,1!.. которых значение некоторых полей укладывается в определенный диапазон. Предположим, : создали два представления, одно из чоторых* содержит среднее mt.iо единиц проданного товара для каждой кате. гории товаров (рис. 5-3). Далее в этой главе я расскажу, как создать такое же просто договоримся, что оно уже су- ществует. ProductCategoryAverages Beverages Condiments .. 1IQriS Dairy Produetd (jrains/Cerejlls MeafPoul1r); Produce ВЭД ProductTotals
рис, 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 УСЛОВИе>
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |