Программирование >>  Исключение дубликатов строк 

1 ... 60 61 62 [ 63 ] 64 65 66 ... 152


Пересечением этих двух множеств является один элемент, все атрибуты которого совпадают в обоих множествах:

Картофель

Бульон из говядины Говядина

Капуста

Пересечение наборов результатов

Если предыдундие примеры имели для вас вид строк в таблице или в наборе результатов, то вы на верном пути! Когда вы имеете дело со строками из набора данных, извлеченных с помош.ью SQL, то атрибутами являются отдельные столбцы. Предположим, например, что имеется множество строк, возвращенных запросом (это рецепты из поваренной книги Джона):

Рецепт

Крахмал

Бульон

Мясо

Овощи

Тушеная баранина

Картос

зель

Вода

Баранина

Горошек

Тушеная курица

Куриный бульон

Курица

Морковь

Вегетарианские тушеные овощи

11аста

Вода

Тофу

Молодой горошек в стручках

Тушеное мясо по-ирландски

Картос

зель

Бульон

из говядины

Говядина

Капуста

Тушеная свинина

11аста

Вода

Свинина

Набор результатов второго запроса может иметь следующий вид (это рецепты из поваренной книги Майкла):

Рецепт

Крахмал

Бульон

Мясо

Овощи

Тушеная баранина

Картос

зель

Вода

Баранина

Горошек

Тушеная индейка

Куриный бульон

Индейка

Морковь

Вегетарианские тушеные овощи

11аста

Овопщой отвар

1офу

Молодой горошек в стручках

Тушеное мясо по-ирландски

Картос

зель

Бульон

из говядины

Говядина

Капуста

Тушеная свинина

Бобы

Вода

Свинина

Пересечением этих двух множеств являются два элемента, атрибуты которых совпадают в обоих множествах, т. е. это два рецепта, которые одновременно имеются у Майкла и Джона:

Рецепт

Крахмал

Бульон

Мясо

Овощи

Тушеная баранина

Картос

зель

Вода

Баранина

Горошек

1ушеное мясо по-ирландски

Картос

зель

Бульон

из говядины

Говядина

Капуста




Рис. 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 может использоваться для поиска совпадений между двумя и более множествами информации. Приведем небольшой пример задач, которые можно решить, используя метод пересечения, для данных из учебных БД.

Показать клиентов и сотрудников, имеющих одинаковые имена .

Найти всех клиентов заказавших мотоцикл, которые также


заказали шлем



1 ... 60 61 62 [ 63 ] 64 65 66 ... 152

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