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

1 ... 82 83 84 [ 85 ] 86 87 88 ... 152


ШШШт










Внешние соединении

Единственное различие между задачей и решением -

это то, что решение люди понимают .

- Чарльз Франклин Кеттеринг, изобретатель, 1876-1958




Вопросы, россмотривоемые а донной глове

Что предстовляет собой OUT6R JOIK L6FT/RIGHT OUT6R JOIN FULL OUT6R JOIN

/1спользовони0 условий OUT6R JOIN

риллеры опероторов /1тоги

Зодочи для сомостоятельного решения






предыдушей главе мы рассмотрели все вопросы внутренних соединений - связывание двух или более таблиц или наборов результатов с помошью INNER JOIN для поиска всех строк, удовлетворяюших условию. Теперь самое время поговорить

- связывании таблиц и поиске строк, не только удовлет-

0 внешних соединениях

воряюших, но и не удовлетворяюш,их условию.

Что првдстовлявт собой OUT6R JOIN

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

Предположим, например, что нужно извлечь информацию о студентах и курсах лекций, на которые они записались, из базы данных расписания занятий. Операция INNER JOIN возврашает имена только тех студентов, которые записались на некоторый курс лекций, и список лекций, на которые записались студенты. Эта операция






не возвращает имена студентов, которые уже приняты в колледж, но еще не записались на какие-либо курсы, и не возвращает курсы лек-

Рис. 9.1.

Возможное отношение между студентами и курсами лекций

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

А что если нужен список всех студентов и курсов лекций, на которые они записались, если таковые курсы имеются? Или наоборот, нужен список всех курсов лекций и имена студентов, которые записались на эти лекции, если имеются такие студенты. Для решения задач такого вида нужно использовать OUTER JOIN.

На рис. 9.1 с помощью диаграмм для множеств показано возможное отношение между студентами и лекциями. Как можно видеть.

некоторое количество студентов не записалось еще ни на какой курс. Также имеются курсы лекций, на которые пока еще не записался ни один студент.

Если требуется список всех студентов с указанием курсов лекций, на которые они записались, будет получен набор результатов, подобный изображенному на рис. 9.2.

Может возникн> гь вопрос: Что будет возвращено для студентов, которые не записались ни на какой курс лекций? Если вы помните концепцию значения Null, или ничего (см. главу 5), то поймете, что вы увидите. Если запрашиваются все студенты с указанием любых курсов лекций, то СУБД, обнаружив студента,



Студенты и курсы лекций,

на которые они записались

Рис. 9.2.

Студенты и курсы лекций на которые они записались

не записавшегося ни на какой курс, возвратит

значение Null во всех столбцах из таблицы Classes. Если обратиться к концепции разности двух множеств (см. главу 7), то строки со значением Null в столбцах из таблицы Classes будут представлять собой разность множества всех студентов и множества студентов, записавшихся на какой-либо курс лекций.

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



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

L€FT/mGHT OUT6R JOIN

Обычно используется такой вид OUTER JOIN, в котором запрашиваются все строки из одной таблицы или набора результатов и все строки, удовлетворяющие условию, из второй таблицы или набора результатов. Для этого определяется либо LEFT OUTER JOIN, либо RIGHT OUTER JOIN.

В чем различие между LEFT и RIGHT ? Вспомните, что для определения INNER JOIN по двум таблицам указывается имя первой таблицы, ключевое слово JOIN, а затем имя второй таблицы. Начиная построение запросов с использованием OUTER JOIN, стандарт SQL рассматривает первую указанную таблицу как левую , а вторую как правую . Поэтому, если нужны все строки из первой таблицы и все строки, удовлетворяющие условию, из второй таблицы, то используется LEFT OUTER JOIN. И наоборот, если нужны все строки из второй таблицы и все строки, удовлетворяющие условию, из первой таблицы, то указывается RIGHT OUTER JOIN.

Синтоксис

Рассмотрим синтаксические конструкции, необходимые для построения LEFT или RIGHT OUTER JOIN.

Использовонис тоблиц

Начнем с определения OUTER JOIN с использованием таблиц. На рис. 9.3 представлена синтаксическая диаграмма для создания запроса с OUTER JOIN по двум таблицам.

Совершенно аналогично INNER JOIN все действие происходит в условии FROM (для простоты пока исключены условия WHERE и ORDER BY). Вместо одного имени таблицы указываются имена двух таблиц, которые связываются ключевым словом JOIN. Если не определить тип нужной операции JOIN, то СУБД предполагает, что требуется INNER JOIN (см. главу 8). В данном случае, поскольку требуется OUTER JOIN, следует явно указать, что нужно LEFT OUTER или RIGHT OUTER JOIN.

Внимание! Воспользовавшиеся полной диаграммой синтаксической структуры из приложения А, обнаружат, что операция имя таблицы JOIN имя таблицы описана как часть определенного термина соединенные таблицы . Ссылка на таблицы включает соединенные таблицы, а условие FROM оператора SELECT использует ссылку на таблицу. Эти сложные определения были свернуты в одну диаграмму, чтобы облегчить изучение простого соединения двух таблиц. Такой же метод упрощения используется в синтаксических диаграммах остальной части данной главы.



1 ... 82 83 84 [ 85 ] 86 87 88 ... 152

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