|
Программирование >> Исключение дубликатов строк
Пересечением этих двух множеств является один элемент, все атрибуты которого совпадают в обоих множествах: Картофель Бульон из говядины Говядина Капуста Пересечение наборов результатов Если предыдундие примеры имели для вас вид строк в таблице или в наборе результатов, то вы на верном пути! Когда вы имеете дело со строками из набора данных, извлеченных с помош.ью SQL, то атрибутами являются отдельные столбцы. Предположим, например, что имеется множество строк, возвращенных запросом (это рецепты из поваренной книги Джона):
Набор результатов второго запроса может иметь следующий вид (это рецепты из поваренной книги Майкла):
Пересечением этих двух множеств являются два элемента, атрибуты которых совпадают в обоих множествах, т. е. это два рецепта, которые одновременно имеются у Майкла и Джона:
Рис. 7.1 Иногда легче понять, как работает пересечение, используя представление множеств в виде диаграмм. Это элегантный и вместе с тем простой способ графического отображения множеств информации и графического представления того, как множества пересекаются или налагаются. Возможно, вы слышали о диаграммах Эйлера-Венна. (Леонард Эйлер - швейцарский математик XVIII в., а Джон Венн использовал этот конкретный тип логических диаграмм в 1880 г. Поэтому понятно, что мышление множествами не является какой-то особенной современной концепцией!) Предположим, имеется удачно выполненная база данных, состояш.ая из всех ваших любимых рецептов. Вам чрезвычайно нравится, как лук улучшает вкус говядины, поэтому хотелось бы найти все рецепты, со-держаш,ие как говядину, так и лук. На рис. 7.1 представлена диаграмма для множества, которая помогает наглядно представить решение этой задачи. Верхний круг представляет собой множество рецептов, в которых используется говядина. Нижний круг представляет множество рецептов, которые содержат лук. Там, где два круга перекрываются, находятся рецепты, включаюидие оба компонента. Вначале в SQL извлекаются все рецепты, содержаш,ие говядину. Во втором запросе SQL извлекает все рецепты, в которых есть лук. Можно использовать специальное ключевое слово SQL - INTERSECT,- чтобы скомпоновать два запроса для получения окончательного ответа. Если ваша таблица с рецептами имеет такой вид, как представленные выше примеры, то можно просто сделать запрос: Show те the recipes that have beef as the meat ingredient and onions as the vegetable ingredient . ( Показать рецепты, в которых мясной компонент - это говядина, а овощной компонент - лук .) Преобразование: Select the recipe паще from the recipes table where meat ingredient is beef and vegetable ingredient is onions (Выбрать наименования рецептов из таблицы Рецепты , Поиск рецептов, содержащих как говядину, так и лук где мясной компонент а овош,ной компонент говядина, лук) Уточнение: Select the recipe name from the recipes table where meat ingredient ts = beef and vegetable ingredient ts = onions Рецепты, содержащие говядину, лук и морковь (Выбрать наименования рецептов из Рецепты , где мясной компонент = говядина, овощной компонент = лук) SQL SELECT RecipeName FROM Recipes Where Heatingredient = Beef AND Vegetablelngredient = Onions Однако если вы помните содержание главы 2, то понимаете, что одна таблица Рецепты , вероятно, не даст этого. А что же относительно рецептов, которые содержат другие компоненты, а не мясо и овощи? Ведь некоторые рецепты содержат множество компонентов, а другие всего лишь несколько. Правильно спроектированная база данных рецептов включает отдельную таблицу Recipe Ingredients (Компоненты рецептов) с одной строкой на каждый компонент рецепта. Кавдая строка компонента будет содержать только один компонент, поэтому не может быть отдельной строки с говядиной и луком одновременно. Вначале потребуется найти все строки с говядиной, затем все строки с луком и, наконец, их пересечение на RecipelD. А как насчет немного более сложных проблем? Пусть, скажем, вам захотелось добавить в нашу смесь еще и морковь. Диаграмма для множества, р 72. Рецепты с говядиной, показывающая решение в графическом луком и морковью виде, представлена на рис. 7.2. Уловили секрет? Основной момент состоит в том, что при решении проблем, включающих сложные критерии, диаграмма для множеств может стать неоценимым способом представления решения, выраженного пересечением наборов результатов SQL. Зодочи, которые можно решить с помощью INTCRSCCT Ключевое слово INTERSECT может использоваться для поиска совпадений между двумя и более множествами информации. Приведем небольшой пример задач, которые можно решить, используя метод пересечения, для данных из учебных БД. Показать клиентов и сотрудников, имеющих одинаковые имена . Найти всех клиентов заказавших мотоцикл, которые также заказали шлем
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |