|
Программирование >> Исключение дубликатов строк
в SQL, атрибутами являются отдельные столбцы. Предположим, что имеется множество строк, возврапденных запросом (это рецепты из поваренной книги Джона):
Объединением этих двух множеств являются все строки обоих множеств. Может быть, Джон и Майкл решат написать вместе еще поваренную книгу!
Рис. 7.5. Поиск рецептов, содержащих либо говядину, либо лук Предположим, что имеется удачно выполненная база данных, состоящая из всех ваших любимых рецептов. Вам чрезвычайно нравится рецепты как с говядиной, так и с луком, и поэтому хотелось бы найти все рецепты, содержащие любой из этих компонентов. На рис. 7,5 представлена диаграмма для множества, которая помогает наглядно представить решение этой задачи. Верхний круг представляет собой множество рецептов, в которых используется говядина. Нижний круг представляет множество рецептов, содержащих лук. Объединение этих двух кругов дает все рецепты, содержащие любой из компонентов, с исключением повторяющихся строк там, где два круга перекрываются. В SQL вначале запрашивается извлечение всех рецептов, содержащих говядину. Во втором запросе запрашивается извлечение всех рецептов, в которых есть лук. Ключевое слово SQL - UNION - объединяет два запроса для получения окончательного ответа. Еще раз повторим, что проектирование структуры базы данных рецептов с единой таблицей не является хорошей идей. Правильно спроектированная база данных рецептов должна иметь отдельную таблицу Recipe Ingredients (Компоненты рецеп-та) с отдельной строкой для компонента каждого рецепта. В кавдой строке компонента будет храниться только один компонент, поэтому в одной строке не могут одновременно находиться как говядина, так и лук. Вначале потребуется найти все рецепты, содержащие строку говядина , а затем найти все рецепты, в которых имеется строка лук , и после этого объединить их. Зодочи, которые можно решить с помощью UNION UNION позволяет объединить строки из двух подобных множеств с дополнительным преимуществом в виде отсутствия двойных строк. Вот пример задач, которые можно решить с помощью метода объединения, для данных из учебных баз данных: Показать имена и адреса всех клиентов и сотрудников . Привести список всех клиентов, заказавших велосипед, вместе со всеми клиентами, заказавшими шлем Привести список эстрадных артистов, которые отыграли ангао/сементы для клиентов Бонниксен, объединив их с эстрадными артистами, которые отыграли ангажементы для клиентов Росалес . Показать студентов, имеющих средний балл 85 или выше по курсу Искусство , вместе с теми студентами, которые также имеют средний балл 85 или выше по курсу Вычислительная техника . Найти игроков в боулинг, которые имеют предварительный счет 155 или выше на Зандербирд Лэйнс, объединив их с игроками в боулинг на Болеро Лэйнс, у которых предварительный счет 140 или выше Показать рецепты, содержащие говядину, вместе со списком рецептов, включающих чеснок . Как и с другими чистыми операциями над множествами, одним из ограничений является то, что значения должны совпадать по всем столбцам в каждом наборе результата. Это хорошо работает при объединении двух или более множеств одной и той же таблицы - например клиенты, заказавшие велосипеды, и клиенты, заказавшие шлемы. Это также хорошо работает при выполнении UNION над множествами из таблиц, имеюших подобные столбцы,- например имена и адреса клиентов, имена и адреса сотрудников. Более подробно использование UNION рассматривается в главе 10. Во многих случаях при объединении строк из одной таблицы иным образом также полезно использование DISTl сложным критерием в объединенной таблице. О таком способе решения задач с использованием операторов JOIN мы расскажем в главе 8. Опвроции с множвствоми в SOL Теперь кратко рассмотрим реализацию множеств в SQL. СроАнение классических операций над множествами с операципми SQL Пока еш,е немногие коммерческие системы баз данных поддерживают непосредственно операции пересечения множеств или разность множеств. Однако текуший стандарт SQL четко определяет, как должны быть реализованы эти операции, полагая, что они являются достаточно важными, чтобы, по крайней мере, служить основанием для обзора синтаксиса. Поиск общих значений - INT€RS€CT Предположим, вы пытаетесь решить следующую простую на вид задачу: Show те the orders that contain both a bike and a helmet . ( Показать заказы, содероюащие как велосипед, так и шлем .)
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |