Oferty pracy dla inżynierów
  • StrefaInzyniera.pl (current)
  • Oferty pracy
  • Automatyka
    • Uprawnienia elektryczne SEP
    • Elektrotechnika
    • Elektronika
    • Automatyka
    • Robotyka
  • Przemysł
    • Przemysł
    • Obróbka metali
    • CAD
    • CATIA
    • Autodesk Inventor
  • IT
    • JAVA
    • C++
    • Sieci
  • Firmy
  • Dla firm
    • Rejestracja - profil firmy
    • Dodaj ofertę pracy - bezpłatnie
    • Publikacja artykułów
    • Kontakt
  • Zaloguj się
  • STREFA INŻYNIERA
  • Oferty pracy
  • Automatyka
    • Uprawnienia elektryczne SEP
    • Elektrotechnika
    • Elektroniki
    • Automatyki
    • Robotyka
  • Przemysł
    • Przemysł
    • Obróbka metali
    • CAD
    • CATIA
    • Autodesk Inventor
  • IT
    • JAVA
    • C++
    • Sieci
  • Firmy
  • Dla firm
    • Rejestracja - profil firmy
    • Dodaj ofertę pracy - bezpłatnie
    • Publikacja artykułów
    • Kontakt
  • Logowanie
  • Zaloguj się
Categories SQL

Złączenia pełne

Oprócz złączeń lewostronnych i prawostronnych istnieje jeszcze jeden rodzaj złączenia zewnętrznego, a mianowicie złączenie pełne (ang. full join). W przypadku złączeń zewnętrznych i wewnętrznych jedna tabela pełni rolę tabeli nadrzędnej, a druga podrzędnej. Innymi słowy, jedna z nich zawiera dane wymagane, a druga opcjonalne. Oznacza to, że gdy dokonujemy złączenia obu tabel, nie muszą występować wiersze dołączone z tabeli podrzędnej (lub zawierającej opcjonalne dane).

W złączeniu wewnętrznym obie tabele są nadrzędne (lub wymagane). Gdy łączone są dwie tabele, aby dany wiersz pojawił się w wyniku, musi istnieć powiązanie danych z obu kolumn, za pomocą których dokonano złączenia.

W przypadku złączenia pełnego obie tabele pełnią rolę tabeli podrzędnej (lub zawierającej opcjonalne dane). W tej sytuacji, gdy dokonujemy złączenia tabeli A z tabelą B, wyświetlamy 1) wszystkie wiersze z tabeli A, nawet jeśli brak w tabeli B dopasowanych do nich wierszy, a także 2) wszystkie wiersze z tabeli B, nawet jeśli nie został do nich dopasowany żaden wiersz z tabeli A.

 

RÓŻNICE W RAMACH INNYCH BAZ DANYCH: MySQL

W odróżnieniu od Microsoft SQL Server i Oracle, w MySQL nie istnieją złączenia pełne. Przyjrzyjmy się teraz przykładowi złączenia dwóch tabel. Pierwszą z nich będzie tabela Filmy:

IDFilmu TytułFilmu Klasyfikacja
1 To właśnie miłość R
2 Północ – północny zachód brak kategorii
3 Miłość i śmierć PG
4 Truman Show PG
5 Taka miłość się nie zdarza R
6 Do diabła z miłością PG-13
7 Gdzie jest Nemo? G

 

Druga tabela to KlasyfikacjaFilmów z opisem klasyfikacji podanym przez Amerykańskie Stowarzyszenie Przemysłu Filmowego (ang. Motion Picture Association of America).

IDKlasyfikacji Klasyfikacja OpisKlasyfikacji
1 G Dozwolony dla wszystkich grup wiekowych
2 PG Wskazany nadzór rodzica/rodziców
3 PG-13 Szczególnie wskazany nadzór
rodzica/rodziców
4 R Film można obejrzeć jedynie z rodzicami
5 NC-17 Film jedynie dla osób powyżej 17. roku życia

 

Tabela Filmy zawiera listę filmów oraz ich klasyfikację według Amerykańskiego Stowarzyszenia Przemysłu Filmowego. Tabela KlasyfikacjaFilmów zawiera listę klasyfikacji wraz z ich opisami. Powiedzmy, że chcemy wyświetlić wszystkie wiersze uzyskane w wyniku złączenia obu tabel. Do tego celu, a więc do wyświetlenia wszystkich wierszy z tabeli Filmy oraz KlasyfikacjaFilmów, użyjemy klauzuli FULL JOIN. Dzięki złączeniu pełnemu otrzymamy wszystkie wiersze z obu tych tabel, nawet jeśli niektóre wiersze z jednej tabeli nie znalazły dopasowania w drugiej. Instrukcja SELECT będzie zatem miała następującą postać:

