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

1 ... 67 68 69 [ 70 ] 71 72 73 ... 152


Преобразование: Select the distinct order numbers from the order details

table where the product number is in the list of bike and helmet product numbers

(Выбрать неповторяющиеся номера заказов из таблицы Детали заказов , где номер товара находится в списке номеров товаров велосипед и шлем )

Уточнение:

Select tfte distinct order numbers from the order details

table where the product number ts in the list of bike

and helmet product numbers

(Выбрать неповторяющиеся номера заказов

из Детали заказов , где номер товара

в номерах товаров велосипед и шлем )

SELECT DISTINCT OrderNumber FROM Order Details

WHERE ProductNumber IN (1, 2, 6, 10, 11, 25, 26)

Фактически это работает просто прекрасно! Тогда зачем для решения такой задачи использовать UNION? Правда в том, что можно и не использовать. Однако, если задачу немного усложнить:

List the customers who ordered a bicycle together with the vendors who provide bicycles .

( Предоставить список клиентов, заказавших велосипед, вместе с поставщиками, поставляющими велосипеды .)

UNION будет полезна.

Заказы на велосипед

велосипед иди Щ

Заказы на шлем

Рис. 7.11. Заказы

па велосипеды или шлемы

К сожалению, ответ на этот вопрос включает создание пары запросов с использованием операций JOIN, а затем использование UNION для получения окончательного результата. Поскольку мы еще не обсуждали выполнение JOIN, сохраним решение этой задачи до главы 10. Это позволяет заглянуть немного вперед, не так ли?

Вернемся обратно к задаче с велосипедами или шлемами и решим ее с помощью UNION. Если графически представить Заказы на велосипеды и Заказы на шлемы как два отдельных множества, задачу будет легче понять. На рис. 7.11 показано возможное отношение между этими двумя множествами.



Наличие слов either (любой), or (или) или together (вместе) в запросе наводит на мысль, что потребуется разделить решение на два отдельных множества данных, а затем связать их в UNION. Этот конкретный запрос можно разделить на две части.

Show те the orders that contain a bike . ( Показать заказы, содержащие велосипед .)

Преобразование: Select the distinct order numbers from the order details

table where the product number is in the list of bike product numbers

(Выбрать неповторяюшиеся номера заказов из таблицы Детали заказов , где номер товара находится в списке номеров товаров велосипед )

Уточнение: Select the distinct order numbers from the order details

table where the product number ts in the list of bike product numbers

(Выбрать неповторяюпдиеся номера заказов из Детали заказов , где номер товара реди номеров товаров велосипед )

SQL SELECT DISTINCT OrderNumber

FROM Order Details

WHERE ProductNumber IN (1, 2, 6, 11)

Show me the orders that contain a helmet . ( Показать заказы, содержащие шлем .)

Преобразование: Select the distinct order numbers from the order details

table where the product number is in the list of helmet product numbers

(Выбрать неповторяюшиеся номера заказов из таблицы Детали заказов , где номер товара находится в списке номеров товаров шлем )

Уточнение: Select the distinct order numbers from the order details

table where the product number \s in the list of helmet product numbers

(Выбрать неповторяюпдиеся номера заказов из Детали заказов , где номер товара среди номеров товаров шлем )

SQL SELECT DISTINCT OrderNumber

FROM Order Details

WHERE ProductNumber IN (10, 25, 26)



Выражение SBLBC7

o-~ Оператор SELECT

UNION

Оператор SELECT


Рис. 7.12. Связывание двух операторов SELECT в UNION

Теперь можно получить окончательное решение, используя объединение двух множеств. На рис. 7.12 представлена синтаксическая диаграмма SQL, которая решает эту задачу.

Возьмем две части запроса и объединим их в операторе UNION, чтобы получить

правильный ответ:

6. 11)

SELECT DISTINCT OrderNumber FROM Order Details WHERE ProductNumber IN (1, 2. UNION

SELECT DISTINCT OrderNumber FROM Order Details

WHERE ProductNumber IN (10, 25, 26)

Хорошо to, что большинство коммерческих реализаций SQL поддерживают оператор UNION. Как очевидно из приведенных выше примеров, UNION достигает своих целей сложным способом, когда желательно получить результат типа включая/или из одной таблицы. Для составления списка из нескольких имеющих одинаковую структуру, но разных таблиц, наиболее полезной операцией является UNION (подробнее см. в главе 10).

Итоги

В данной главе мы обсудили концепцию множества и каждую из основных операций надмножествами, реализованную в SQL,- пересечение, разность и объединение. Для графического представления решаемой задачи можно использовать диаграммы множеств. Здесь были представлены основные синтаксические конструкции и ключевые слова SQL (IN, INTERSECT, EXCEPT и UNION) для всех трех операций.

Если вы задумались о том, зачем вам показали три вида операций над множествами, когда два из них, вероятно, невозможно использовать, то вспомните заголовок этой главы: Мышление множествами . Если вы собираетесь достичь полного успеха в решении сложных проблем, вам потребуется разделить свою задачу на наборы результатов с информацией, которые затем опять связываются вместе.



1 ... 67 68 69 [ 70 ] 71 72 73 ... 152

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