Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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

 

Но имеются два важных частных случая соединений, которые выражаются с помощью традиционных средств SQL излишне громоздко: естественные и внешние соединения. При наличии возможности определения внешних ключей таблицы кажется достаточно странной потребность всякий раз явно указывать в запросах условие естественного соединения. Например, во многих примерах запросов в Лекции 14 присутствует условие соединения EMP.DEPT_NO = DEPT.DEPT_NO в тех случаях, когда в действительности нам требовался результат операции EMP NATURAL JOIN DEPT.

 

Внешние соединения были введены еще Эдгаром Коддом в 1979 г. Говоря очень нестрого, основная идея этой разновидности операции соединения состояла в том, что, с одной стороны, результат операции обычного соединения двух отношений повышает информационный уровень данных, поскольку в результате операции мы имеем информационно связанные данные. Но, с другой стороны, в результирующем отношении мы теряем информацию об исходных объектах, которые оказались несвязанными и не вошли в результат соединения. Кодд придумал, как, используя неопределенные значения, можно определить обобщенную операцию, которая будет обладать достоинствами обычной операции соединения, не приводя к потере исходной информации. Вернее, он предложил три операции: левое внешнее соединение, правое внешнее соединение и полное (симметричное) внешнее соединение. Приведем их определения (в реляционных терминах данного курса).

 

Пусть имеются отношения r1 и r2, совместимые относительно операции взятия расширенного декартова произведения. Пусть s является результатом операции r1 LEFT OUTER JOUN r2 WHERE comp (левое внешнее соединение r1 и r2 по условию comp). Тогда H s = H r1 union H r2. Пусть tr1 Î Br1 и tr2 Î Br2. Тогда tr1 union tr2 Î Bs в том и только в том случае, когда comp (tr1 union tr2) = true. Если имеется кортеж tr1 Î Br1, для которого нет ни одного кортежа tr2 Î Br2 такого, что comp (tr1 union tr2) = true, то tr1 union tr2null Î Bs, где tr2null – кортеж, соответствующий H r2, все значения которого являются неопределенными*.

 

Пусть s является результатом операции r1 RIGHT OUTER JOUN r2 WHERE comp (правое внешнее соединение r1 и r2 по условию comp). Тогда H s = H r1 union H r2. Пусть tr1 Î Br1 и tr2 Î Br2. Тогда tr1 union tr2 Î Bs в том и только в том случае, когда comp (tr1 union tr2) = true. Если имеется кортеж tr2 Î Br2, для которого нет ни одного кортежа tr1 Î Br1 такого, что comp (tr1 union tr2) = true, то tr1null union tr2 Î Bs, где tr1null – кортеж, соответствующий H r1, все значения которого являются неопределенными.

 

Наконец, пусть s является результатом операции r1 FULL OUTER JOUN r2 WHERE comp (полное внешнее соединение r1 и r2 по условию comp). Тогда H s = H r1 union H r2. Пусть tr1 Î Br1 и tr2 Î Br2. Тогда tr1 union tr2 Î Bs в том и только в том случае, когда comp (tr1 union tr2) = true. Если имеется кортеж tr1 Î Br1, для которого нет ни одного кортежа tr2 Î Br2 такого, что comp (tr1 union tr2) = true, то tr1 union tr2null Î Bs, где tr2null – кортеж, соответствующий H r2, все значения которого являются неопределенными. Если имеется кортеж tr2 Î Br2, для которого нет ни одного кортежа tr1 Î Br1 такого, что comp (tr1 union tr2) = true, то tr1null union tr2 Î Bs, где tr1null – кортеж, соответствующий H r1, все значения которого являются неопределенными.

 

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

 

В стандарте языка SQL специфицирован отдельный специализированный подъязык для формирования выражений соединения таблиц. Такие выражения называются соединенными таблицами, и их можно использовать в качестве ссылок на таблицы в списке раздела FROM. Разработчики стандарта SQL не любят мельчить; в языке допускается 14 видов соединений:

§ прямое соединение;

§ внутреннее соединение по условию;

§ внутреннее соединение по совпадению значений указанных одноименных столбцов;

§ естественное внутреннее соединение;

§ левое внешнее соединение по условию;

§ правое внешнее соединение по условию;

§ полное внешнее соединение по условию;

§ левое внешнее соединение по совпадению значений указанных одноименных столбцов;

§ правое внешнее соединение по совпадению значений указанных одноименных столбцов;

§ полное внешнее соединение по совпадению значений указанных одноименных столбцов;

§ естественное левое внешнее соединение;

§ естественное правое внешнее соединение;

§ естественное полное внешнее соединение;

§ соединение объединением.

 

Во всех этих операциях нет ничего сложного, но их неформальное описание исключительно громоздко. Поэтому в разд 15.4 мы определяем операции на формальном уровне, а потом иллюстрируем их на примерах.

 

Наконец, последняя тема этой лекции относится к еще одному типу ссылок на таблицу, допускаемых в разделе FROM: порождаемым таблицам с горизонтальной связью. Фактически, порождаемая таблица с горизонтальной связью представляет собой выражение запросов, в котором может присутствовать корреляция со строками таблиц, специфицированных в списке раздела FROM слева от данной порождаемой таблицы с горизонтальной связью. Наличие порождаемых таблиц с горизонтальной связью требует некоторого уточнения семантики выполнения раздела FROM оператора SELECT. По нашему мнению, это средство является полностью избыточным, хотя и не вредным, поскольку его реализация не должна вызывать затруднений и/или ухудшать эффективность системы.

 

<== предыдущая лекция | следующая лекция ==>
Введение. В предыдущих двух лекциях мы обсудили допускаемые в стандарте SQL виды ссылок на таблицы в разделе FROM оператора select и подробно | Семантика агрегатных функций
Поделиться с друзьями:


Дата добавления: 2014-01-03; Просмотров: 495; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.