Klauzula order by – występuje jako ostatnia klauzula w poleceniu

Transkrypt

Klauzula order by – występuje jako ostatnia klauzula w poleceniu
Laboratorium Bazy danych SQL 3
Klauzula order by – występuje jako ostatnia klauzula w poleceniu select, powoduje posortowanie
wierszy będących wynikiem zapytania według wartości atrybutu w niej wskazanego. Domyślnie
sortowanie jest według narastającego porządku (asc), desc sortuje malejąco.
select...
from...
where...
ORDER BY nazwy(a)_kolumn(y) lub numer(y)_kolumn(y) [ASC/DESC];
Przykład 1.
select distinct imie, nazwisko from t_autor order by imie;
select distinct imie, nazwisko from t_autor order by 1, 2 desc;
Łą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 2.
select *
from t_ksiazka, t_klient;
1
Laboratorium Bazy danych SQL 3
•
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 3.
select nazwa, tytul
from t_ksiazka, t_wydawca
where wydawca = id_wydawcy;
Przykład 4.
select nazwisko, ISBN
from t_autor ta, t_a_ksiazki tak
where ta.id_autora = tak.id_autora;
Przykład 5.
select nazwa, tytul
from t_ksiazka INNER JOIN t_wydawca ON (wydawca = id_wydawcy);
Przykład 6.
select nazwisko, ISBN
from t_autor ta INNER JOIN t_a_ksiazki tak ON ta.id_autora = tak.id_autora;
Przykład 7.
select nazwisko, ISBN
from t_autor INNER JOIN t_a_ksiazki USING (id_autora);
•
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 t_wydawca istnieją wiersze, do których nie odwołujemy się w tabeli t_ksiazka.
insert into t_wydawca values(7, 'PWN','W-awa');
insert into t_wydawca values(8, 'Czarne','Sekowa');
2
Laboratorium Bazy danych SQL 3
select tytul, nazwa
from t_wydawca LEFT OUTER JOIN t_ksiazka ON (id_wydawcy = wydawca);
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 tytul from t_ksiazka where dostawca = 1
union all
select tytul from t_ksiazka where dostawca = 3
order by 1 desc;
3
Laboratorium Bazy danych SQL 3
Zadania do samodzielnego rozwiązania:
Zad.1 Wyświetlić wszystkie informacje o książkach i posortować w pierwszej kolejności rosnąco
według wydawcy potem malejąco według dostawcy.
Zad.2 Wyświetlić dla każdej książki tytuł i obliczony iloczyn jej ceny i ilości (nadać kolumnie
nazwę STAN). Wiersze uporządkować w malejącej kolejności stanu, książki z takim samym stanem
uporządkować w rosnącej kolejności tytułów.
Zad.3 Wyświetlić wszystkie informacje o tych autorach, których cena książki jest z przedziału 10
do 15. Wiersze uporządkować malejąco według nazwiska autora.
Zad.4 Wyświetlić dla każdej książki tytuł, nazwę jej wydawcy oraz nazwę jej dostawcy. Wiersze
uporządkować w malejącej kolejności tytułów.
Zad.5 Wyświetlić ISBN, tytuł, nazwę dostawcy oraz nazwisko klienta tych książek, które napisał
autor o imieniu Adam.
Zad.6 Wyświetlić tytuły książek, dla których zamówienie zostało już zrealizowane.
Zad.7 Wyświetlić nazwy wydawców, których książek nasza księgarnia nie ma na stanie.
Zad.8 Wyświetlić ISBN książek, imię i nazwisko autora oraz imię i nazwisko tych klientów, którzy
zamówili więcej niż jedną książkę.
Zad.9 Wyświetlić dane o klientach, którzy wybrali książki w miękkiej oprawie, a ich zamówienie
zostało złożone przed 2008-01-01.
Zad.10 Wyświetlić informację o tych dostawcach, których siedziba jest na tej samej ulicy, co ulica
na której mieszka klient.
Zad.11 Wyświetlić tytuły i ceny książek. Ponadto, jeśli cena jest mniejsza od 30, wyświetlić tekst:
'poniżej trzydziestu zl', jeśli cena jest równa 30 – wyświetlić tekst: 'rowno trzydziesci zlotych',
natomiast jeśli cena jest większa od 30, wyświetlić tekst: 'powyżej trzydziestu zlotych'.
Uporządkować wiersze rosnąco według ceny.
4