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

1 ... 90 91 92 [ 93 ] 94 95 96 ... 152


Первое и последнее JOIN запрашивают все строки с обеих сторон JOIN, поэтому проблема с невозможностью сопоставления значений Null решена. Теперь можно увидеть не только виды рецептов, для которых отсутствуют рецепты, и рецепты, для которых отсутствуют компоненты, но также компоненты, которые пока еш,е не использовались в рецептах. Можно отказаться от использования LEFT OUTER JOIN для первого JOIN, но, поскольку невозможно предсказать предварительно, как СУБД решает вложение JOIN, следует запросить FULL OUTER JOIN с обеих сторон, чтобы гарантировать получение правильного ответа.

Внимание! СУБД, которая не поддерживает синтаксис стандарта SQL для LEFT OUTER JOIN или RIGHT OUTER JOIN, также имеет специальный синтаксис для FULL OUTER JOIN. Необходимо уточнить в документации по своей базе данных специальный нестандартный синтаксис, который требуется базе данных для определения OUTER JOIN. Например, ранние версии Microsoft SQL Server поддерживают этот синтаксис (обратите внимание на звездочки в условии WHERE):

SELECT R8Cipe Class8S.RecipeClassDescription,

Recipes.RecipeTitle FROM RecipeClasses, Recipes WHERE Recipe Classes.RecipeClassID *=*

Recipes.RecipeClassID

Продукты, которые не поддерживают любой синтаксис FULL OUTER JOIN, но поддерживают LEFT или RIGHT OUTER JOIN, дают эквивалентный результат, выполняя UNION по LEFT и RIGHT OUTER JOIN (подробнее о UNION см. в следуюидей главе). Поскольку специальный синтаксис для определения FULL OUTER JOIN через условие WHERE различается в разных продуктах, то при работе с несколькими нестандартными продуктами необходимо изучить различные варианты синтаксиса.

FULL OUTCR JOIN не по зночвнипм ключей

До сих пор мы обсуждали использование OUTER JOIN для связывания таблиц или наборов результатов по соответствуюш,им значениям ключей. Однако можно решить некоторые интересные задачи, используя OUTER JOIN не по значениям ключей. Например, можно получить список всех штатных сотрудников и всех студентов в учебной базе данных расписания занятий, а также показать, у кого из них совпадают имена. Это делается с помоидью FULL OUTER JOIN:

Show me all of the students and all of the teachers and list together those who have the same first name . ( Показать всех студентов и всех преподавателей, а также список тех, у кого совпадают имена .)



Преобразование: Select student full name and staff full name from

the students table full outer joined with the staff table on first name

(Выбрать полное имя студента и полное имя преподавателя из таблицы Студенты с полным внешним соединением в таблицей Персонал по имени)

Select student full name me staff full name from the students teWe full outer joined with the staff tebte on first name

(Выбрать полное имя студента, полное имя преподавателя из Студенты с полным внешним соединением с Персонал по имени)

Уточнение:

I I

SELECT (Students.StudFirstName,

Students.StudLastName) AS StudFullName,

(Staff.StfFirstName

Staff.StfLastName) AS StfFullName FROM Students FULL OUTER JOIN Staff

ON Students.StudFirstName = Staff.StfFirstName UNION JOIN

Любое обсуждение OUTER JOIN будет неполным без уважительного упоминания UNION JOIN. В стандарте SQL операция UNION JOIN является FULL OUTER JOIN с исключенными совпадаюш,ими строками. На рис. 9.14 представлен синтаксис.

Не так много коммерческих реализаций поддерживают UNION JOIN. Если говорить откровенно, то следует придумать хорошую причину, по которой стоило бы применить UNION JOIN.






i,i,i:i!ij>j,i>i>t.<iii;t .iH i>iliii liW!M*>W*>!


Рис. 9.14. Синтаксис SQL для UNION JOIN



Использование операций OUTCR JOIN

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

а 11

она полезна ддя создания входных данных в отчете, где нужно показать все категории (независимо от существования строк, выполняющих условия, в другой таблице) или всех клиентов (независимо от того, разместил ли клиент заказ). Ниже приведен пример видов запросов, которые можно решить с помощью OUTER JOIN.

Поиск пропущенных значений

Иногда нужно найти, что же пропущено . Это можно сделать, воспользовавшись OUTER JOIN с проверкой на Null. Вот несколько задач на пропущенные значения :

Какие товары никогда не заказывались?

Показать клиентов, которые никогда не заказывали шлем .

Привести список эстрадных артистов, на которых никогда не было заявок .

Вывести на дш \лей агентов, которые не регистрировали заявок на эстрадного ч тиста .

Показать турниры, которые еще не разыгрывались .

Привести список преподавателей, которые ничего не преподают

Вывести на дисплей имена студентов, которые никогда не отказывались от курса лекций .

Показать курсы лекций, на которые не записалось ни одного студента .

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

Вывести на дисплей виды рецептов .

Поиск частично совпадающей информации

в частности, для отчетов полезно иметь возможность представить список всех строк из одной или нескольких таблиц вместе со строками, удовлетворяющими условию, из связанных таблиц. Вот пример задач на частичное совпадение , которые можно решить с использованием OUTER JOIN:

Привести список всех товаров и даты всех заказов .

Вывести на дисплей всех клиентов и все заказы на велосипеды



1 ... 90 91 92 [ 93 ] 94 95 96 ... 152

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