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