BD-1st-2.4-lab4.tresc-1.1-Slajd11

Z Studia Informatyczne
Wersja z dnia 09:01, 9 sie 2006 autorstwa PKrzyzagorski (dyskusja | edycje)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacjiPrzejdź do wyszukiwania

Połączenia naturalne

Połączenia naturalne


Połączenia naturalne są specjalnym rodzajem połączeń równościowych. Połączenie naturalne dwóch relacji to połączenie równościowe relacji, w którym warunki równości dotyczą wszystkich par atrybutów o takich samych nazwach. Podstawową różnicą, pomiędzy zapytaniami równościowymi, a naturalnymi, jest lista atrybutów relacji powstającej w wyniku połączenia. W wyniku połączenia naturalnego atrybut (albo atrybuty) połączeniowe występują tylko raz, podczas gdy w wyniku połączenia równościowego występują oba atrybuty połączeniowe z obu łączonych relacji. Istnieją dwie notacje dla połączeń naturalnych:

SELECT relacja1.atrybut, alias2.atrybut.........

FROM relacja1 [alias1] NATURAL JOIN relacja2 [alias2]

WHERE ....

ORDER BY .....

lub:

SELECT relacja1.atrybut, alias2.atrybut.........

FROM relacja1 [alias1] JOIN relacja2 USING (atrybut1,atrybut2,.....) [alias2]

WHERE ....

ORDER BY .....

Różnica pomiędzy tymi notacjami jest taka, że pierwsza notacja automatycznie wymaga, aby wszystkie pary atrybutów o takich samych nazwach w obu łączonych relacjach były równe, a druga pozwala określić, które z par atrybutów, o takich samych nazwach, powinny być równe.

W celu lepszej ilustracji działania połączeń naturalnych, na slajdzie przedstawiono trzy równoważne zapytania. Zapytanie (1) jest identyczne z zapytaniem omawianym przy okazji połączeń równościowych. Zapytania (2) i (3) wykorzystują połączenia naturalne do realizacji tego samego zadania, co zapytanie (1). Przeanalizujmy zapytanie (2). Relacje PRACOWNICY i ZESPOLY są łączone (w klauzuli FROM) za pomocą operatora NATURAL JOIN. Ponieważ ta odmiana połączenia naturalnego wymaga, aby wszystkie pary atrybutów o takich samych nazwach były równe, a jedynymi takimi atrybutami w obu tych relacjach są atrybuty o nazwie ID_ZESP, to relacje zostaną połączone równościowo zgodnie z warunkiem PRACOWNICY.ID_ZESP=ZESPOLY.ID_ZESP. W zapytaniu (3) użyto drugiej notacji stosowanej w połączeniach naturalnych. Relacje są łączone, tak jak w przypadku połączeń równościowych, za pomocą operatora JOIN. W przeciwieństwie jednak do połączeń równościowych, za nazwą drugiej relacji użyto słowa kluczowego USING, a nie ON, i podano wspólną nazwę atrybutów z obu łączonych relacji, które mają zostać wykorzystane do połączenia. Podobnie jak poprzednio, warunek użyty do połączenia relacji będzie następujący: PRACOWNICY.ID_ZESP=ZESPOLY.ID_ZESP. Jak zatem łatwo zauważyć, połączenia we wszystkich 3 zapytaniach przedstawionych na slajdzie są równoważne. Porównajmy obecnie klauzulę SELECT zapytania (1) z klauzulami SELECT zapytań (2) i (3). Jedyną różnicą pomiędzy tymi klauzulami jest to, iż w zapytaniu (1) nazwę atrybutu ID_ZESP poprzedzono aliasem relacji ZESPOLY, podczas gdy w zapytaniach (2) i (3) tego nie zrobiono. Przyczyną nie podania aliasu, bądź nazwy relacji, przed nazwą atrybutu ID_ZESP jest fakt, że jest to atrybut połączeniowy, a, jak wspominano na początku omawiania niniejszego slajdu, atrybuty połączeniowe występują w wyniku połączenia jedynie raz. Ponieważ atrybut ID_ZESP nie należy już do żadnej konkretnej relacji nie może być poprzedzany nazwą relacji, bądź jej aliasem.


<< Poprzedni slajd | Spis treści | Następny slajd >>