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