SELECT
OpisKlasyfikacji AS 'Opis klasyfikacji filmu',
TytułFilmu AS 'Tytuł filmu'
FROM Filmy
FULL JOIN KlasyfikacjaFilmów
ON Filmy.Klasyfikacja = KlasyfikacjaFilmów.Klasyfikacja
ORDER BY OpisKlasyfikacji, TytułFilmu

a jej wynik to:

Opis klasyfikacji filmu Tytuł filmu
NULL Północ – północny zachód
Dozwolony dla wszystkich grup wiekowych Gdzie jest Nemo?
Film jedynie dla osób powyżej 17. roku życia NULL
Film można obejrzeć jedynie z rodzicami Taka miłość się nie zdarza
Film można obejrzeć jedynie z rodzicami To właśnie miłość
Szczególnie wskazany nadzór rodzica/rodziców Do diabła z miłością
Wskazany nadzór rodzica/rodziców Miłość i śmierć
Wskazany nadzór rodzica/rodziców Truman Show

Zauważ, że w wyniku występują dwie puste komórki, co jest bezpośrednim skutkiem zastosowania klauzuli FULL JOIN. Jeśli chodzi o wartość NULL w kolumnie Opis klasyfikacji filmu w przypadku filmu Północ – północny zachód, wynika ona z braku dopasowania wiersza dla tej produkcji filmowej w tabeli KlasyfikacjaFilmów. W przypadku drugiej komórki z wartością NULL żaden film nie został przypisany do kategorii „Film jedynie dla osób powyżej 17. roku życia”, ponieważ w tabeli Filmy nie zostały znalezione żadne wiersze pasujące do tej klasyfikacji.

Zwróć ponadto uwagę na to, że w powyższej instrukcji nie zastosowaliśmy aliasów ani w stosunku do nazw tabel, ani też w odniesieniu do nazw kolumn wymienionych na liście_kolumn. Znalazła się na niej na przykład kolumna TytułFilmu bez wskazania nazwy tabeli, z której pochodzi (Filmy.TytułFilmu). Takie podejście było możliwe z uwagi na fakt, że każda z kolumn wymienionych w naszej instrukcji SELECT znajduje się tylko w jednej tabeli. Nie ma więc potrzeby wskazywania dodatkowo jej nazwy w połączeniu z nazwą kolumny.

W praktyce złączenie pełne jest rzadko stosowane z prostej przyczyny — ten typ relacji między tabelami występuje raczej sporadycznie. Jego celem jest wyświetlenie danych, w przypadku których istnieją niedopasowane wiersze w obu łączonych tabelach. Zazwyczaj będziemy jednak zainteresowani wyświetleniem wyłącznie tych danych, w przypadku których występuje pełne dopasowanie wierszy z obu łączonych tabel (złączenie wewnętrzne) bądź dopasowanie jednostronne (złączenie lewostronne lub prawostronne).

 

Język SQL. Przyjazny podręcznik. Wydanie II Autor: Larry Rockoff Wydawnictwo: Helion

Zaloguj się aby dodać komentarz

Podobne artykuły

« Złączenia krzyżowe CROSS JOINKolejność tabel w złączeniach zewnętrznych »

Podziel się ze znajomymi tym artykułem - udostępnij na FB lub wyślij e-maila korzystając z poniższych opcji:

Oferty pracy dla inżynierów
Oferty pracy dla inżynierów

Elektryk automatyk

Guz Technika Piekarnicza
Siemianowice Śląskie, śląskie
4500-6500 PLN

Product Engineer

SPX Flow Inc.
Bydgoszcz, kujawsko-pomorskie

Inżynier ds. Rozwoju Platform i Aplikacji Telewizyjnych

Play (P4 sp. zo.o.)
Warszawa, mazowieckie

Starszy Inżynier ds. Rozwoju Platform Strumieniowania i Dystrybucji Wideo

Play (P4 sp. zo.o.)
Warszawa, dowolny Region

Inżynier ds. Rozwoju Urządzeń Abonenckich – Smartfony, Tablety, Urządzenia Wearables

Play (P4 sp. zo.o.)
Warszawa, dowolny Region

Ekspert ds. Rozwoju Urządzeń Abonenckich STB

Play (P4 sp. zo.o.)
Warszawa, dowolny Region

wszystkie oferty
PracaTechniczna.pl

Strefainzyniera.pl - rynek, praca, rozwój - wszystko co ważne dla inżynierów

  • Dla pracodawcy
  • Artykuły
  • Praca
  • Publikacje
  • Popularne stanowiska
  • Offer in English
  • Regulamin
  • Regulamin dla klientów
  • Polityka prywatności
  • Polityka cookies
  • Kontakt

© 2011 - 2021 NetPortal

Mapa strony Letnisko blisko