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:
SELECT * FROM Tab1 LEFT OUTER JOIN Tab2 ON Tab1.ID = Tab2.ID;
SELECT * FROM Tab1 RIGHT OUTER JOIN Tab2 ON Tab1.ID = Tab2.ID;
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