Rodzaje złączeń

Iloczyn kartezjański

  • generuje zestaw danych poprzez złączenie danych w relacji z tą samą relacją

Zazwyczaj użycie czystego iloczynu kartezjańskiego jest uznawane za błąd (i takie ostrzeżenie generuje). Jeżeli na pewno chcemy użyć iloczynu kartezjańskiego, warto użyć polecenia z drugiego przykładu.

Powyższy przykład jest w pewnym sensie - bez sensu: generuje zestaw każdy pracownik - każdy departament, co biznesowo nie ma sensu.

Iloczyn kartezjański powstaje, gdy warunek połączenia zostanie pominięty lub jest błędny (w sensie logicznym), lub wszystkie krotki relacji zostały połączone z krotkami kolejnej relacji. Aby mu zapobiec, zawsze należy używać warunków połączenia.

Połączenia równowartościowe

Zadanie polegające na znalezieniu dla każdego pracownika nazwy jego działu można rozwiązać za pomocą tzw. połączenia równowartościowego. Ważne jest, aby warunki połączeniowe porównywały jedynie wartości atrybutów pochodzących z łączonych relacji, i za pomocą operatora =.

Nazwy atrybutów, według których łączymy, są takie same w obu relacjach. Wykorzystujemy przeto mechanizm prefiksów (prefiks = nazwa relacji) - zapobiega to niejasności składni zapytania.

Połączenie naturalne

Połączenie jest dokonywane "automatycznie", ponieważ warunek równości dotyczy wszystkich par atrybutów o takich samych nazwach. W wyniku połączenia naturalnego atrybut(y) występują w wyniku tylko raz. Jeśli te same nazwy będą wskazywać różne typy (dziedziny), zostanie zwrócony błąd).

Połączenie równowartościowe z wykorzystaniem klauzuli ON

Aliasy kolumn

Możemy wykorzystać aliasy, aby uniknąć przepisywania prefiksów kolumn. Są one opcjonalne i najczęściej składają się z jednej - dwóch liter (maksymalnie 30). Skraca to zapis i zapobiega niejednoznaczności bardziej skomplikowanych zapytań. Użycie aliasu wyłącza możliwość użycia nazwy tabeli.

Klauzula USING

Jeżeli wiele atrybutów posiada identyczną nazwę, ale różne dziedziny, klauzula NATURAL JOIN może zostać zastąpiona klauzulą USING. Nie należy używać nazw tabel lub aliasów podczas odwoływania się do kolumn użytych w sekcji USING.

Klauzula NATURAL JOIN a USING

Róznica polega na tym, że pierwsza notacja automatycznie wymaga, aby wszystkie pary atrybutów o tych samych nazwach w obu łączonych relacjach były tego samego typu.

Różnica między połączeniem naturalnym i równowartościowym

W wyniku połączenia naturalnego atrybut połączeniowy występuje tylko raz. W wyniku połączenia równowartościowego występują oba atrybuty.

Złączenie zwrotne

Specjalny przypadek, w którym tabelę łączymy samą z sobą. Może to być dowolny typ połączenia (wewnętrzne, zewnętrzne, równościowe, nierównościowe), za wyjątkiem połączenia naturalnego (bo nic nie zwróci). Składnia jest taka sama, jedyną różnicą jest tutaj podanie takiej samej nazwy relacji po obu stronach operatora definiującego połączenie.

Złączenie zwrotne z wykorzystaniem klauzuli ON

Łączenie wielu tabel

Ponieważ wynik łączenia jest relacją, nic nie stoi na przeszkodzie, aby tworzyć jej połączenia z kolejną relacją. W ten sposób można wykonywać dowolną liczbę połączeń.

Łączenie wielu tabel z wykorzystaniem klauzuli ON

Dla każdego połączenia definiowany jest warunek połączenia (wyjątek: iloczyn kartezjański, NATURAL JOIN). Ponieważ jest o jedno mniej połączenie niż łączonych relacji, tyle też należy zdefiniować warunków połączeniowych. Ważne też jest to, że operator połączenia jest łączny lewostronnie, chociaż priorytet można zmieniać za pomocą nawiasów.

Połączenia nierównowartościowe

Połączenia, w których warunek połączenia nie używa operatora równości, lecz dowolny inny operator. Podobnie jak wcześniej, powstanie relacja, która zawiera wszystkie atrybuty z obu relacji. Krotki są tworzone również w podobny sposób.

Operatory: >, >=, <, <=, != (<>), LIKE, BETWEEN.

Przykład: niech tabela employees zawiera nazwiska i płace, a job_grades - przedziały płac i nazwy tych przedziałów.

Jeżeliby przedziały nachodziły na siebie, w wyniku tego zapytania dany pracownik mógłby zostać wyświetlony kilka razy.

Połączenia zewnętrzne

Dotychczas omawialiśmy połączenia wewnętrzne, ponieważ efektem powstającej relacji są te krotki, które spełniały warunki połączenia. Istnieją również połączenia zewnętrzne, które mogą zawierać niedopasowane krotki, nazywane połączeniami zewnętrznymi lewo(prawo)stronnymi (pełnymi).

Przykład: czy istnieją pracownicy niebędący w departamentach? czy istnieją departamenty bez pracowników?

 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

This site uses Akismet to reduce spam. Learn how your comment data is processed.