środa, 7 czerwca 2017

Lekcja 22. Złączenia własne i krzyżowe

Złączenia własne
Złączenie własne jest dokonywane na tej samej tabeli, W celu wykonania złączenia własnego musimy użyć innego aliasu tabeli, aby zidentyfikować w zapytaniu każde odwołanie do niej. Rozważmy przykład: tabela department zawiera kolumnę head_dept, która zawiera wartość dept_no nadrzędnego działu każdego działu. Jeżeli dział nie ma nadrzędnego działu, head_dept ma wartość NULL.
Tabela department zawiera następujące wiersze:


Dział Corporate Headquarters nie posiada działu nadrzędnego, więc w kolumnie head_dept występuje wartość NULL. Działem nadrzędnym Marketing, Field Office: East Coast, Field Office: Canada, Pacific Rim: Headquarters, European Headquarters jest dział Sales and Marketing, który z kolei podlega działowi Corporate Headquarters.
Za pomocą złączenia własnego możemy wyświetlić nazwę działu oraz jego dział nadrzędny.
W poniższym zapytaniu występują dwa odwołania do tabeli department, wykorzystujące aliasy d i h. Alias d jest wykorzystywany do pobrania nazwy działu, a alias h jest używany do pobrania nazwy działu nadrzędnego. Złączenie własne jest dokonywane za pośrednictwem kolumn d.head_dept i h.dept_no:

 

Ponieważ w przypadku Corporate Headquarters kolumna head_dept ma wartość NULL, warunek złączenia nie zwraca tego wiersza.
Dopuszczalne jest łącznie złączeń zewnętrznych i własnych. W poniższym zapytaniu takie połączenie zostało użyte w celu pobrania wiersza dla Corporate Headquarters. Należy zwrócić uwagę na zastosowanie funkcji COALESCE() w celu wyświetlania informacji wskazującej, że Corporate Headquarters jest podległy akcjonariuszom (jest głównym działem nadrzędnym):


Złączenia krzyżowe
Złączenie krzyżowe to inaczej iloczyn kartezjański. Jeżeli chcemy uzyskać iloczyn kartezjański , w standardzie SQL/92 musimy jawnie określi to w zapytaniu za pomocą słów kluczowych CROSS JOIN. W poniższym zapytaniu iloczyn kartezjański tabel customer i country jest generowany za pomocą tych słów kluczowych:



Brak komentarzy:

Prześlij komentarz