Operacja Teta-złączenia Dane są: r(r) tabela r o schemacie R, A R s(s) tabela s o schemacie S, B S R i S nie zawierają tych samych nazw (R S = Ø) Θ {>, <, >=, <=, =, <> } - operator Teta q(r S) = r [ AΘB ] s = { t : t[r] r, t[s] s i t[a] Θ t[b] } r R A s S B v v2 t v v Θ v2 v2 65
Przykład r A B a2 a5 2 a a6 4 a 2 r C D a5 2 a a6 4 a 2 r [ B > D ] r2 = A B C D a5 2 a a6 4 a5 2 a6 4 a a6 4 a 2 a 2 a 67
Przykład Grupa Nazwa Pielgrzymka Studenci Emeryci Szkoła Urząd Miejski Pafawag Liczność 0 50 55 20 30 20 Autokar Numer rej WRU 3492 DW 6582 WCX 238 WWX 6745 WRA 22 DW 67892 Pojemność 5 45 60 25 30 0 Podać autokary, które mogą obsłużyc poszczególne grupy turystyczne Grupa [ Liczność <= Pojemność ] Autokar 68
Nazwa Grupa Teta złączenie w języku SQL select from where Autokar.Numer rej, Grupa.Nazwa Autokar, Grupa Autokar.Pojemność >= Grupa.Liczność; 69
Operacje na tabelach Operacje relacyjne Projekcja Operacje teoriomnogościowe Suma Selekcja Złączenie Dzielenie Iloczyn Różnica niesymetryczna Dopełnienie Przemianowanie 70
Operacje teoriomnogościowe suma tabel Dane są tabele o jednakowych schematach: r(r) s(r) r(r) s(r) = q(r) = { t : t r lub t s } Przykład r A B a2 b a5 b2 a b a6 b4 a3 b2 s A a5 a a6 a B b2 b b4 b2 q A B a2 b a5 b2 a b a6 b4 a3 b2 a b2 7
Realizacja operacji sumy tabel w MS ACCESS za pomocą kwerendy dołączającej 72
Realizacja operacji sumy tabel w MS ACCESS za pomocą kwerendy dołączającej a) r := r s b) q := r s q := r q := q s r s r s kwerenda dołączająca r q kwerenda tworząca tabelę kwerenda dołączająca q 73
Kwerenda dołączająca: Realizacja operacji sumy tabel w SQL insert into r(a,b) select s.a, s.b from s; insert into r select s.* from s; Kwerenda sumująca: select * from r union all select * from s; {z duplikatami} select * from r union select * from s; {bez duplikatów} 74
Operacje teoriomnogościowe iloczyn tabel Dane są tabele o jednakowych schematach: r(r) s(r) r(r) s(r) = q(r) = { t : t r i t s } Przykład r A B a2 b a5 b2 a b a6 b4 a3 b2 s A a5 a a6 a B b2 b b4 b2 q A B a5 b2 a b a6 b4 75
Realizacja operacji iloczynu tabel w MS ACCESS za pomocą kwerendy wybierającej q := r s {r.*} (r [ r.a =s.a,..., r.a n =s.a n ] s) r A B a2 b a5 b2 a b a6 b4 a3 b2 s A a5 a a6 a B b2 b b4 b2 {r.a,r.b} (r [ r.a = s.a, r.b = s.b ] s) q A a5 a a6 B b2 b b4 76
Realizacja operacji iloczynu tabel w SQL MS ACCESS: select r.* from r inner join s on (r.a=s.a) and r.b=s.b); PostgreSQL: select r.* from r intersect select s.* from s; select r.* from r intersect all select s.* from s; 77
Operacje teoriomnogościowe różnica niesymetryczna tabel Dane są tabele o jednakowych schematach: r(r) s(r) r(r) s(r) = q(r) = { t : t r i t s } Przykład r A B a2 b a5 b2 a b a6 b4 a3 b2 s A a5 a a6 a B b2 b b4 b2 q A B a2 b a3 b2 78
Realizacja operacji różnicy tabel w MS ACCESS za pomocą kwerendy usuwającej Rekordy unikatowe 79
Realizacja operacji różnicy tabel w MS ACCESS za pomocą kwerendy usuwającej a) r := r s b) q := r s q := r q := q s r s r s kwerenda usuwająca r q kwerenda tworząca tabelę kwerenda usuwająca q 80
Realizacja odejmowania w SQL MS ACCESS: delete distinctrow s.* from r inner join s on (r.a=s.a) and ( r.b=s.b); PostgreSQL: select r.* from r except select s.* from s; select r.* from r except all select s.* from s; 8
insert into Odbiorca select Dostawca.* from Dostawca; 82
select Dostawca.* from Dostawca inner join Odbiorca on (Dostawca.Numer=Odbiorca.Numer) and (Dostawca.Nazwa=Odbiorca.Nazwa); 83
delete distinctrow Odbiorca.* from Dostawca inner join Odbiorca on (Dostawca.Numer=Odbiorca.Numer) and (Dostawca.Nazwa=Odbiorca.Nazwa); 84
Operacje teoriomnogościowe dopełnienie Dana jest tabela r(r), w której R={A,A 2,...,A n } Każdej nazwie A,A 2,...,A n przyporządkowano zbiór dopuszczalnych wartości D,D 2,...,D n dop(r(r)) = D D 2... D n r(r) Przykład R={A,A 2 } D = {,2} D 2 = {a,b} D D 2 A A 2 a b 2 a 2 b r A A 2 2 a b dop(r) A A 2 a 2 b 85
Przykład Obiekt Nazwa Adres Muzealna Grupa Numer Liczność 0 Zwiedziła Nazwa Numer Park zdrojowy Zamek Zapora Parkowa Zamkowa Wodna 2 3 50 55 Park zdrojowy Zamek Zapora 2 3 Podać, która grupa i który obiekt ma jeszcze zwiedzić, jeżeli już odbyły się wizyty podane w tabeli Zwiedziła {Nazwa} (Obiekt) {Numer} (Grupa) Zwiedziła select Obiekt.Nazwa, Grupa.Numer from Obiekt, Grupa except select Zwiedziala.Nazwa, Zwiedzila.Numer from Zwiedzila; 86
87
Przemianowanie atrybutów Firmy Nr Nazwa 0 Nasza Firma Abeja 2 Audi 3 Pafawag 4 Iase 5 Dolmed Ulica Nasza Abejowska Audiego Wagonowa Energetyczna Medyczna KodMjc 3 2 2 3 Telefon 234 23 234 55 256 2 Dokumenty Nr NrSprzerdawcy /02 0 2/02 0 /02 3/02 0 2/02 3 4/02 0 NrNabywcy 2 3 0 0 4 Data 3.02.02 2.03.02 03.0.02 3.04.02 7.02.02 3.05.02 ( {NrSprzedawcy} (Dokumenty) {NrNabywcy} (Dokumenty) ) [??=Nr ]Firmy ta nazwa powinna być wspólna 88
Dana jest tabela r(r) o schemacie R={A,A 2,...,A n }, dla której: a) wybieramy nazwy A,A2,...,Ak R = {A,A 2,...,A n } b) określamy nazwy B,B2,...,Bk z zamiarem aby Bi zastępowało Ai (i =...k) c) tworzymy nowy schemat Q = ( R {A,A2,...,Ak} ) {B,B2,...,Bk} {A,A2,...,Ak <-- B,B2,...,Bk} ( r(r) ) = q( Q ) Kontynuacja przykładu: {Nr} ( { NrSprzedawcy <-- Nr} (Dokumenty)) {Nr} ( ( {NrNabywcy <-- Nr} (Dokumenty) ) [ Nr=Nr ] Firmy 89
select Osoba.pesel, Osoba_.pesel as rodzic, Osoba_2.pesel as dziadek, Osoba_3.pesel as pradziadek, from (Osoba inner join Osoba_...)...); 90
Dane są tabele: r(r), która będzie dzielną, s(s), która będzie dzielnikiem. Utworzymy tabelę: q(t), która będzie ilorazem. Przy czym T = R S Operacja dzielenia q(t) = r(r) s(s) = { t : dla każdej t s s, istnieje t r r taka, że t r [R-S]= t i t r [S] = t s } Nieformalnie: operacja dzielenia znajduje te wiersze dzielnej, które łaczą się z każdym wierszem dzielnika 9
Przykład Obiekt Nazwa Adres Muzealna Grupa Numer Liczność 0 Zwiedziła Nazwa Park zdrojowy Numer Park zdrojowy Parkowa 2 50 2 3 55 3 Podać, które grupy zwiedziły już każdy obiekt: Zwiedziła Obiekt Zwiedziła Nazwa Park zdrojowy Numer 2 Obiekt Nazwa Park zdrojowy Adres Muzealna Parkowa 3 {Nazwa,Numer} {Nazwa, Adres} Grupy Numer Numery grup, które w tabeli Zwiedziła łączą się z każdym obiektem 92
Przykład Obiekt Nazwa Adres Muzealna Grupa Numer Liczność 0 Zwiedziła Nazwa Park zdrojowy Numer Park zdrojowy Parkowa 2 50 2 3 55 3 Podać obiekty zwiedzone już przez każdą grupę: Zwiedziła Grupa Zwiedziła Nazwa Park zdrojowy Numer 2 3 Grupa Numer 2 3 Liczność 0 50 55 {Nazwa,Numer} {Numer, Liczność} Obiekty Nazwa Nazwy obiektów, które w tabeli Zwiedziła łączą się z każdą grupą 93
Realizacja operacji dzielenia za pomocą kwerend q = r s = R-S ( r ) R-S (( R-S ( r ) s) r) r s R-S ( r ) rob R-S ( rob s ) kwerenda tworząca tabelę rob2 kwerenda tworząca tabelę rob rob2 r rob2 r kwerenda usuwająca rob2 rob rob rob2 kwerenda usuwająca rob 94
Realizacja operacji dzielenia w SQL select from where Nazwa Zwiedziła as r not exists (select * from Grupa where not exists ( select * from Zwiedziła as r2 where (r.nazwa=r2.nazwa) and (r2.numer=grupa.numer ))); 95
Operacja złączenia naturalnego Dane są: r(r) tabela r o schemacie R, s(s) tabela s o schemacie S, R i S nie muszą być rozłączne q(r S) = r s = { t : t[r] r, t[s] s } 96
Przykład r A a2 a5 a a6 a B b b2 b b5 b2 r B C b5 c2 b c b6 c4 b c2 r r2 = A B C a2 b c a2 b c2 a b c a b c2 a6 b5 c2 97
Przykład ( iloczyn kartezjański!!! ) r A a2 a5 a B b b2 b r2 C D c5 d2 c d r r2 = A B C D a2 b c5 d2 a2 b c d a5 b2 c5 d2 a5 b2 c d a b c5 d2 a b c d 98