Как мы уже говорили, операция естественного
соединения является частным случаем операции внутреннего соединения.
Почему? Да потому что при действии естественного соединения кортежи
исходных отношений-операндов соединяются по особому условию. А именно по
условию равенства кортежей на пересечении отношений-операндов, тогда
как при действии операции внутреннего соединения такой ситуации
допускать было бы нельзя.
Так как рассматриваемая нами операция естественного
соединения является частным случаем операции внутреннего соединения, для
ее реализации используется та же опция, что и для предыдущей
рассмотренной операции, т. е. опция inner join. Но поскольку при
составлении оператора Select для операции естественного соединения
необходимо еще учесть условие равенства кортежей исходных
отношений-операндов на пересечении их схем, то дополнительно к
означенной опции применяется ключевое слово on. В переводе с английского, это буквально означает «на», а применительно к нашему смыслу, можно перевести как «при условии».
Общий вид оператора Select для выполнения операции естественного соединения следующий:
Select *
From имя отношения 1 inner join имя отношения 2
on условие равенства кортежей;
Рассмотрим пример.
Пусть даны два отношения:
R1 ( A, B, C),
R2 (B, C, D);
Операцию естественного соединения этих отношений можно реализовать с помощью следующего оператора:
Select А, R1.B, R1.C, D
From R1 inner join R2
on R1.B = R2.B and R1.C = R2.C
В итоге этой операции в результат выведутся
атрибуты, указанные в первой строке оператора Select, соответствующие
кортежам, равным на указанном пересечении.
Следует заметить, что здесь мы обращаемся к общим
атрибутам В и С не просто по именам. Это необходимо делать не по той
причине, что и в случае реализации операции декартова произведения, а
потому, что в противном случае будет не ясно, к какому отношению они
относятся.
Интересно, что использованная формулировка условия соединения (R1.B = R2.B and R1.C = R2.C)
предполагает, что общие атрибуты соединяемых отношений Null-значений не
допускают. Это изначально встроено в систему языка структурированных
запросов.
|