• Nie Znaleziono Wyników

Połączenie równościowe (1)

N/A
N/A
Protected

Academic year: 2021

Share "Połączenie równościowe (1)"

Copied!
4
0
0

Pełen tekst

(1)

(c) Instytut Informatyki Politechniki Poznańskiej 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, operatory zbiorowe, składnia ANSI połączeń

(c) Instytut Informatyki Politechniki Poznańskiej 2

Iloczyn kartezjański

Iloczyn kartezjański 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 nazywa się także cross-join.

SELECT nazwisko, etat, nazwa FROM pracownicy, etaty;

SELECT nazwisko, etat, nazwa FROM pracownicy CROSS JOIN etaty;

(c) Instytut Informatyki Politechniki Poznańskiej 3

Połączenie równościowe (1)

NAZWISKO ID_ZESP

MAREK ZAKRZEWICZ

ID_PRAC

180 200

10 30

NAZWA

ADMINISTRACJA SYSTEMY EKSPERCKIE

ID_ZESP

10 210 BIAŁY 30 30

PRACOWNICY

ZESPOLY

NAZWISKO ETAT

BLAZEWICZ SLOWINSKI

ID_PRAC

180 200

PROFESOR PROFESOR 210 KOSZLAJDA ADIUNKT PRACOWNICY

NAZWA

PROFESOR ADIUNKT

PLACA_MIN

800 510 ETATY

•Połączenie relacji w wyniku którego uzyskujemy tylko krotki spełniające warunki połączenia nazywa się połączeniem wewnętrznym (inner join).

•Połączenie równościowe nazywa się equi join.

•Połączenie równościowe, w którym warunek połączenia dotyczy atrybutów o tej samej nazwie nazywa się natural join.

(c) Instytut Informatyki Politechniki Poznańskiej 4

Połączenie równościowe (2)

Warunek porównujący ze sobą wartości atrybutów z dwóch różnych relacji nazywamy warunkiem połączenia.

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.

Łącząc N relacji należy podać minimum N-1 warunków połączenia.

SELECT p.nazwisko, z.id_zesp, z.nazwa FROM pracownicy p, zespoly z

WHERE p.id_zesp = z.id_zesp;

aliasy

(2)

(c) Instytut Informatyki Politechniki Poznańskiej 5

Połączenie naturalne dwóch relacji to połączenie równościowe tych relacji, w którym warunki równości dotyczą wszystkich par atrybutów o takich samych nazwach należących do łączonych relacji.

Połączenie naturalne ANSI

SELECT nazwisko, id_zesp, nazwa

FROM pracownicy NATURAL JOIN zespoly;

SELECT nazwisko, id_zesp, nazwa

FROM pracownicy JOIN zespoly USING (id_zesp);

(c) Instytut Informatyki Politechniki Poznańskiej 6

Połączenie równościowe ANSI

W wyniku połączenia równościowego otrzymujemy wszystkie krotki z obu tabel spełniające warunki połączenia. Połączenie jest lewostronnie łączne.

SELECT p.nazwisko, p.id_zesp, z.id_zesp, z.nazwa FROM pracownicy p JOIN zespoly z

ON p.id_zesp = z.id_zesp;

SELECT p.nazwisko, z.nazwa, e.nazwa, e.placa_min, e.placa_max FROM pracownicy p JOIN zespoly z ON p.id_zesp = z.id_zesp

JOIN etaty e ON p.etat = e.nazwa;

SELECT nazwisko, etat, nazwa FROM pracownicy INNER JOIN etaty ON etat = nazwa;

(c) Instytut Informatyki Politechniki Poznańskiej 7

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

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.

SELECT * FROM pracownicy NATURAL JOIN zespoly;

SELECT * FROM pracownicy JOIN zespoly USING (id_zesp);

ID_ZESP ID_PRAC NAZWISKO ETAT ID_SZEFA ZATRUDNIO PLACA_POD PLACA_DOD NAZWA ADRES

10 100 WEGLARZ DYREKTOR 01-JAN-68 1730 420.5 ADMINISTRACJA PIOTROWO 3A

40 110 BLAZEWICZ PROFESOR 100 01-MAY-73 1350 210 ALGORYTMY WLODKOWICA 16

30 120 SLOWINSKI PROFESOR 100 01-SEP-77 1070 SYSTEMY EKSPERCKIE STRZELECKA 14

SELECT * FROM pracownicy JOIN zespoly ON pracownicy.id_zesp = zespoly.id_zesp;

ID_PRAC NAZWISKO ETAT ID_SZEFA ZATRUDNIO PLACA_POD PLACA_DOD ID_ZESP ID_ZESP NAZWA ADRES

100 WEGLARZ DYREKTOR 01-JAN-68 1730 420.5 10 10 ADMINISTRACJA PIOTROWO 3A

110 BLAZEWICZ PROFESOR 100 01-MAY-73 1350 210 40 40 ALGORYTMY WLODKOWICA 16

120 SLOWINSKI PROFESOR 100 01-SEP-77 1070 30 30 SYSTEMY EKSPERCKIE STRZELECKA 14

(c) Instytut Informatyki Politechniki Poznańskiej 8

Połączenie nierównościowe

Jako operator w warunku połączenia można zastosować dowolny operator języka SQL. Użycie operatora innego niż = jest rzadko spotykane.

NAZWISKO PLACA_POD

MAREK ZAKRZEWICZ

ID_PRAC

180 200

410.2 208

PLACA_MIN NAZWA

SEKRETARKA

PRACOWNICY ETATY

SELECT nazwisko, nazwa, placa_pod, placa_min, placa_max FROM pracownicy, etaty

WHERE placa_pod BETWEEN placa_min AND placa_max;

PLACA_MAX

450 STAŻYSTA

270

150 250

SELECT nazwisko, nazwa, placa_pod, placa_min, placa_max FROM pracownicy JOIN etaty

ON placa_pod BETWEEN placa_min AND placa_max;

(3)

(c) Instytut Informatyki Politechniki Poznańskiej 9

Połączenie zewnętrzne (1)

NAZWISKO ID_ZESP

MAREK

?

ID_PRAC

180

?

10

NAZWA ID_ZESP

40 ZESPOLY ZESPOLY ZESPOLY ZESPOLY

50

ALGORYTMY

BADANIA OPERACYJNE

? PRACOWNICY

NAZWISKO ID_ZESP

MAREK NOWICKI

ID_PRAC

180 300

10

NAZWA ID_ZESP

50 ZESPOLY

?

BADANIA OPERACYJNE 99 ?

PRACOWNICY PRACOWNICY PRACOWNICY PRACOWNICY

null null null

null null

(c) Instytut Informatyki Politechniki Poznańskiej 10

Połączenie zewnętrzne (2)

Wiersze z obu relacji nie posiadające odpowiedników spełniających warunek połączenia nie są wyświetlane. W efekcie zespół 50

„Badania operacyjne” nie zostaje wyświetlony.

Połączenie zewnętrzne zachowuje wszystkie krotki z wybranej relacji, łącząc je z "wirtualnymi" krotkami z drugiej krotki.

"Wirtualne" krotki są wypełnione wartościami pustymi.

Połączenie zewnętrzne nazywa się też outer join.

SELECT z.id_zesp, z.nazwa, p.nazwisko FROM

ZESPOLY ZESPOLY ZESPOLY ZESPOLY

z, pracownicy p WHERE p.id_zesp (+) = z.id_zesp;

SELECT z.id_zesp, z.nazwa, p.nazwisko FROM zespoly z,

PRACOWNICY PRACOWNICY PRACOWNICY PRACOWNICY

p

WHERE p.id_zesp = z.id_zesp (+);

(c) Instytut Informatyki Politechniki Poznańskiej 11

Połączenie zewnętrzne ANSI

Składnia połączeń ANSI pozwala jawnie wskazać relację, której wszystkie krotki mają być zachowane. Dodatkowo składnia ANSI pozwala na wykonanie obustronnego połączenia zewnętrznego.

Uwaga! Słowo „OUTER” jest opcjonalne.

SELECT nazwa, nazwisko, etat

FROM

ZESPOLY ZESPOLY ZESPOLY ZESPOLY

z LEFT OUTER JOIN pracownicy p ON z.id_zesp = p.id_zesp;

SELECT nazwa, nazwisko, etat

FROM zespoly z RIGHT OUTER JOIN

PRACOWNICY PRACOWNICY PRACOWNICY PRACOWNICY

p

ON z.id_zesp = p.id_zesp;

SELECT nazwa, nazwisko, etat

FROM

ZESPOLY ZESPOLY ZESPOLY ZESPOLY

FULL OUTER JOIN

PRACOWNICY

USING (id_zesp);

(c) Instytut Informatyki Politechniki Poznańskiej 12

NAZWISKO ID_SZEFA

BRZEZIŃSKI MORZY

ID_PRAC

130

MATYSIAK 140

190

100 130 140

Połączenie zwrotne (1)

Użycie aliasów w połączeniu zwrotnym jest obowiązkowe.

Połączenie zwrotne nazywa się też self join.

NAZWISKO ID_SZEFA

BRZEZIŃSKI MORZY

ID_PRAC

130

MATYSIAK 140

190

100 130 140

NAZWISKO ID_SZEFA

BRZEZIŃSKI MORZY

ID_PRAC

130

MATYSIAK 140

190

100 130 140 PRACOWNICY

P S

(4)

(c) Instytut Informatyki Politechniki Poznańskiej 13

Połączenie zwrotne (2)

SELECT p.nazwisko, s.nazwisko FROM pracownicy p, pracownicy s WHERE p.id_szefa = s.id_prac;

SELECT p.nazwisko, s.nazwisko FROM pracownicy p JOIN pracownicy s ON p.id_szefa = s.id_prac;

(c) Instytut Informatyki Politechniki Poznańskiej 14

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.

SELECT etat FROM pracownicy WHERE id_zesp = 20

MINUS SELECT etat FROM pracownicy WHERE id_zesp = 30 ORDER BY etat;

SELECT nazwisko FROM pracownicy

UNION SELECT nazwa FROM zespoly;

(c) Instytut Informatyki Politechniki Poznańskiej 15

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.

Cytaty

Powiązane dokumenty

a) Formularz ofert cenowej, wraz z dokumentami określonymi w pkt. Sposób oceny ofert:.. Niedopuszczalna jest zmiana asortymentu czy ilości wymienionych w załączniku nr 1. b)

Wojciechowskiego, Państwowa Wyższa Szkoła Zawodowa w Koszalinie oraz Krakowska Wyższa Szkoła Promocji Zdrowia w Krakowie.. Konferencja poświęcona będzie problematyce

(zasada zaokrąglenia – końcówki poniżej 0,5 grosza pomija się a końcówki 0,5 grosza i wyższe zaokrągla się do 1 grosza zgodnie art. c) Cena (wartość brutto), winna

dwie dziewczyny, koszykówki, witają się, jest, siadają, trzech

materacu, wyjeżdża, odpoczywać, pakuje, fosą, zamek, muszelki1. *Uwaga: Nie każde zdanie jest zilustrowane

Zdaje się mocno tłumaczyć Kreon ze swojego postępku, łudząc Tezeja nader pochlebnemi słowy; ale Edip opisaniem okrutne­.. go obeyścia się, odkryciem zdradliwego

*cena dotyczy przyjęć na minimum 20 osób, dla przyjęć poniżej tego limitu nalezy doliczyć 10 zł od osoby do prezentowanej ceny.. Minimalna ilość osób na przyjęciu

prowadzącymi działalność pożytku publicznego na 2011 rok.. Program Współpracy Powiatu Myszkowskiego z Organizacjami Pozarządowymi zwany dalej Programem Współpracy jest