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

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


Механизм СУБД Microsoft Jet не предоставляет прямой поддержки полных внешних соединений, однако выполнив операцию объединения левого и правого внешних соединений, можно получить набор аналогичный полному внешнему соединению. мы подробно рассмотрим в одном из следующих разделов.

Деление

Последний из рассматриваемых реляционных операторов - реляционное деление. Этот оператор (названный так для того, чтобы отличать его от математического деления) возвращает те записи из

первого набора, которые совпадают с записями из другого набора. Рассмотрим в качестве примера набор записей, в котором представлены категории продуктов, приобретенных у каждого из ков. Реляционное деление позволит получить список поставщиков, поставляющих продукты всех категорий.

Подобные задачи не столь уж редки на практике, однако решаются они отнюдь не тривиально, поскольку SQL-оператор SELECT непосредственно не поддерживает реляционное деление. Но существует множество способов получить результаты, аналогичные результатам операции реляционного деления. Наиболее простой - переформулировать запрос.

Формулировку список поставщиков, поставляющих продукты всех трудно реализуемую средствами стандартного SQL-

запроса, можно заменить эквивалентной; список поставщиков, для которых число поставляемых ими категорий продуктов равно числу всех категорий продуктов . Это пример операции расширения, о которой мы подробно поговорим далее. Данный метод, однако, не всегда применим, и там, где он даолит, реализуют реляционное деление, как правило, при помощи связанных запросов (correlated

queries). Связанные запросы мы рассматривать не будем. В библиографическом указателе в конце книги есть несколько ссылок на литературу, где связанные запросы обсуждаются достаточно подробно.

Операции над множествами

Этот раздел четырем операторам, которые основываются

на традиционной теории множеств. Однако между операциями, определенными в рамках традиционной теории множеств, и рассматриваемыми нами, все же есть некоторые различия - ведь мы имеем дело с отношениями, а не множествами.



Объединение

Реляционное объединение (relational union) - это результат выполнения операции этенации над двумя наборами записей. Эту операцию можно представить как реляционную сию сложения (разумеется, данное утверждение не совсем точно). Результат операции объединения набора записей А и набора записей В простое добавление i..4 записей из набора А в набор В.

Например, нужно составить список все ртсоп. хранящихся в базе данных, дл овой рассылки почтовых сообщений. В базе данных ,: v/ntv/;t/наборы записей Customers и Employees содержат адреса покупателей никоо компании этстветннп, поэтому список всех адресов, хранимых в базе данных, можно получить, выполнив операцию объединения над двумя этими наборами записей. Для этого мы используем оператор UNION:

SELECT CompanyName шо, Addresstу PostalCode FROM Customers

UNION SELECT tNatnel & [LastName] AS Wame,

Address, City, PostalCode FROM Employees ORDER BY name;

Поле CompanyName было переименовано в Nome, a над полями FirstName и tji/Aflmf таблицы Employees выполнена операция конкатенации. Поле, полученное в результате конкатенации, также называется Name. Для запроса, выполняющего объединение, совсем не требуется, чтобы все ноля полей> каждого оператора SELECT имели одинаковые имена. Нужно только, чтобы в каждом запросе было одинаковое число полей и чтобы типы этих полей были одинаковыми ( л. i и совместимыми). Результаты выполнения объединения в Access показаны на рис. 5-5.

fAlfreris Fi;tlaFhlsle Obere Bfr 57

Ana TPJid.lp ЕИ1.*Г 1>*! У *Ч> de la Coff;ltaciSn 2222

Anne

Anlonio Moreno Taqueria Around the Horn

Berglunds finahhkop - . ;w DelitalBaSor ~ Blomlil № BilidotDmidas preparadas Bon app

BottDm.Dollar Markets

В W Capital Way 7 Her . Fd Mataderas 12) Haha Hi Sq BerjuyMgah £ FcffStarsTr S? It. pliiiaKltbn !C<Ai>quil,Ei7 -12, ruedesSourhars 23 Tsawaseen Ellvd JFauntlwgy Cfc&

mwIcoDF Tacnmsi

Ldnqon

We.i.:o n.F

Mann ha im

Strasbaurg MatlriH Marssille Tsawasiar Lomion

12209 05021

-*.14и I

05023 WA1 IDP S.958 22

еээгБ

13008 ~ EC2SNT

Puc. 5-5. Оператор UNION объединяет записи из таблиц



Пересечение

Операция пересечения (intersection operator) возвращает записи, общие для двух наборов. Очевидно, что пересечение можн зовать для поиска ющихся записей, что и происходит чаще всего. Пересечение реализуется при помощи внешних соединений,

Рассмотрим такой пример. Есть несколько списков клиентов, полученных из разных источников - старые шционньгх систем (рис. 5-6). Как правило, в таких таблицах есть повторяющиеся записи.

DuplicateCustomersI

ALF к1

.Alfreds Futterkiste

ANATR

; Ала Tmjillo Emparedados у helados

ANTON...

lAntonio Moreno Taqueria

AROuf

Around the Horn

BERGS

Bergiunds snabbkflp

BLAUS

Blauer See Delikatessen

BLONP

Blondel pere el fils

boud

Bolido Comidas preparadss

IDuplicateCustomers2

ALFKl

antonN

AROUT

FAMIA

fissa

FOUQ

FOLKO

FRANK

Alfreds Fulterkisle

;An paredados у helados

Antonio Moreno TsqUBrfa

lAround the Horn - j-.-..

; Familia Arquibaldo;

: FISS rca Inter. SalchiChas S.A.

iFolies gourmandes.............

jFolkochfe hb , Frankenversand

Puc. 5-6. Таблица с повторяющимися даННЫМи

Оператор SELECT возвратит повторяющиеся записи:

SELECT DupiicataCusioraersI FROM DuplicateCustomersI LEFT JOIN Dopli.cateGustoiiiers2

on ( DuplicateCustomersI.CustomerlD = DuplicateCustomers2.CustomerID) and (DuplicateCustomersI.CompanyName = DuplicateCusto rs2,CompanyName) WHER mers2.Cus.tofflerlD) IS NOT NULL));



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

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