SELECTDISTINCT NAZWISKO FROM
OCENY WHERE OCENA = ‘NDST’
Fraza ORDER BY - służy do uporządkowania wierszy w tablicy
odpowiedzi. Należy podać zestaw kolumn definiujący porządek. SQL
przez domniemanie porządkuje według kolejności rosnącej.
Słowo kluczowe DESC po nazwie kolumny zmienia porządek na
malejący. Zamiast nazw kolumn można podawać numer kolejny na
liście frazy SELECT.
Przykłady:
SELECT NR_STUDENTA, NAZWISKO FROM
STUDENCI WHERE ROK_URODZ = ‘1970’
ORDER BY NAZWISKO
SELECT NAZWA_PROD, CENA, ROK_PROD FROM
TOWARY ORDER BY 3, 2 DESC
Fraza UNION - służy do łączenia rezultatów dwóch lub
więcej instrukcji SELECT w jedną tablicę odpowiedzi.
Łączone instrukcje SELECT muszą spełniać określone
warunki:
muszą zawierać tą samą liczbę kolumn,
odpowiednie kolumny ze wszystkich połączonych instrukcji SELECT
muszą
mieć zgodne typy,
fraza ORDER BY może wystąpić tylko w ostatniej instrukcji
SELECT.
Przykład:
SELECT NAZWISKO, OCENA_KON
FROM STUDENCI98
WHERE GRUPA = ‘C52’
UNION
SELECT NAZWISKO, OCENA_KON
FROM STUDENCI99
WHERE GRUPA = ‘C52’
Instrukcja SELECT z wieloma tablicami:
Przy formułowaniu zapytań z kilku tablic należy pamiętać o:
umieszczeniu nazw wszystkich tablic we frazie FROM,
stosowaniu kwalifikowanych nazw pól w celu uniknięcia
niejednoznaczności,
umieszczeniu we frazie WHERE warunku wiążącego zbiory.
Nazwa kwalifikowana kolumny to:
nazwa kolumny poprzedzona nazwą tablicy:
np.:
STUDENCI.NR_STUDENTA,
nazwa kolumny poprzedzona aliasem tablicy:
np.:
S.NR_STUDENTA.
Alias tablicy należy zdefiniować we frazie FROM:
np.
: FROM STUDENCI S, PRZEDMIOTY P.
Przykłady:
SELECT STUDENCI.NAZWISKO,
WYNIKI.PRZEDMIOT, WYNIKI.OCENA FROM STUDENCI,
WYNIKI WHERE
(STUDENCI.NR_STUDENTA = WYNIKI.NR_STUDENTA)
SELECT S.NAZWISKO, P.PRZEDMIOT, OCENA
FROM STUDENCI S, PRZEDMIOT P, WYNIKI W
WHERE ( S.NR_STUDENTA = W.NR_STUDENTA ) AND (
P.KOD_PRZEDM = W.KOD_PRZEDM )
Instrukcja SELECT dla podsumowania:
Podsumowania służą do uzyskiwania odpowiedzi sumarycznych jako
rezultatów instrukcji SELECT.
Służą do tych celów:
funkcje kolumnowe,
fraza GROUP BY,
fraza HAVING.
Funkcje kolumnowe - mogą występować w miejscu nazw kolumn
we frazie SELECT.
Argumentem dla funkcji kolumnowej jest zestaw wartości występujących
w kolumnie.
Funkcja taka zwraca pojedynczą sumaryczną wartość.
Instrukcja SELECT, w której występują funkcje kolumnowe
daje w tablicy odpowiedzi dane sumaryczne, zamiast poszczególnych
pól tablicy.
Rodzaje funkcji kolumnowych:
SUM() - oblicz sumę kolumny,
AVG() - oblicza średnią kolumny,
MIN() - oblicza najniższą wartość kolumny,
MAX() - oblicza najwyższą wartość kolumny,
COUNT() - oblicza liczbę wartości w kolumnie,
COUNT(*) - oblicza liczbę wierszy w tablicy.
Przykłady:
SELECTMAX(SREDNIA) FROM WYNIKI
SELECTCOUNT(*) FROM WYNIKI WHERE
OCENA = ‘NDST’
Fraza GROUP BY - służy do otrzymywania wartości
sumarycznych dla poszczególnych grup.
Po słowie kluczowym GROUP BY wystepuje zestaw nazw kolumn,
które definiują grupę.
Nazwy te muszą wystąpić we frazie SELECT.
Przykłady:
SELECT GRUPA, AVG(OCENA) FROM
WYNIKI GROUP BY GRUPA
SELECT NAZWISKO, AVG(OCENA) FROM
STUDENCI S, WYNIKI W WHERE S.NR_STUDENTA =
W.NR_STUDENTA GROUP BY NAZWISKO
Fraza HAVING - ma analogiczne zastosowanie jak fraza WHERE.
Służy do eliminowania wierszy podsumowań.
Przykłady:
SELECT GRUPA, AVG(OCENY) FROM
WYNIKI GROUP BY GRUPA HAVINGAVG(OCENY)
> 4.0
SELECT S.NAZWISKO, AVG(OCENY) FROM
STUDENCI S, WYNIKI W WHERE S.NR_STUDENTA =
W.NR_STUDENTA GROUP BY S.NAZWISKO HAVINGAVG(OCENY) > 4.5 ORDER BY 2 DESC
Podrzędne instrukcje SELECT (Subqueries):
Podrzędna instrukcja SELECT to taka, która występuje we
frazie WHERE lub HAVING innej instrukcji SELECT.
Rezultaty podrzędnej instrukcji SELECT służą do eliminacji
wierszy odpowiedzi nadrzędnej instrukcji SELECT.
Podrzędna instrukcja SELECT musi spełniać dodatkowe
wymagania:
musi być ujęta w nawiasy okrągłe,
tablica odpowiedzi musi zawierać tylko jedną kolumnę,
nie może zawierać frazy ORDER BY,
nie może być unią (UNION) kilku instrukcji SELECT.
Przykłady:
1. Podaj wszystkich klientów, którzy dotychczasowe zamówienia
mieli większe od średniej:
SELECT NR_KLIEN, NAZWA_KLIEN, IL_ZAMOW FROM
ZAMOWIENIA WHERE IL_ZAMOW >
> ( SELECTAVG(IL_ZAMOW) FROM ZAMOWIENIA )
Podrzędna instrukcja SELECT oblicza średnią liczbę
zamówień wszystkich towarów występujących w tabeli
ZAMOWIENIA.
Instrukcja nadrzędna wybiera tylko tych klientów, których
zamówienia spełniają zadane kryterium.
2. Podaj wszystkie produkty (numery, nazwy, stany magazynowe), dla
których aktualne sumaryczne zamówienia przekraczają 80% stanu w
magazynie:
SELECT NR_PROD, NAZWA_PROD, STAN_MAG FROM
PRODUKTY P WHERE 0.8 * STAN_MAG <=
<=
(SELECTSUM( IL_ZAMOW ) FROM ZAMOWIENIA
Z WHERE Z.NR_PROD = P.NR_PROD )
W podrzędnej instrukcji SELECT można użyć nazw kolumn z
nadrzędnej instrukcji.
Dla każdego NR_PROD występującego w tabeli PRODUKTY obliczana
jest suma zamówień z tabeli ZAMOWIENIA.
3. Podaj wszystkich studentów (nazwisko, grupę, ocenę studiów),
którzy uzyskali ocenę ze studiów większą od średniej oceny
grupy, w której studiowali:
SELECT NAZWISKO, GRUPA, OCENA FROM STUDENCI
S WHERE OCENA >
> ( SELECTAVG(
OCENA ) FROM STUDENCI WHERE GRUPA =
S.GRUPA )
Dla każdego studenta z tablicy STUDENCI (instrukcja nadrzędna)
przeglądana jest cała tabela STUDENCI i obliczana jest średnia
ocen dla odpowiedniej grupy szkoleniowej (instrukcja podwyboru).
4. Podaj wszystkie produkty (numery i nazwy), których zamówienie
przyjął pracownik o numerze 5:
SELECT NR_PROD, NAZWA_PROD FROM PRODUKTY
WHERE NR_PROD IN
( SELECT
NR_PROD FROM ZAMOWIENIA WHERE
NR_PRACOW = 5 )
5. Podaj wszystkie produkty (numery i nazwy), dla których nie ma
aktualnych zamówień:
SELECT NR_PROD, NAZWA_PROD FROM PRODUKTY
P WHERENOT EXISTS
( SELECT
NR_PROD FROM ZAMOWIENIA Z WHERE
P.NR_PROD = Z.NR_PROD )
Predykaty w języku SQL
Predykat określa warunek, który dla danego wiersza lub grupy
wierszy może być spełniony (TRUE), niespełniony (FALSE) lub
którego wynik może być nieokreślony (NULL).
Predykaty dzielą się na podstawowe i kwalifikowane.
wyrażenie, po którym występuje operator porównania i instrukcja
podwyboru
(bez SOME, ANY czy ALL). Podwybór musi określać pojedynczą
kolumnę i nie może zwracać więcej niż jednej wartości.
np. :
ZAROBKI > ( SELECTAVG ( ZAROBKI ) FROM
PRACOWNICY )
wynik predykatu jest nieokreślony, jeżeli którykolwiek z operandów
jest NULL lub podwybór nie zwraca żadnej wartści.
Predykaty kwalifikowane:
porównują wartość ze zbiorem wartości,
występują w postaci:
wyrażenie, po którym występuje operator porównania i instrukcja
podwyboru poprzedzona słowem SOME, ANY lub ALL,
np.:
SELECT * FROM TABLICA_1
WHERE KOLUMNA_A =
= ANY ( SELECT
KOLUMNA_B FROM TABLICA_2)
Podwybór musi określać pojedynczą kolumnę i może
zwracać więcej niż jedną wartość:
słowo ALL -
wynik predykatu jest:
TRUE - gdy podwybór nie
zwraca żadnej wartości lub warunek
określony w predykacie jest
spełniony dla każdej wartości zwracanej przez podwybór,
FALSE - gdy warunek określony
w predykacie nie jest spełniony dla
co najmniej jednej wartości
zwracanej przez podwybór,
NULL (nieokreślony) - gdy warunek określony w predykacie
jest spełniony
dla co najmniej jednej wartości zwracanej przez podwybór i co
najmniej
jedno porównanie jest nieokreślone z powodu występowania wartości
NULL.
słowo ANY (SOME)
- wynik predykatu jest:
TRUE - gdy warunek określony
w predykacie jest spełniony dla co
najmniej jednej wartości
zwracanej przez podwybór,
FALSE - gdy podwybór nie
zwraca żadnej wartości lub warunek
określony w predykacie nie
jest spełniony dla każdej wartości
zwracanej przez podwybór.
NULL (nieokreślony) - gdy
warunek określony w predykacie nie jest
spełniony dla każdej
wartości zwracanej przez podwybór i co
najmniej jedno porównanie
jest nieokreślone z powodu
występowania wartości NULL.
Przykłady:
TAB_1 KOL_A ... TAB_2 KOL_B ...
1 2
2 3
3
4
1. SELECT * FROM TAB_1
WHERE KOL_A = ANY ( SELECT KOL_B
FROM TAB_2)
Podwybór zwraca wartości (2,3).
Wynik jest zbiorem wartości (2,3).
2. SELECT * FROM TAB_1
WHERE KOL_A > ANY ( SELECT
KOL_B FROM TAB_2)
Podwybór zwraca wartości (2,3),
Wynik jest zbiorem wartości (3,4).
3. SELECT * FROM TAB_1
WHERE KOL_A > ALL ( SELECT KOL_B FROM
TAB_2)
Podwybór zwraca wartości (2,3),
Wynik jest zbiorem wartości (4).
4. SELECT
*
FROM
TAB_1
WHERE
KOL_A > ALL
( SELECT
KOL_B FROM
TAB_2
WHERE
KOL_B<0)
Podwybór nie zwraca żadnej
wartości,
Wynik jest zbiorem wartości (1,2,3,4).
Instrukcje modyfikacji
tablic
Instrukcje SQL służące do modyfikacji bazy danych to:
INSERT - pozwala dopisywać nowe wiersze do tablicy,
UPDATE - pozwala modyfikować istniejące dane,
DELETE - pozwala usunąć wiersze z tablicy.
Instrukcja INSERT:
powoduje dopisanie wiersza do tablicy lub projekcji,
lista nazw kolumn po nazwie tablicy musi być zgodna z listą
wartości po frazie VALUES,
zamiast frazy VALUES można zastosować podrzędny SELECT, którego
wynikowe wiersze będą dopisywane do tablicy (liczba kolumn musi się
zgadzać z liczbą kolumn instrukcji INSERT).