Notatki
Pokaz slajdów
Konspekt
1
Rozdział 4
Połączenia i operatory zbiorowe
  • 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
  • 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
Połączenie (1)
  • 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
Podział połączeń
  • 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
Połączenie równościowe (1)
6
Połączenie równościowe (2)
  • Operator połączenia w składni ANSI: INNER JOIN ... ON
    • słowo INNER można pominąć




  • Przykład:






7
Połączenie równościowe (3)
  • 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
Połączenie równościowe (4)
  • Składnia Oracle:
9
Połączenie naturalne (1)
  • 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
Połączenie naturalne (2)
  • Przykłady:







  • W składni Oracle brak osobnej konstrukcji dla połączenia naturalnego
11
Połączenie naturalne a równościowe – różnice
  • 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 nierównościowe (1)
  • Połączenie, w którym w warunku połączeniowym zastosowano inny niż = operator języka SQL.
  • ang. non-equijoin


13
Połączenie nierównościowe (2)
  • Przykłady:
14
Połączenie zewnętrzne (1)
15
Połączenie zewnętrzne (2)
  • 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
Połączenie zewnętrzne (3)
  • Słowo OUTER jest opcjonalne.
  • Przykłady:
17
Połączenie zewnętrzne (4)
  • 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
Połączenie zewnętrzne (5)
  • 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
Połączenie zewnętrzne (6)
  • 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 zwrotne (1)
  • 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
Połączenie zwrotne (2)
  • SELECT p.nazwisko, s.nazwisko
  • FROM pracownicy p, pracownicy s
  • WHERE p.id_szefa = s.id_prac;
22
Połączenia wielu relacji
  • 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
Operatory zbiorowe
  • 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
Reguły stosowania operatorów zbiorowych
  • 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.