wersja
Transkrypt
wersja
SELECT – złączenia 1 Złaczenia ( JOINS ) Operacja złączenia bierze dwie relacje i zwraca jako wynik trzecią. Podaje się warunek złączenia, który określa jakie krotki w tych dwóch relacjach sobie odpowiadają (zostaną połączone krotki o takiej samej wartości atrybutów występujących w warunku złączenia). A a1 1 2 3 B a2 a b c b1 2 3 4 4 b2 a a b d select * from A, B where a2 = b2 a1 a2 b1 b1 ----------1 a 2 a 1 a 3 a 2 b 4 b 2 Złaczenia ( JOINS ) - przykład TOWARY N 1 PRODUCENCI Towary (id_t, nazwa, cena, producent) Producenci (id_prod, nazwa, adres) Select Towary.nazwa, Towary.cena, Producenci.nazwa From Towary, Producenci Where Towary.producent = Producenci.id_prod Powyższe zapytanie zwraca nazwę towaru, cenę towaru, oraz nazwę producenta tego towaru. Dane zatem trzeba pobrać z dwóch tabel – Towary i producenci. Warunek „where” służy tu do połączenia (po kluczu obcym) towaru z jego producentem. 3 Złaczenia ( JOINS ) Zamiast poprzedzać atrybut pełną nazwą tabeli, można nadać tabelom aliasy (skrótowe nazwy), których potem można użyć przed nazwą atrybutu, aby zaznaczyć, z której tabeli dany atrybut pochodzi. nazwa_tabeli alias Np.: Select T.nazwa, T.cena, P.nazwa From Towary T, Producenci P Where T.producent = P.id_prod 4 Zadania Dla każdego pracownika podaj jego identyfikator, nazwisko i nazwę działu, w którym pracuje (należy połączyć tabele Pracownicy i Dzialy) Dla każdego pracownika podaj jego nazwisko, stanowisko oraz prace minimalna i maksymalna na jego stanowisku (połącz tabele: Pracownicy i Stanowiska) Podaj wszystkie informacje z poprzednich dwóch zapytań, tzn: id, nazwisko, nazwa dzialu, stanowisko, placa min i max (musisz połączyć wszystkie trzy tabele) 5 Zadania c.d. Podaj nazwiska pracowników, którzy pracują w dziale na Piotrowie. Podaj pracowników Administracji, którzy zarabiają więcej niż 500 Podaj nazwiska pracowników, których zarobki nie mieszczą się w „widełkach” między płacą min a max dla jego stanowiska 6 Zadania c.d. Dla każdego pracownika podaj jego nazwisko oraz nazwisko jego szefa Podaj nazwiska pracowników, którzy pracują w tym samym dziale co Koszlajda. Podaj nazwiska pracowników, którzy zarabiają więcej niż Królikowski. 7 Złaczenia ( JOINS ) Typ złączenia – określa w jaki sposób są traktowane te krotki w każdej z relacji, które nie mają odpowiedników w drugiej z relacji (uwzględniając warunek złączenia). Typ złączenia Warunki złączenia inner join left outer join right outer join full outer join natural on <predicate> using (A1, A2, ..., An) 8 Złączenia – cd. Złączenia wewnętrzne – INNER JOIN Do wyniku wpisujemy tylko krotki, które spełniają warunek wiązania (krotki z lewej i z prawej muszą sobie „odpowiadać”) W dotychczasowych zadaniach i przykładach używaliśmy odpowiednika „inner join” A a1 1 2 3 B a2 a b c b1 2 3 4 4 b2 a a b d select * from A inner join B on a2, b2 a1 a2 b1 b1 ----------1 a 2 a 1 a 3 a 2 b 4 b 9 Złączenia – cd. Lewe złączenie zewnętrzne – LEFT OUTER JOIN Każdą krotki z lewej tabeli uzupełniamy wszystkimi krotkami z tabeli prawej odpowiadającymi warunkowi złączenia. Jeżeli takiej krotki nie ma, to krotka z lewej tabeli jest uzupełniana wartościami NULL. A a1 1 2 3 B a2 a b c b1 2 3 4 4 b2 a a b d select * from A left outer join B on a2, b2 a1 a2 b1 b1 ------------1 a 2 a 1 a 3 a 2 b 4 b 3 c null null 10 Złączenia – cd. RIGHT OUTER JOIN – analogicznie jak wyżej. select * from A right outer join B on a2, b2 A a1 1 2 3 B a2 a b c b1 2 3 4 4 b2 a a b d a1 a2 b1 b1 --------------1 a 2 a 1 a 3 a 2 b 4 b null null 4 d 11 Złączenia – cd. FULL OUTER JOIN – połączenie obu powyższych, left i right outer join. select * from A full outer join B on a2, b2 A a1 1 2 3 B a2 a b c b1 2 3 4 4 b2 a a b d a1 a2 b1 b1 -----------------1 a 2 a 1 a 3 a 2 b 4 b null null 4 d 3 c null null 12 Zadania Dla każdego pracownika pokaż nazwisko jego szefa; użyj wszystkich czterech rodzajów złączeń, zaobserwuj i wyjaśnij różnicę Wykorzystując jedno w powyższych rodzajów złączeń pokaż nazwę działu, w którym nie pracują żadni pracownicy. 13