|
Программирование >> Реализация целостности данных
Механизм СУБД 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
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));
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |