Podstawy języka SQL cz. 2

Transkrypt

Podstawy języka SQL cz. 2
27.11.2015
Projektowanie Baz Danych
Ćw. 6
GiG-2-KG
Podstawy języka SQL cz. 2
1. Operatory zbiorowe
a. UNION – suma zbiorów z eliminacją powtórzeń,
b. EXCEPT – różnica zbiorów z eliminacją powtórzeń,
c. INTERSECT – część wspólna zbiorów z eliminacją powtórzeń.
zapytanie1
UNION | EXCEPT | INTERSECT
zapytanie2
UNION | EXCEPT | INTERSECT
zapytanie3 ...;
2. Funkcje agregujące i grupujące
a.
b.
c.
d.
e.
f.
MIN – minimum ,
MAX – maksimum,
COUNT – liczba wystąpień,
SUM – suma,
AVG – średnia,
COUNT
i. COUNT(*) – liczba rekordów,
ii. COUNT(wyrażenie) – liczba niepustych wartości wyrażenia,
g. GROUP BY - definiuje wyrażenie grupujące,
h. ORDER BY ASC|DSC
i. HAVING warunek_logiczny – umożliwia wybór grup, spełniających warunek
logiczny.
Zapytania będą realizowane w oparciu o następującą relację:
i. Znajdź minimalną wartość płacy podstawowej osób pracujących na
etacie reżysera:
SELECT MIN(Pensja_pod) FROM Pracownicy WHERE Etat LIKE
'reżyser';
27.11.2015
Projektowanie Baz Danych
Ćw. 6
GiG-2-KG
ii. Znajdź minimalną wartość płacy podstawowej osób pracujących na
etacie kaskadera:
SELECT MIN(Pensja_pod), MAX(Pensja_pod) FROM Pracownicy
WHERE Etat LIKE 'reżyser';
iii. Znajdź średnią wartość płacy podstawowej wśród pracowników
każdego zespołu, posortuj wynik wg średniej rosnąco:
SELECT Etat, AVG(Pensja_pod) FROM Pracownicy GROUP BY
Etat ORDER BY AVG(Pensja_pod);
SELECT Etat, AVG(Pensja_pod) FROM Pracownicy GROUP BY
Etat ORDER BY 2;
iv. Dla każdego etatu znajdź średnią płacę pracowników z danego miasta
wynik posortuj wg etatu:
SELECT Etat, Adres, AVG(Pensja_pod) FROM Pracownicy GROUP
BY Etat, Adres ORDER BY 1;
v. Podaj nazwę i średnie płace podstawowe na etatach na których
zatrudnionych jest nie mniej niż 2 pracowników:
SELECT Etat, AVG(Pensja_pod) FROM Pracownicy GROUP BY
Etat HAVING COUNT(*) >=2;
27.11.2015
Projektowanie Baz Danych
Ćw. 6
GiG-2-KG
3. Połączenia relacji
Na przykładzie poniższej bazy:
a. iloczyn kartezjański - wybiera wszystkie możliwe kombinacje zbioru krotek,
i. iloczyn kartezjański zbiorów wydawnictwa i książki:
SELECT * FROM Wydawnictwa CROSS JOIN Autorzy;
SELECT * FROM Wydawnictwa, Autorzy;
ii. wyświetl wszystkie kombinacje nazwisk autorów kończących się na s i
nazw wydawnictw zaczynających się na S:
SELECT Nazwisko, Nazwa FROM Autorzy CROSS JOIN
Wydawnictwa WHERE Nazwa LIKE 'S%' AND Nazwisko LIKE '%s';
b. połączenia równościowe,
c. połączenia naturalne - to połączenie równościowe relacji, w którym warunki
równości dotyczą wszystkich par atrybutów o takich samych nazwach.
Podstawową różnicą, pomiędzy zapytaniami równościowymi, a naturalnymi,
jest lista atrybutów relacji powstającej w wyniku połączenia. W wyniku
połączenia naturalnego atrybut (albo atrybuty) połączeniowe występują tylko
raz, podczas gdy w wyniku połączenia równościowego występują oba atrybuty
połączeniowe z obu łączonych relacji.
i. Wyświetl tytuły książek i nazwę wydawnictw, które je wydały:
SELECT Tytuł, Nazwa FROM Wydawnictwa NATURAL JOIN
Książki;
SELECT Tytuł, Nazwa FROM Wydawnictwa JOIN Książki ON
Wydawnictwa.WydID=Książki.WydId;
SELECT Tytuł, Nazwa FROM Wydawnictwa JOIN Książki
USING(WydId);
27.11.2015
Projektowanie Baz Danych
Ćw. 6
GiG-2-KG
ii. Wyświetl numer ISBN, tytuł oraz ilość autorów każdej z książki
SELECT k.ISBN, k.Tytuł, COUNT(*) FROM Książki k NATURAL
JOIN Książki_Autorzy KA GROUP BY k.ISBN, k.Tytuł;
d. połączenia nierównościowe - połączeniami, w których warunek połączeniowy nie
używa operatora równości, ale dowolny inny operator. Podobnie jak w
przypadku połączenia równościowego, w wyniku połączenia
nierównościowego powstaje relacja, która zawiera wszystkie atrybuty z obu
relacji.
e. połączenia zewnętrzne – pokazuje wszystkie krotki z jednej, albo z obydwu
łączonych relacji znalazły się w wyniku połączenia, nawet takie, które nie
spełniają warunków połączenia (nie znalazły pary). Aby móc zachować
wszystkie krotki z jednej relacji, do drugiej relacji wprowadzana jest
„wirtualna” krotka, która wypełniona jest wartościami pustymi. Wszystkie
krotki z relacji, które nie mogą znaleźć swojej pary, łączone są z "wirtualną"
krotką w drugiej relacji.
i. Wyświetl ID wydawnictw oraz tytuły i ceny książek które te
wydawnictwa wydały:
SELECT Tytuł, Wydawnictwa.WydID, Cena FROM Książki RIGHT
OUTER JOIN Wydawnictwa ON Książki.WydID =
Wydawnictwa.WydID;
ii. Wyświetl tytuły i ceny książek oraz ID wydawnictw które te książki
wydały:
SELECT Tytuł, Wydawnictwa.WydID, Cena FROM Książki
NATURAL LEFT JOIN Wydawnictwa;
27.11.2015
Projektowanie Baz Danych
Ćw. 6
GiG-2-KG
iii. Wyświetl wszystkie informacje o wydawnictwach w połączeniu ze
wszystkimi informacjami o książkach:
SELECT * FROM Książki FULL OUTER JOIN Wydawnictwa ON
Książki.WydID=Wydawniwnictwa.WydID;
f. połączenia zwrotne - łączymy tabelę samą z sobą. Połączeniem zwrotnym
może być dowolny typ połączenia (wewnętrzne, zewnętrzne, równościowe i
nierównościowe) – bez połączenia naturalnego.
i. Wyświetlić tytuły książek dla których cena jest mniejsza od ceny „The
cat”:
SELECT Tytuł, Cena FROM Książki WHERE Cena<29.00;
lub
SELECT k.Tytuł, k.Cena FROM Książki k JOIN Książki kk ON
k.Cena<kk.Cena WHERE kk.Tytuł='The cat';
g. połączenia wielu tabel
i. Wyświetl informację o tytułach książek i identyfikatorach ich autorów:
SELECT Tytuł, AuID FROM Książki LEFT OUTER JOIN Książki_Autorzy
ON Książki.ISBN=Książki_Autorzy.ISBN;
27.11.2015
Projektowanie Baz Danych
Ćw. 6
GiG-2-KG
ii. Wyświetl informację o tytułach książek oraz imionach i nazwiskach ich
autorów:
SELECT Tytuł, Imię, Nazwisko FROM Książki LEFT OUTER JOIN
Książki_Autorzy ON Książki.ISBN=Książki_Autorzy.ISBN JOIN
Autorzy USING(AuID);
iii. Wyświetl informację o tytułach książek oraz imionach i nazwiskach ich
autorów i nazw wydawnictw, które te książki wydały:
SELECT Tytuł, Imię, Nazwisko, Nazwa FROM Książki LEFT
OUTER JOIN Książki_Autorzy ON
Książki.ISBN=Książki_Autorzy.ISBN JOIN Autorzy
USING(AuID) JOIN Wydawnictwa USING(WydID);
27.11.2015
Projektowanie Baz Danych
Ćw. 6
GiG-2-KG
4. Podzapytania
Ujęte w nawiasy zapytanie, umieszczone wewnątrz innego zapytania (tzw. zapytania
zewnętrznego), najczęściej w warunkach klauzul WHERE i HAVING, również w SELECT i
FROM (rozwiązania specyficzne). Ogólny schemat stosowania podzapytań:
SELECT wyrażenie_A1, ...
FROM nazwa_relacji_A1
WHERE wyrażenie_A3 operator
(SELECT wyrażenie_B1
FROM nazwa_relacji_B1
WHERE ...)
ORDER BY wyrażenie_A4;
a. Wierszowe – zwraca zawsze co najwyżej jeden rekord, zawierający jedną lub
wiele wartości.
i. Dopuszczalne zastosowanie operatorów logicznych: =, !=, <>, >, >=, <,
<=.
ii. Znajdź tytuł i cenę najtańszej książki (podzapytanie zwraca rekord z
jedną wartością):
SELECT Tytuł, Cena FROM Książki WHERE Cena =(SELECT
MIN(Cena) FROM Książki);
b. Tablicowe - zwraca zbiór rekordów zawierających jedną lub wiele wartości.
i. Dopuszczalne zastosowanie operatorów: IN, ANY, ALL.
ii. Podaj tytuły najdroższych książek wydanych przez poszczególne
wydawnictwa:
SELECT Tytuł, Cena FROM Książki WHERE Cena IN (SELECT
MAX(Cena) FROM Książki GROUP BY WydID);
iii. Sprawdź, czy w bazie znajdują się książki droższe od jakiejkolwiek
książki wydawnictwa „Small House”:
SELECT Tytuł, Cena FROM Książki WHERE Cena > ANY (SELECT Cena
FROM Książki WydID WHERE WydID=3);
27.11.2015
Projektowanie Baz Danych
Ćw. 6
GiG-2-KG
iv. Sprawdź, czy w bazie znajdują się książki droższe od książek
wydawnictwa „Small House”:
SELECT Tytuł, Cena FROM Książki WHERE Cena > ALL (SELECT
Cena FROM Książki WydID WHERE WydID = (SELECT WydID FROM
Wydawnictwa WHERE Nazwa Like 'Small House') );
c. Zastosowanie klauzuli HAVING
i. Podaj identyfikator i średnią cenę książek, tego wydawnictwa, które
nie przekracza średniej ceny wszystkich książek:
SELECT WydID, AVG(Cena) FROM Książki GROUP BY(WydID)
HAVING AVG(Cena) > (SELECT AVG(Cena) FROM Książki);
d. Skorelowane - podzapytanie wykonywane wielokrotnie – raz dla każdego
rekordu przeglądanego przez zapytanie zewnętrzne. W podzapytaniu
odwołanie do wyrażenia z zapytania zewnętrznego.
i. Ogólny schemat:
SELECT wyrażenie_A1, ...
FROM nazwa_relacji_A1
WHERE wyrażenie_A2 operator
(SELECT wyrażenie_B1
FROM nazwa_relacji_B1
WHERE wyrażenie_B2 = wyrażenie_A3)
ORDER BY wyrażenie_A4;
ii. Przebieg wykonania:
1. Pobranie rekordu R1 przez zapytanie zewnętrzne.
2. Wykonania podzapytania na podstawie wartości rekordu R1,
podzapytanie dostarcza wartości dla warunku W1 zapytania
zewnętrznego.
3. Jeśli W1 jest spełniony, R1 trafia do zbioru wynikowego.
4. Jeśli pozostały jeszcze nie pobrane rekordy, przejdź do punktu 1.
iii. Podaj tytuły i ceny wszystkich książek, których cena jest większa lub
równa średniej cenie książek danego wydawnictwa:
SELECT k.Tytuł, k.Cena FROM Książki k WHERE k.Cena >= (SELECT
AVG(Cena) FROM Książki WHERE k.WydID=WydID);

Podobne dokumenty