1
|
- Iloczyn kartezjański, połączenie równościowe, połączenie nierównościowe,
połączenie zwrotne, połączenie zewnętrzne, składnia ANSI połączeń,
operatory zbiorowe
|
2
|
- Iloczyn kartezjański (ang. cross-join) dwóch relacji to zbiór wszystkich
możliwych kombinacji krotek z obu relacji. W większości wypadków
wystąpienie iloczynu kartezjańskiego sygnalizuje błąd w zapytaniu.
Iloczyn kartezjański rzadko bywa przydatny.
- Iloczyn kartezjański w składni ANSI:
- Iloczyn kartezjański w składni Oracle:
|
3
|
- Zapytanie, którego wynikiem jest kombinacja tych rekordów z dwóch
relacji, dla których spełniony jest warunek połączeniowy.
- Połączenie jest podzbiorem iloczynu kartezjańskiego.
- Ogólna postać:
- składnia ANSI
- składnia Oracle
|
4
|
- ze względu na postać warunku połączeniowego:
- równościowe (ang. equijoin):
- naturalne (ang. natural join)
- zwykłe
- nierównościowe (ang. nonequijoin)
- ze względu na sposób dopasowania rekordów łączonych relacji:
- wewnętrzne (ang. inner join, simple join) – w zbiorze wynikowym tylko
te rekordy z obu relacji, dla których spełniony jest warunek
połączeniowy
- zewnętrzne (ang. outer join) – w zbiorze wynikowym rekordy obu relacji,
dla których spełniony jest warunek połączeniowy + pozostałe rekordy (z
jednej lub obu relacji).
- ze względu na łączone relacje:
- zwykłe
- zwrotne (ang. self join)
|
5
|
|
6
|
- Operator połączenia w składni ANSI: INNER JOIN ... ON
- słowo INNER można pominąć
- Przykład:
|
7
|
- Jeżeli w łączonych relacjach występują atrybuty o takich samych nazwach,
to w zapytaniu muszą być poprzedzone nazwą relacji w celu uniknięcia
dwuznaczności.
- W klauzuli FROM można wprowadzić aliasy (alternatywne nazwy relacji) i
używać aliasów zamiast nazw relacji. Jeśli alias został użyty, to nie
wolno używać oryginalnej nazwy relacji.
|
8
|
|
9
|
- Jeśli nazwy atrybutów w warunku połączeniowym są takie same, wówczas
połączenie równościowe nosi nazwę połączenia naturalnego (ang. natural
join).
- Składnia ANSI:
- operator NATURAL JOIN – warunki równości dotyczą wszystkich par
atrybutów o takich samych nazwach, należących do łączonych relacji.
- operator JOIN ... USING () – warunki równości dotyczą tylko atrybutów
wymienionych po słowie USING
|
10
|
- Przykłady:
- W składni Oracle brak osobnej konstrukcji dla połączenia naturalnego
|
11
|
- W wyniku połączenia naturalnego (zarówno NATURAL JOIN jak i JOIN ...
USING () atrybut połączeniowy występuje tylko raz. W wyniku połączenia
równościowego występują oba atrybuty połączeniowe z obu łączonych
relacji.
|
12
|
- Połączenie, w którym w warunku połączeniowym zastosowano inny niż =
operator języka SQL.
- ang. non-equijoin
|
13
|
|
14
|
|
15
|
- Przy połączeniu wewnętrznym wiersze z obu relacji nie posiadające
odpowiedników spełniających warunek połączenia nie są wyświetlane.
- Połączenie zewnętrzne (ang. outer join) zachowuje wszystkie krotki z
wybranej relacji, łącząc je z "wirtualnymi" krotkami z drugiej
krotki. "Wirtualne" krotki są wypełnione wartościami pustymi.
- Operator w składni ANSI: LEFT | RIGHT | FULL OUTER JOIN ... ON | USING
():
- LEFT – połączenie lewostronne, do wyniku połączenia wewnętrznego obu
relacji zostaną dodane te rekordy z relacji z lewej strony operatora,
które nie połączyły się z rekordami relacji z prawej strony operatora
- RIGHT – połączenie prawostronne, do wyniku połączenia wewnętrznego obu
relacji zostaną dodane te rekordy z relacji z prawej strony operatora,
które nie połączyły się z rekordami relacji z lewej strony operatora
- FULL – połączenie obustronne, wynik połączenia wewnętrznego obu relacji
zostanie uzupełniony o rekordy obu relacji, dla których nie został
spełniony warunek połączeniowy
|
16
|
- Słowo OUTER jest opcjonalne.
- Przykłady:
|
17
|
- Jeśli oprócz warunku połączeniowego w zapytaniu umieszczono dodatkowy
warunek filtrujący na kolumnie z relacji, w której może
"zabraknąć" rekordów, warunek powinien zostać umieszczony po
operatorze AND w klauzuli FROM zapytania.
|
18
|
- Składnia Oracle – operator (+) w warunku połączeniowym wskazuje relację,
w której "zabraknie" rekordów do połączenia z drugą relacją (a
więc to relacja w warunku po stronie bez (+) zachowa wszystkie swoje
rekordy).
- Przykłady:
|
19
|
- Ograniczenia:
- jeśli warunek połączeniowy jest złożony, operator (+) musi zostać
zastosowany do wszystkich części składowych warunku.
- warunek związany z połączeniem zewnętrznym nie może używać operatora IN
ani nie może być łączony z innymi warunkami za pomocą operatora OR
- w składni Oracle brak możliwość wykonania obustronnego połączenia
zewnętrznego.
|
20
|
- Połączenie (ang. self join), w którym relacja łączy się "sama z
sobą" (występuje kilkukrotnie w klazuli FROM).
- Użycie aliasów w połączeniu zwrotnym jest obowiązkowe.
|
21
|
- SELECT p.nazwisko, s.nazwisko
- FROM pracownicy p, pracownicy s
- WHERE p.id_szefa = s.id_prac;
|
22
|
- Połączenie jest operacją binarną, jeśli w zapytaniu więcej niż dwie
relacje, wówczas połączenie jest realizowane parami, np.: relacja A z
relacją B, wynik połączenia z relacją C, itd.
- Łącząc N relacji należy podać minimum N-1 warunków połączenia.
|
23
|
- UNION
- suma zbiorów
- eliminuje duplikaty
- UNION ALL
- suma zbiorów
- nie eliminuje duplikatów
- INTERSECT
- część wspólna zbiorów
- eliminuje duplikaty
- MINUS (standard SQL: EXCEPT)
- różnica zbiorów
- eliminuje duplikaty
- Operatory zbiorowe nazywamy również operatorami złączeń pionowych (vertical
join) ponieważ łączą kolumny zbiorów wynikowych.
|
24
|
- W łączonych operatorami
zbiorowymi klauzulach SELECT musi wystąpić ta sama liczba atrybutów.
- Typy odpowiednich atrybutów różnych klauzul SELECT muszą być zgodne.
- W wyniku zapytania pojawiają się nazwy atrybutów wyłącznie z pierwszej
klauzuli SELECT.
- Klauzula ORDER BY może być użyta tylko jako ostatnia klauzula zapytania.
- Polecenia SELECT są wykonywane w kolejności ich wystąpienia (od góry do
dołu), nawiasy umożliwiają zmianę domyślnej kolejności wykonywania
łączonych operatorami zbiorowymi poleceń SELECT.
- UWAGA: w celu zapewnienia zgodności ze standardem SQL w przyszłych
wydaniach Oracle operator INTERSECT będzie miał największy priorytet.
|