Bazy danych - Akademia Morska w Gdyni

Transkrypt

Bazy danych - Akademia Morska w Gdyni
Bazy danych
Język SQL – Instrukcja SELECT
część II
Laboratorium
Akademia Morska w Gdyni
Gdynia 2004
Przedmiot
Typ zajęć
Temat
Bazy danych
Laboratorium
Język SQL – Instrukcja SELECT cz.II
1. Operatory występowania (IN), zawierania(BETWEEN) i wzorca
(LIKE)
Operator występowania (IN) służy do sprawdzenia czy dana wartość jest
identyczna przynajmniej z jedną wartością referencyjna podaną w liście. Operator IN
najczęściej służy do zastąpienia wielu operatorów sumy logicznej OR.
Przykład:
Wybranie tych autorów z tabeli autorzy, których tytuł naukowy jest jednym z listy:
dr, dr inż., mgr:
SELECT imie, nazwisko, tytul_naukowy from autorzy
WHERE tytul_naukowy IN ('dr', 'dr inż.', 'mgr');
Operator zawierania (BETWEEN) służy do sprawdzenia czy dana wartość należy
do określonego przedziału wartości z uwzględnieniem wartości granicznych. Działanie
operatora polega na porównaniu, czy podana wartość jest większa lub równa dolnej
granicy oraz mniejsza lub równa górnej granicy zadanego przedziału.
Przykład:
Wybranie tych książek, dla których cena jest nie mniejsza niż 10 zł i nie większa niż
60zł:
SELECT tytul, cena from ksiazki
WHERE cena BETWEEN 10 AND 60;
Operator BETWEEN można stosować również dla zakresów łańcuchów tekstowych
oraz zakresów dat.
Negacja operatora (NOT BETWEEN) sprawdza czy dana wartość leży poza podanym
zakresem i wartości graniczne traktuje jako nie spełniające warunków porównania.
Operator wzorca (LIKE) służy do sprawdzenia czy dana wartość jest zgodna z
zadanym wzorcem. Podczas definiowania wzorca mamy do dyspozycji następujące
znaki globalne:
•
_ - oznacza każdy pojedynczy znak
•
% - oznacza dowolny ciąg (w tym pusty ciąg) znaków
Przykład:
Wybranie tych książek, dla których tytuł rozpoczyna się od frazy „Prze”:
SELECT * from ksiazki
Joanna Szłapczyńska ([email protected])
Strona 2 z 8
Przedmiot
Typ zajęć
Temat
Bazy danych
Laboratorium
Język SQL – Instrukcja SELECT cz.II
WHERE tytul LIKE ‘Prze%’;
Uwaga: Aby móc tworzyć wzorce z użyciem symboli zarezerwowanych dla znaków
globalnych należy skorzystać z tzw. znaku pomijania. W MySQL domyślnie znakiem
tym jest backslash ‘\’, np. zapytanie:
SELECT * from ksiazki
WHERE tytul LIKE ‘50\%%’;
zwróci jedynie tytuły książek rozpoczynające się od frazy “50%”.
Można również własnoręcznie zdefiniować znak pomijania poprzez słowo kluczowe
ESCAPE, np. zapytanie równoważne z poprzednim:
SELECT * from ksiazki
WHERE tytul LIKE ‘50|%%’ ESCAPE ‘|’;
2. Sortowanie wyników zapytania – klauzula ORDER BY
Cechą charakterystyczną dla relacyjnych baz danych jest przechowywanie danych i
zwracanie wyników jako zbioru rekordów a nie uporządkowanej listy. Klauzula ORDER
BY służy do wymuszenia interesującego nas uporządkowania rekordów w instrukcji
SELECT.
Składnia klauzuli ORDER BY:
ORDER BY { <kolumna> | <alias> | <pozycja> } [ASC | DESC]
gdzie :
ASC – sortowanie w porządku rosnącym (ascending)
DESC - sortowanie w porządku malejącym (descending)
Przykład:
Wyświetlenie
listy
imion
i
nazwisk
autorów
książek
w
rosnącym
porządku
alfabetycznym względem nazwiska (w pierwszej kolejności) oraz imienia (w drugiej
kolejności):
SELECT imie, nazwisko from autorzy
ORDER BY nazwisko ASC, imie ASC;
Joanna Szłapczyńska ([email protected])
Strona 3 z 8
Przedmiot
Typ zajęć
Temat
Bazy danych
Laboratorium
Język SQL – Instrukcja SELECT cz.II
Uwaga:
W analogiczny sposób można sortować kolumny danych numerycznych, wyrażeń
(poprzez numer pozycji lub nazwę aliasu nadanego słowem kluczowym AS) oraz daty,
np.:
SELECT cena, cena*1.22 AS cena_brutto from ksiazki
ORDER BY cena_brutto ASC;
3. Ograniczanie liczby zwracanych wyników – klauzula LIMIT
Zapytanie z instrukcją SELECT może zwrócić dowolnie wiele rekordów w zależności od
pojemności tabeli o którą pytamy oraz warunków filtracji. Za pomocą klauzuli LIMIT
możemy sterować maksymalną liczbą rekordów zwracanych w wyniku realizacji
instrukcji SELECT.
Składnia klauzuli LIMIT:
LIMIT [<offset>,] <liczba_wierszy> | <liczba_wierszy> OFFSET < offset>
gdzie :
offset – liczba wierszy pomijanych
Przykład:
Wyświetlenie z listy imion i nazwisk autorów książek w rosnącym porządku
alfabetycznym względem nazwiska (w pierwszej kolejności) oraz imienia (w drugiej
kolejności) tylko 4 pozycji pomijając dwie pierwsze pozycje:
SELECT imie, nazwisko from autorzy
ORDER BY nazwisko ASC, imie ASC
LIMIT 4 OFFSET 2;
Wyświetlenie max. 5 rekordów z listy imion i nazwisk autorów książek w rosnącym
porządku alfabetycznym względem nazwiska (w pierwszej kolejności) oraz imienia (w
drugiej kolejności):
SELECT imie, nazwisko from autorzy
ORDER BY nazwisko ASC, imie ASC
LIMIT 5;
Joanna Szłapczyńska ([email protected])
Strona 4 z 8
Przedmiot
Typ zajęć
Temat
Bazy danych
Laboratorium
Język SQL – Instrukcja SELECT cz.II
4. Funkcje agregujące
Funkcje agregujące są funkcjami, które nie działają na pojedynczej wartości pola,
lecz na pewnej grupie wartości zwracanych przez zapytanie. Użycie tych funkcji
zwykle wiąże się z operacją na wybranej kolumnie i jako wynik zwracana jest
pojedyncza wartość.
Podstawowe funkcje agregujące w języku SQL to:
•
COUNT() – funkcja zliczająca
•
SUM() – funkcja sumująca
•
AVG() – funkcja wyliczania średniej
•
MIN() – funkcja wyznaczania wartości minimalnej
•
MAX() - funkcja wyznaczania wartości maksymalnej
Uwaga:
Dla funkcji agregujących klauzula WHERE pełni rolę filtracyjną w odniesieniu do
rekordów na których wykonywane będą obliczenia.
4.1.
Funkcja COUNT()
Funkcja COUNT() przybiera następujące postacie:
1. COUNT(*) – zlicza wszystkie wiersze w tabeli (niezależnie od zawartości,
również wartości NULL)
2. COUNT(<nazwa_kolumny>)
– zlicza liczbę
wierszy, które w danej
kolumnie mają wartość inną niż NULL
3. COUNT (DISTINCT <nazwa_kolumny>) – zlicza liczbę wierszy, które w
danej kolumnie mają unikatową (operator DISTINCT) wartość inną niż
NULL
Funkcja COUNT() działa dla wszystkich typów danych.
Przykład:
Zliczenie autorów, którzy mają określony tytuł naukowy (inny niż NULL):
SELECT COUNT(tytul_naukowy) from autorzy;
Zliczenie autorów, którzy mają określony tytuł naukowy (inny niż NULL), który to
tytuł jest unikatowy w bazie:
Joanna Szłapczyńska ([email protected])
Strona 5 z 8
Przedmiot
Typ zajęć
Temat
Bazy danych
Laboratorium
Język SQL – Instrukcja SELECT cz.II
SELECT COUNT(DISTINCT tytul_naukowy) from autorzy;
4.2.
Funkcje SUM() oraz AVG()
Funkcja SUM() dodaje wszystkie wartości zwraca pojedynczy wynik będący sumą,
a funkcja AVG() wylicza wartość średnią (arytmetyczną) dla zadanej grupy
wartości. Funkcje SUM () i AVG() działają tylko dla wartości numerycznych.
Uwaga:
Dla funkcji SUM() i AVG() wartości NULL nie są uwzględniane w obliczeniach.
Przykład:
Zliczenie sumy cen oraz średniej ceny dla książek z zakresu do 150 zł :
SELECT SUM(cena), AVG(cena)
FROM ksiazki
WHERE cena <= 150;
4.3.
Funkcje MIN() oraz MAX()
Funkcja MIN() służy do znajdowania wartości najmniejszej, a funkcja MAX() wartości największej, w zadanym zbiorze wartości. Obie funkcje działają na
większości z dostępnych typów danych (numeryczne, łańcuchy tekstowe, daty,
itd.).
Uwaga:
Funkcje MIN() ani MAX() nie uwzględniają ani nie zwracają wartości NULL jako
swojego wyniku.
Przykład:
Wyznaczenie wartości minimalnej i maksymalnej ceny dla książek w zakresie cen
do 150 zł :
SELECT MIN(cena), MAX(cena)
FROM ksiazki
WHERE cena <= 150;
5. Grupowanie wyników – klauzula GROUP BY
Często zachodzi konieczność grupowania (kategoryzacji) wyników instrukcji SELECT,
szczególnie kiedy korzystamy z funkcji agregujących. Klauzula GROUP BY służy do
podziału na grupy wyniku zapytania z instrukcją SELECT.
Joanna Szłapczyńska ([email protected])
Strona 6 z 8
Przedmiot
Typ zajęć
Temat
Bazy danych
Laboratorium
Język SQL – Instrukcja SELECT cz.II
Składnia klauzuli GROUP BY:
GROUP BY <nazwa_kolumny_1>[, ...<nazwa_kolumny_n>
W wyniku działania klauzuli GROUP BY zwracane są pojedyncze wartości dla
unikatowego zestawu kolumn określonych w wywołaniu klauzuli. Jeśli w zapytaniu
zwracane mają być również wartości funkcji agregujących działających na tym
zbiorze, ich wartości są również zwracane (po jednej dla każdej grupy).
Przykład:
Wyznaczenie liczby autorów posiadających dany stopień naukowy dla każdego tytułu
naukowego pojawiającego się w tabeli autorzy:
SELECT COUNT(nazwisko), tytul_naukowy
FROM autorzy
GROUP BY tytul_naukowy;
6. Filtrowanie wyników grupowania – klauzula HAVING
Tak jak klauzula WHERE służy do filtracji rekordów przed grupowaniem, tak klauzula
HAVING umożliwia odrzucenie wybranych grup bazując na warunkach określonych w
zapytaniu.
Składnia klauzuli HAVING:
HAVING <warunek_filtracji>
Warunek filtracji w klauzuli HAVING może zawierać odwołania jedynie do tych kolumn
/ wyrażeń / funkcji agregujących, które pojawiają się na liście tuż po słowie
kluczowym SELECT.
Przykład:
Wyznaczenie liczby autorów posiadających dany stopień naukowy dla tytułów
naukowych zawierających ciąg znaków ‘dr’:
SELECT COUNT(nazwisko), tytul_naukowy
FROM autorzy
GROUP BY tytul_naukowy
HAVING tytul_naukowy LIKE '%dr%';
Joanna Szłapczyńska ([email protected])
Strona 7 z 8
Przedmiot
Typ zajęć
Temat
Bazy danych
Laboratorium
Język SQL – Instrukcja SELECT cz.II
Uwaga:
Klauzula HAVING pojawia się w zapytaniu z instrukcją SELECT zawsze po klauzuli
GROUP BY oraz przed ORDER BY. W przypadku braku klauzuli GROUP BY, klauzula
HAVING traci swój sens - nie jest to zgodne ze składnią instrukcji SELECT.
Joanna Szłapczyńska ([email protected])
Strona 8 z 8