W podobny sposób tworzy się złączenie zewnętrzne prawostronne, do którego dołącza się krotki „wiszące” drugiej (prawej) relacji. A zatem złączenie:
Gwi a Zda Fi Imowa NATURAL RIGHT OUTER JOIN FilmDyr;
mogłoby zawierać pierwszą i trzecią krotkę z rys. 5.20, ale nie drugą.
Inne warianty złączenia zewnętrznego powstają, gdy określa się warunek złączenia. Zamiast słowa kluczowego NATURA!, zamieszcza się wówczas słowo kluczowe ON oraz warunek, który musza spełniać krotki wynikowe. Jeżeli poza tym w instrukcji umieścimy FULL OUTER JOIN, to poza uzgodnionymi krotkami tworzącymi pary do wyniku zostaną dołączone krotki, do których nie można dobrać pary, a które zostają uzupełnione wartościami null.
PRZYKŁAD 5.51
Rozważmy ponownie przykład 5.47, w którym definiowano złączenie relacji Film i GwiazdyW z warunkiem złączenia dopuszczającym pary, które mają równe wartości atrybutów tytuł i tytułFilmu oraz rok i rokFilmu. Stosując operator złączenia zewnętrznego, otrzymamy następujące wyrażenie:
Film FULL OUTER JOIN GwiazdyW ON
tytuł = tytułFilmu AND rok - rokFilmu;
Wówczas do wyniku zostaną dołączone krotki nie tylko tych filmów, które mają jedną gwiazdę umieszczoną w relacji GwiazdyW, ale również filmy, o których gwiazdach nie ma danych, a nieznane wartości atrybutów: tytuł-Filmu, rokFilmu i nazwiskoGwiazdy zostaną określone jako NULL. W analogiczny sposób zostaną potraktowane te krotki relacji GwiazdyW, które nie mają odpow iedników w relacji Film.
□
Słowo kluczowe FULL w złączeniu zewnętrznym, opisanym w przykładzie 5.51, można zastąpić słowami left lub RIGHT. Na przykład w wyniku złączenia:
Film LEFT OUTER JCIN GwiazdyW ON
tytuł tytułFilmu AND rok = rokFilmu;
powstają krotki z relacji Film, które mają odpowiedniki w relacji GwiazdyW, a także te, dla których nie można dobrać pary, a które uzupełnia się wartościami NULL.
Z kolei w wyniku złączenia
Film RIGHT OUTER JOIN GwiazdyW ON
tytuł = tytułFilmu AND rek = rokFilmu;
nic umieszcza się krotek tych filmów, których gwiazdy nic występują w rei; cji GwiazdyW, ale dołącza się również te krotki z relacji GwiazdyW, które ni mają pary w relacji Film.
Ćwiczenie 5.9.1. Bazując na „filmowej” bazie danych”
GwiazdyW( tytułFilmu, rokFilmu, nazwiskoGwiazdy)
GwiazdaFilmowa(nazwisko, adres, płeć, dataUrodzonia)
FilmDyr(nazwisko, adres, cert#, cenaSieci)
Studio(nazwa, adres, prezC#)
należy opisać te krotki, które będą należeć do wyników następujących wyrażę SQL:
a) studio CROSS JOIN FilmDyr;
b) GwiazdyW FULL NATURAL OUTER JOIN GwiazdaFiimowa;
c) GwiazdyW FULL OUTER JOIN gwiazda ON nazwisko
= rtazwiskoGwiazdy;
*!Ćwiczcnie 5.9.2. Posługując się schematem
Produkt{producent, model, typ)
PC(model, szybkość, ram, hd, cd, cena)
Laptop(model, szybkość, ram, hd, ekran, cena)
Drukarka(model, kolor, typ, cena)
należy napisać zapytanie SQL, które będzie zawierać dane o wszystkich produktacl PC. laptopach i drukarkach, obejmujące producenta oraz wszelkie inne stosowne dan dla danego produktu (tzn. występujące w odpowiedniej relacji).
IĆwiczenie 5.9.3. Posługując się dwiema relacjami
Klasy(klasa, typ, kraj, liczbaDziai, działo, wyporność) Okręty(nazwa, klasa, wodowanie)
zdefiniowanymi w schemacie bazy danych w przykładzie 4.1.3, należy napisać zap> tanie SQL, które dostarczy wszystkie dostępne dane o okrętach, a także te dane. któr są w relacji Klasy. Nic trzeba dołączać tych danych, które nie mają odpowiedników W klasie Okręty.
!Ćwiczenie 5.9.4. Należy powtórzyć ćwiczenie 5.9.3, ale do wyniku nale2y dołączy także dane o statku, którego klasa C nie występuje w relacji Okręty, a który' ma tak samą nazwę C, jak klasa.