5. jęZYK. BAZ DANYCH SQL
Złączenie naturalne w języku $QL2 ma dokładnie takie same właściwości. Słowa kluczowe NATURAL JOIN występują między nazwami łączonych relacji i określają operator złączenia tx.
PRZYKŁAD 5.49
Nasze zadanie polega na policzeniu złączenia naturalnego następujących relacji:
GwiazdaFilmowa(nazwisko, adres, płeć, dataUrodzenia) FilmDyr{nazwisko, adres, cert#, cenaSieoi)
W wyniku złączenia powstanie relacja, do schematu której należą atrybuty nazwisko i adres oraz. wszystkie te atrybuty, które należą tylko do jednej z. relacji wejściowych. Krotka wynikowa opisuje osobę, która jest zarówno gwiazdą jak i dyrektorem produkcji, a opis zawiera nazwisko, adres, płeć, datę urodzenia, numer certyfikatu i cenę sieci. Poniżej przedstawiono wyrażenie opisujące tę nową relację:
Gwiazd&Fiimowa NATURAL JOIN FilmDyr;
□
W celu uniknięcia pewnych niedogodności związanych ze stosowaniem złączeń w języku SQL2 wprowadzono wariant złączenia nazywany złączeniem zewnętrznym. Przypuśćmy, że zadanie polega na obliczeniu złączenia R tx S. Jeśli pewna krotka l relacji R nie pasuje do żadnej krotki relacji S, to w złączeniu R txi S nie będzie po niej żadnego śladu. Może to się okazać niewygodne w wielu sytuacjach. Jeśli na przykład wynik złączenia definiuje perspektywę, a zapytanie dotyczy tych atrybutów perspektywy, które należą tylko do schematu relacji R, to intuicyjnie można by się spodziewać, że krotka t wystąpi w wyniku zapytania. Jednakże ta krotka nie jest w^cale widoczna w perspektyw ie R tx S, a więc takie samo zapylanie przetworzone dla relacji R da inny wynik, niż gdy przetwarza się krotki złączenia R tx S.
Złączenie zewnętrzne różni się od zwykłego złączenia (tj. wewnętrznego) tym, że do wyniku są dołączane również te krotki, które nie „pasują” do żadnej krotki z drugiej relacji. Takie krotki, których nic można dopasować, występowały już w przykładzie 4.6 i nazywaliśmy je krotkami wiszącymi. Ponieważ jednak w relacji wynikowej muszą wy stępować w artości atrybutów z obu relacji, zatem w dołączanej krotce trzeba brakujące elementy uzupełnić i w konsekwencji składowe brakujących atrybutów otrzymują w takich przypadkach wartość NULL.
PRZYKŁAD 5.50
Trzeba utworzyć złączenie dwóch relacji:
GwiazdaFilmowa(nazwisko, adres, płeć, dataUrodzenia) FilmDyr(nazwisko, adres, cert=, cenaSieci)
ale należy tym razem dołączyć do wyniku również tych aktorów, którzy nie s dyrektorami produkcji, oraz tych dyrektorów, którzy nie są gwiazdami filmc wymi. W SQL2 korzysta się w tym celu z operatora pełnego naturalnego z\i czenia zewnętrznego (natura! fuli outerjoin), które ma następującą postać:
GwiazdaFilmowa NATURAL FULL OUTER JOIN FilmDyr;
Do relacji wynikowej dołączą się te same sześć atrybutów, które występował w schemacie z przykładu 5.49. W wynikowej relacji występują krotki trzeć rodzajów'. Krotki dotyczące tych osób, które są zarówmo dyrektorami, ja i aktorami mają wartości wszystkich sześciu atry butów różne od NULL. Są t tc same krotki, które występują w wyniku złączenia w przykładzie 5.49.
Drugi rodzaj obejmuje te krotki, które opisują gwiazdy, które nie są dy rektorami. Zawierają one wartości atrybutów: nazwisko, adres, płe i dataUrodzenia, które pochodzą z relacji GwiazdaFilmowa, natomia-wartością atrybutów z relacji FilmDyr, tj. cert# i cenaSieci jest NULL.
Trzeci rodzaj stanow ią krotki opisujące dyrektorów, którzy nie są aktc rami. Atrybuty pochodzące z relacji FilmDyr mają w tych krotkach taki same wartości jak w oryginalnej relacji, natomiast wartości atrybutów ple i dataUrodzenia, które należą do schematu relacji GwiazdaFilmowa, 5 rów-ne NULL. Na rysunku 5.20 przedstawiono wszystkie trzy rodzaje krotek.
nazwisko |
adres |
płeć |
dataUrodzenia |
certn- |
cenaSieci |
Mary Tyler Moore |
Mapie St. |
\ |
9/9/99 |
12345 |
$ 100.. |
Tom Hanks |
Cherry Ln. |
VM' |
8/8/83 |
NULL | |
George Lucas |
Oak Rd. |
NULL |
NULL |
23456 |
$200... |
RYSUNEK 5.20
Trzy krotki złączenia zewnętrznego relacji GwiazdaFilmowa i FilmDyr
W języku SQL2 istnieje wiele wariantów' złączeń zewnętrznych. Obc pełnego złączenia zewnętrznego występuje na przykład zewnętrzne złączeń lewostronne, które polega na tym, że do wyniku dołącza się tylko krotki „w szące’’ z pierwszej relacji, uzupełnione wartościami null- w składowych dn giej relacji. Na przy kład złączenie
GwiazdaFilmowa NATURAL LEFT OUTER JOIN FilmDyr;
mogłoby zawierać pierwsze dwie krotki z rys. 5.20, ale trzeciej już nie.