BD-1st-2.4-lab4.tresc-1.1-Slajd28

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania

Stara notacja połączeń

Stara notacja połączeń


Dotychczas opisano sposób łączenia tabel zdefiniowany w późniejszych wersjach standardu SQL. W starszych wersjach stosowano inny zapis, który teraz zostanie pokrótce przedstawiony. Starsze połączenia były wszystkie definiowane w oparciu o pomysł filtrowania wyniku iloczynu kartezjańskiego za pomocą standardowej klauzuli służącej do selekcji (WHERE). W klauzuli FROM definiowano zatem jedynie iloczyn kartezjański poprzez wymienienie po przecinku wszystkich relacji wchodzących w jego skład. Zapytanie (1) przedstawione na slajdzie definiuje właśnie iloczyn kartezjański relacji PRACOWNICY i ZESPOŁY. W sytuacji, gdy konieczne było wykonanie połączenia równościowego, z wyniku takiego iloczynu wybierano, za pomocą klauzuli WHERE, jedynie krotki spełniające warunki połączenia (zapytanie (2)). W podobny sposób wykonywano połączenia nierównościowe. Takie podejście na pierwszy rzut oka wydaje się być bardzo niewydajne, jednak większość SZBD jest w stanie wykryć typ połączenia na podstawie warunków w klauzuli WHERE i zastosować najbardziej wydajny algorytm. Ten sposób łączenia tabel nie uwzględniał połączeń zewnętrznych. Stało się to przyczyną powstania rozwiązań specyficznych dla SZBD, np. takich jak przedstawione na zapytaniu (3). Rozwiązanie przedstawione na tym zapytaniu jest charakterystyczne dla SZBD firmy ORACLE. W zapytaniu (3) umieszczono w klauzuli WHERE, przy jednym z atrybutów w warunku połączeniowym, operator (+). Znaczenie tego operatora jest następujące: „dla tego połączenia, umieść wirtualną krotkę (krotkę z pustymi wartościami) w relacji, z której pochodzi atrybut, przy którym umieszczono niniejszy operator”. W konsekwencji, w wyniku połączenia, wszystkie krotki z drugiej relacji, która uczestniczyła w połączeniu (nie tej przy której umieszczono operator) znajdowały się w wyniku. Przykładowo, w zapytaniu (3) operator (+) umieszczono przy atrybucie ID_ZESP pochodzącym z relacji ZESPOLY, a zatem w tej relacji pojawiła się wirtualna krotka. W związku z tym, wszystkie krotki z relacji PRACOWNICY znajdą się w rozwiązaniu. Niestety, w tej notacji nie jest możliwe zdefiniowanie pełnego połączenia zewnętrznego i jeżeli zachodzi potrzeba wykonania takiego połączenia, to należy zapytanie rozbić na dwa, a wynik połączyć za pomocą operatora UNION. Zapytanie (4) pokazuje sposób wykonania połączenia kilku tabel. Podobnie jak w poprzednich przykładach wykonywany jest tutaj iloczyn kartezjański wszystkich tabel, a następnie, za pomocą warunków umieszczonych w klauzuli WHERE, wybierane są jedynie te krotki, o które chodzi. Stara notacja nie pozwala również na tworzenie połączeń naturalnych.


<< Poprzedni slajd | Spis treści | Następny slajd >>