|
Программирование >> Реализация целостности данных
ЧАСТЬ 1 Результаты выполнения этого оператора показаны на рис. 5-7.
Puc. 5-7, Внешнее HiHue ании с оператором IS NOT NULL выполняет операцию пересечения Разность Операция пересечения используется для поиска повторяющихся записей, а операции цения разности - наоборот, для поиска утерянных (осиротевших) строк. Реляционная разность (relational difference) для двух наборов записей будет содержать все записи, которые принадлежат к одному набору записей, но не принадлежат к другому. Например, для двух наборов записей на рис. 5-6 следующий оператор SELECT возвратит все записи, не являющиеся общими для этих двух наборов записей: SELECT DuplicateCListorriersl.. FROM DjplicateCustomersi LEFT JQIK 0uplicateCiistomers2 ON {DuplicateCustomersI .CLstomerlD = DuplicateCustofTiers2. CustomerlD) AN ersl. ConpariyName = DLiplicateCustomers2.CompanyName) niHERE (DuplicaieCustomers?. CustomerlD is NULL); Здесь операция внешнего соединения возвращает все записи из двух списков. Как уже говорилось, внешнее соединение возвращает значение Aw для нолей, у которых не тствуюших записей в другой таблице. В условии WHERE используется оператор IS ограничива- ющий число возвращаемых записей теми, для которых нет соответствующих записей в другой таблице. Если описанный способ кажется вам слишком сложным, попробуйте выполнить эту операцию в два шага; сначала создайте внешнее соединение как представление, а затем ограничьте число записей, задав условие WHERE (рис. 5-8). Шаг Создать внешнее соединение
Select DuplicateGustoniersl. FROM DupliGateCustomarsI LEFT JOIN DuplicateCustoiiiers2 ON (DupllcateCustoinersI,CustouerlD = DuplloateCustomers.CustomerlD) Шаг 2. Ограничить число записей теми, которые содержат Null в CustomerlD BERSS Вё.-glijiidi iii-jjLr.:ij BlALlp BlauerSee Delikatessen BlONP Blondel pere etilli BOUD Bolido Conidas preparadas Select FROM DuplicateCustomersl LEFT JOIN DyplicateCustoniers2 ON (DuplicateCustomersI.CustomerlD = DuplicateCustomers.CustomerlD) WHERE (DupUcateCustomersZ, CustomerlD) IS NULL Puc. 5~8. Операции wcmu можно выполнить в два шага Декартово произведение Последняя из рассматриваемых операций над множествами - декартово произведение. Как и аналогичная операция в классической теории множеств, декартово произведение двух наборов записей представляет собой соединение каждой записи из одного набора записей с каждой записью из другого набора. Декартово произведение (называемое также просто произведением) двух наборов записей получают, составив оператор SELECT без оператора JOIN. Например, объединить записи о каждом из покупателей с соответствующими записями о торговых представителях, обслуживающих покупателей, можно следующим образом: SELECT СиЕТШРrHsme. CSftName FPOH CustomRr. CSRsr Декартово произведение широко используют при анализе данных, а также как промежуточный результат, предназначенный для дальнейшей обработки. Однако намного чаще оно получается вследствие ощибки; например, если, программируя HaAccess, вы забудете вклю- . ЧАСТЬ ляционных базданных чить в SQL-занрос соединение. Подобные ошибки часты, поэтому на первых норах не удивляйтесь, если вместо ожидаемого результата у вас будет получаться декартово произведение. Дополнительные реляционные операторы С тех нор как впервые были сформулированы принципы, положенные в основу реляционной модели, прошло достаточно много времени. Появились некоторые дополнительные операции, расширившие рамки реляционной алгебры. Мы рассмотрим три такие операции, наиболее часто встречак>щиеся на практике: агрегирование (summarize), расширение (extend) и переименование (rename). Кроме того, я опишу три дополнительных оператора, ноддерживаемхх продуктами Microsoft: TRANSFORM, ROLLUP и CUBE. Агрегирование Операция агрегирования выдает результаты, которые содержат суммарные данные, сгруппированные по указанным значениям полей. Она применима в любых ситуациях, где нужно рассматривать данные на более высоком уровне чем просто уровень данных, хранимых в базе. Операция агрегирования реализуется при выражения GROUP BY оператора SELECT. Для каждого уникального значения указанного ноля или нескольких нолей возвращается одна запись. Если указано несколько нолей, группы будут вложенными. Рассмотрим следующий оператор: SELECT Categories.CategoryName, Products.ProductName, SUM([Order Details],Quantity) AS SumOfQuantity FROM (Categories INNER JOIN Products ON Categories.CategorylD = Prndjr-s CitegorylD) INNER JOIN [Order Details: ON Producis. PraductID = [Order Details] .ProductID GROUP BY Cateqoies CatRnorvW.r-r. Р-лПигт.;; P-n,ii;rtMr-inie: Этот оператор возвращает но одной записи для каждого продукта в БД wind, сгруппированные но категориям и содержащие три поля: CategotyName, ProductName, и ЗитО/0иапИ1у{чшло единиц для каждого продаваемого товара), как показано на рис. 5-9. Поля, перечисленные в оператора SELECT, должны либо входить в <список полей оператора СгоирВу>, либо являться аргументом агрегатной функции SQL. Агрегатные функции SQL (SQL aggregate functions) вычисляют суммарные значения для
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |