Laboratorium 4
Transkrypt
Laboratorium 4
Laboratorium PF – Bazy danych SQL 2 Łączenie poziome relacji: Z reguły łączy się tabele na podstawie wartości wspólnego atrybutu, na przykład wartości pary klucz podstawowy – klucz obcy. W takim przypadku musimy użyć jednoznacznego identyfikatora kolumny. Ponieważ nazwy kolumn zawierających klucz podstawowy i obcy najczęściej są takie same, musimy poprzedzać nazwy kolumn nazwami tabel. Możemy poprawić czytelność zapytania, stosując aliasy dla nazw tabel. Tabele łączymy zgodnie z następującymi wskazówkami: 1. Staramy się łączyć tabele za pomocą kolumn przechowujących parę kluczy podstawowyklucz obcy. 2. Do złączenia używamy całych kluczy podstawowych tabel. Jeżeli dla jakiejś tabeli zdefiniowano złożony (składający się z kilku atrybutów) klucz podstawowy, łącząc taką tabelę, odwołujemy się do całego klucza. 3. Łączymy obiekty za pomocą kolumn tego samego typu. 4. Poprzedzamy nazwy kolumn aliasem nazwy obiektu źródłowego, nawet jeżeli nazwy te są unikatowe — w ten sposób poprawimy czytelność zapytania. 5. Ograniczamy liczbę łączonych obiektów do niezbędnego minimum. • iloczyn kartezjański: łączone iloczynem kartezjańskim relacje wymienia się kolejno w klauzuli from oddzielając je przecinkami. Przykład 1 select * from klasy, uczniowie; • połączenie (JOIN): wiersze jednej relacji łączone są z wierszami innej relacji tylko wtedy, gdy wartości korespondujących atrybutów tych wierszy spełniają określony warunek. ◦ … INNER JOIN... ON | USING … – złączenie wewnętrzne ◦ … NATURAL JOIN … – złączenie naturalne Przykład 2 select nazwisko, nazwa from klasy, uczniowie where klasy.id_klasy = uczniowie.id_klasy; 1 Laboratorium PF – Bazy danych SQL 2 Przykład 3 select nazwisko, nazwa from klasy kl, uczniowie u where kl.id_klasy = u.id_klasy; Przykład 4 select nazwisko, nazwa from klasy INNER JOIN uczniowie ON klasy.id_klasy = uczniowie.id_klasy; Przykład 5 select nazwisko, nazwa from klasy kl INNER JOIN uczniowie u ON kl.id_klasy = u.id_klasy; Przykład 6 select nazwisko, nazwa from klasy INNER JOIN uczniowie USING (id_klasy); Przykład 7 select nazwisko, nazwa from klasy NATURAL JOIN uczniowie; • połączenie zewnętrzne: LEFT | RIGHT OUTER JOIN – złączenie zewnętrzne; wiersze nie spełniające warunku połączenia mogą być wyświetlone w wyniku zapytania, np. operator połączenia zewnętrznego stosujemy, gdy po jednej stronie w tabeli brakuje krotek umożliwiających wyświetlenie wszystkich krotek drugiej relacji (po połączeniu). Powoduje on utworzenie dodatkowych pustych krotek w niepełnej relacji. Liczba pustych krotek jest równa liczbie krotek, które nie spełniają warunków klasycznego połączenia. Przykład 8 W tabeli klasy istnieją wiersze, do których nie odwołujemy się w tabeli uczniowie. select nazwisko, nazwa from klasy LEFT OUTER JOIN uczniowie USING (id_klasy); 2 Laboratorium PF – Bazy danych SQL 2 UWAGA: Dla połączenia n relacji jest konieczne zdefiniowanie n-1 warunków połączenia. Łączenie pionowe relacji: W celu pionowego połączenia relacji stosujemy operator zbiorowy sumy (union, uinion all). Operator ten działa na wynikach co najmniej dwóch operacji select. W łączonych operatorem zbiorowym klauzulach select musi wystąpić ta sama liczba kolumn o typach zgodnych. W wyniku zapytania pojawią się nazwy atrybutów wyłącznie z pierwszej klauzuli select. Polecenia select wykonywane są w kolejności ich wystąpienia (od góry do dołu). W celu zmiany tej kolejności stosujemy nawiasy. Jeśli wystąpi potrzeba użycia klauzuli order by, to musi ona wystąpić jako ostatnia klauzula zapytania. Ponadto, w klauzuli order by nie stosujemy nazw kolumn, lecz ich numery porządkowe. select k_1, ..., k_n from r_1 where warunki operator select k_1, ..., k_n from r_2 where warunki order by 1,...,n; Przykład 9 select nazwisko from nauczyciele where id_ucznia = 10 union all select nazwisko from nauczyciele where id_ucznia = 30 order by 1 desc; select nazwisko from nauczyciele where id_ucznia = 10 union select nazwisko from nauczyciele where id_ucznia = 30 order by 1 desc; 3 Laboratorium PF – Bazy danych SQL 2 Zadania do samodzielnego rozwiązania: Zad 1. Wyświetlić wszystkie informacje o nauczycielach oraz nazwy przedmiotów, które nauczają. Posortować wyniki rosnąco według identyfikatora nauczyciela. Zad 2. Wyświetlić nazwiska nauczyciela oraz nazwisko ucznia, tych uczniów, którzy otrzymali ocenę 1. Zad 3. Wyświetlić wszystkie informacje o tych klasach, w których są dziewczynki. Wiersze uporządkować malejąco według nazwy klasy. Zad 4.Wyświetlić nazwisko nauczyciela, nazwisko ucznia oraz nazwę przedmiotu, o ile wystawiono ocenę pomiędzy '2016-09-01' a '2016-09-30'. Zad 5. Wyświetlić nazwiska uczniów, którzy z matematyki otrzymali ocenę pozytywną. Zad 6. Wyświetlić nazwę przedmiotu oraz nazwisko tych nauczycieli, którzy wystawili ocenę z klasówki. Zad 7. Wyświetlić nauczycieli, którzy nie wystawili jeszcze ani jednej oceny. Zad 8. Wyświetlić nazwę rodzaju oceny, ocenę, nazwisko ucznia i nazwę klasy, uczniów, którzy mają identyfikatory nie większe nić 15. Zad 9. Wyświetlić nazwisko ucznia, który jest młodszy od swojego nauczyciela równo o 30 lat. Zad 10. Wyświetlić nazwiska ucznia, nazwę przedmiotu i ocenę. Ponadto, jeśli ocena jest mniejsza od 2, wyświetlić tekst: 'ocena negatywna', jeśli ocena jest równa 2, wyświetlić tekst: 'ocena warunkowa' natomiast jeśli ocena jest większa od 2, wyświetlić tekst: 'ocena pozytywna'. Uporządkować wiersze rosnąco według oceny. 4