BazyDanych Info

Złaczenia tabel w SQL

Jedną z podstawowych i najczęściejwykorzystywanych wykorzystywanych cech języka SQL jest możliwość łączenia tabel.

Przykładowe tabele

Zawartość tabel w poniższych przykładach:

Złączenie wewnętrzne - INNER JOIN

Łączenie wewnętrzne tabel (INNER JOIN) - jeżeli nie zostało to inaczej sprecyzowane, to domyślnie złączenie tabel w zapytaniu SQL jest traktowane jako złączenie wewnętrzne (INNER JOIN lub po prostu JOIN) Złączenie wewnętrzne kojarzy ze sobą rekordy występujące w dwóch lub więcej tabelach i zwraca w wyniku tylko pasujące rekordy. Złączenie wewnętrzne może być zdefiniowane w sposób jasno określony (wyraźny) lub domniemany. Złączenie domniemane jest bardziej intuicyjne i najczęściej spotykane. Przykładowe zapytanie:

SELECT * FROM tab1, tab2 
WHERE tab1.ID = tab2.ID

SELECT * FROM tab1 
INNER JOIN tab2 
ON tab1.ID = tab2.ID 

Złączenie zewnętrzne - OUTER JOIN

Łączenie zewnętrzne tabel (OUTER JOIN) Łączenie zewnętrzne tabel jest rozszerzeniem złączenia INNER JOIN. OUTER JOIN pozwala na włączenie do tabeli wynikowej rekordów które kwalifikują się do tabeli wynikowej na podstawie polecenia INNER JOIN i dodatkowo włączyć wybrane rekordy nie speŁniające warunków zapytania.
Złączenie zewnętrzne może przybrać następujące postacie:

Złączenie lewe - LEFT OUTER JOIN
W złączeniu zewnętrznym lewym zwracane są wszystkie wiersze występujące w tabeli z lewej strony, a wiersze z prawej tabeli, które nie zostały znalezione, wypełnione są wartościami null.
 
SELECT *
FROM Tab1
LEFT OUTER JOIN Tab2 ON Tab1.ID = Tab2.ID; 
Złączenie prawe - RIGHT OUTER JOIN
W złączeniu zewnętrznym prawym zwracane są wszystkie wiersze występujące w tabeli z prawej strony, a wiersze z lewej tabeli, które nie zostały znalezione, wypełnione są wartościami null.
SELECT *
FROM Tab1
RIGHT OUTER JOIN Tab2 ON Tab1.ID = Tab2.ID; 
Złączenie pełne - FULL OUTER JOIN
W rezultatach zapytania SQL obecne są wiersze złączone wewnętrznie, rozszerzone o rekordy nie zwrócone z obydwu tabel, wypełnione nullami
SELECT *
FROM Tab1
FULL OUTER JOIN Tab2 ON Tab1.ID = Tab2.ID ; 


Należy zwrócić szczególną uwagę na fakt, że rekordy powstałe ze złączeń zewnętrznych zwracają wartości null i należy je we właściwy sposób obsłużyć.

W języku SQL w bazie danych Oracle można również zastosować krótszy i prostszy sposób definiowania złączeń zewnętrznych (OUTER JOINS) - za pomocą znaku (+) , np:
--LEFT OUTER JOIN: 
SELECT tab1.*,tab2.Field1
  FROM tab1, tab2
 WHERE tab1.ID=tab2.ID(+); 

--RIGHT OUTER JOIN: 
SELECT tab1.*,tab2.Field1
  FROM tab1, tab2
 WHERE tab1.ID(+)=tab2.ID; 

Raportowanie
Usługi konsultingowe i wdrożenia systemów Business Intelligence i projektowania hurtowni danych.
www.goliinfo.com