Ciąg dalszy czwartej C części kursu języka SQL. Tym razem omówię polecenie SELECT, tym razem z : INNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN. Przy ich pomocy możemy łączyć ze sobą kilka tabel.
• INNER JOIN – łączenie tabel przy wyświetlaniu
W naszych tabelach przechowujemy różne dane, takie jak: pensje, adresy, czy stanowiska. Co w przypadku kiedy chcielibyśmy wyświetlić te dane w jednej tabeli ? Możemy tego dokonać stosując operator INNER JOIN (złączenie wewnętrzne tabel) razem z poleceniem SELECT, które złączy wskazane przez nas tabele i kolumny. Polecenie będzie miało wtedy następującą składnie:
SELECT lista_kolumn FROM nazwa_tabeli INNER JOIN nazwa_tabeli_2 ON warunek_złączenia
Przykład:
Zadaniem naszym jest wyświetlenie w jednej tabeli następujących danych: „id_pracownika”, „imie”, „nazwisko” oraz „adres_email”. Trzy pierwsze dane znajdują się w tabeli „pracownik”, zaś adres e-mail w tabeli „adresy”. Wspólnym polem dla obu tabel jest „id_pracownika” i to ono posłuży nam do złączenia tabel następującym poleceniem:
SELECT pracownik.id_pracownika, imie, nazwisko, adres_email FROM pracownik INNER JOIN adresy ON pracownik.id_pracownika = adresy.id_pracownika
Tab. 4.6 Złączenie tabel pracownik oraz adresy
id_pracownika
|
imie
|
nazwisko
|
adres_email
|
12008
|
Jan
|
Kowalski
|
jkowalski@msql.pl
|
22008
|
Adam
|
Nowakowski
|
anowak@msql.pl
|
32008
|
Kasia
|
Kowalska
|
NULL
|
W trzecim rzędzie pole adresu ma wartość NULL, ponieważ nie zawierało w bazie danych adresu e-mail. Warunek złączenia: pracownik.id_pracownika = adresy.id_pracownika składa się z nazwy_pierwszej_tabeli.wspolna_kolumna = nazwa_drugiej_tabeli.wspolna_kolumna.
Jeżeli chcielibyśmy do tej tabeli dołączyć jeszcze informacje na temat stanowiska pracownika przechowywane w polu „stanowisko” w tabeli „stanowiska” polecenie miałoby następującą formę:
SELECT pracownik.id_pracownika, imie, nazwisko, adres_email, stanowisko FROM pracownik INNER JOIN adresy ON pracownik.id_pracownika = adresy.id_pracownika INNER JOIN stanowiska ON pracownik.id_pracownika = stanowiska.id_pracownika
Tab. 4.7 Złączenie tabel pracownik, adresy oraz stanowiska
id_pracownika
|
imie
|
nazwisko
|
adres_email
|
stanowisko
|
12008
|
Jan |
Kowalski |
jkowalski@msql.pl |
przedstawiciel handlowy |
22008
|
Adam |
Nowakowski |
anowak@msql.pl |
księgowa |
32008
|
Kasia |
Kowalska |
NULL |
kasjer |
W języku SQL mamy jeszcze następujące rodzaje złączeń:
o LEFT OUTER JOIN – lewostronne złączenie zewnętrzne, które zwraca wszystkie wiersze po lewej stronie klauzuli JOIN, zaś z tabeli po prawej stronie tylko wiersze dla których warunek złączenia jest prawdziwy. W przypadku kiedy wiersz z lewej tabeli nie ma odpowiadającego mu wiersza z prawej tabeli to odpowiednie pola zostają wypełniane wartością NULL.
o RIGHT OUTER JOIN – prawostronne złączenie zewnętrzne funkcjonuje w analogiczny sposób.