Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
BD-LAB6 Wojciech Pieprzyca
BAZY DANYCH BD-LAB6 Wojciech Pieprzyca
2
Język SQL – funkcje agregujące
Funkcje agregujące działają na grupach rekordów Rekordy należą do tej samej grupy jeśli posiadają tę samą wartość wyrażenia grupującego Dla każdej grupy rekordów wyliczana jest jedna wartość na podstawie wyrażenia będącego parametrem funkcji agregującej Przykład: obliczyć średnią ceną towaru dla każdego typu towaru Nazwa Typ Cena Typ Średnia Sok pom. napoje 5,50 grupa napoje napoje 4,50 Coca cola napoje 3,50 nabiał 2,75 ======================= słodycze 3,00 jogurt nabiał 3, grupa nabiał mleko nabiał 2,50 ======================= czekolada słodycze 4, grupa słodycze baton słodycze 2,00
3
Język SQL – funkcje agregujące
Funkcje agregujące możliwe do zastosowania: AVG – średnia SUM - suma COUNT – liczba wystąpień MAX – maksimum MIN – minimum Składnia: nazwa_funkcji(wyrażenie) np. AVG(cena) Dla funkcji COUNT można zastosować dwa przypadki: COUNT(*) – zlicza liczbę rekordów COUNT(wyrażenie) – zlicza liczbę niepustych wystąpień wartości wyrażenia np. COUNT(cena) – liczba towarów dla których określono cenę
4
Język SQL – funkcje agregujące
Zapytania z jedną grupą Funkcje agregujące nie zawsze muszą operować na grupach danych, czasami oczekujemy obliczenia wartości np. średniej dla całej tabeli. Wynikiem zapytania z jedną grupą jest zawsze jeden rekord, który dotyczy tej jednej grupy. Przykład: SELECT MIN(cena) as cenamin, MAX(cena) as cenamax FROM towary Wynikiem tego zapytania jest określenie ceny minimalnej i ceny maksymalnej biorąc pod uwagę wszystkie produkty z tabeli towary. Przykładowy wynik: Cenamin Cenamax
5
Język SQL – funkcje agregujące
Zapytania z wieloma grupami Zapytania z wieloma grupami obliczają wynik zapytania dla każdej grupy (tworzonej na podstawie wyrażenia grupującego GROUP BY). SELECT typ, AVG(cena) FROM towary GROUP BY typ Instrukcja ta oblicza średnią cenę towaru dla każdego typu towaru. W tym przypadku funkcją agregującą jest funkcja AVG – obliczająca średnią wartość dla każdej grupy rekordów. Grupy rekordów tworzone są na podstawie typu towaru tzn. wszystkie towary danego typu tworzą jedną grupę i dla nich wyliczana jest średnia cena, następnie ta sama operacja jest przeprowadzana dla drugiego typu towaru, itd.
6
Język SQL – funkcje agregujące
Przykład obliczający liczbę towarów każdego typu występujących w tabeli towary, wykorzystujący funkcję COUNT(*). SELECT id_typu, typ, COUNT(*) as ilosc FROM towary GROUP BY id_typu, typ Należy zwrócić uwagę na to, że na liście wyświetlanych pól w klauzuli SELECT mogą znaleźć się TYLKO wyrażenia z funkcjami agregującymi i pola znajdujące się w wyrażeniu grupującym GROUP BY.
7
Język SQL – funkcje agregujące
Filtrowanie grup Możliwe jest zastosowanie ograniczenia dla wybieranych grup poprzez klauzulę HAVING warunek_logiczny tzn. tworzone będą tylko grupy dla których spełniony jest podany warunek logiczny. Warunek logiczny może być skonstruowany jedynie z funkcji agregujących i z pól występujących w wyrażeniu grupującym GROUP BY Przykład: średnia cena dla każdego typu towaru, ale tylko dla tych typów, które przyporządkowane są do więcej niż 3 towarów (grupy w których są 3 lub mniej rekordów są odrzucane). SELECT typ, AVG(cena) FROM towary GROUP BY typ HAVING COUNT(*)>3
8
Język SQL – funkcje agregujące
Najczęściej popełniane błędy Umieszczenie w klauzuli SELECT wyrażeń nie będących funkcjami agregującymi ani nie związanych z wyrażeniem grupującym GROUP BY np. SELECT typ, cena, COUNT(*) FROM towary GROUP BY typ Umieszczenie funkcji agregującej w klauzuli WHERE np. SELECT typ,AVG(cena) WHERE COUNT(*)>3
9
Język SQL – funkcje agregujące
Najczęściej popełniane błędy 3) Umieszczenie w klauzuli HAVING lub ORDER BY wyrażeń nie będących funkcjami agregującymi ani nie związanych z wyrażeniem grupującym GROUP BY np. SELECT typ, COUNT(*) FROM towary GROUP BY typ HAVING cena>100 ORDER BY cena
10
Język SQL – podzapytania
Podzapytanie jest zapytaniem umieszczonym w ramach innego zapytania tzw. zapytania zewnętrznego. Podzapytanie najczęściej umieszczane jest w ramach klauzul WHERE i HAVING. Ogólny schemat: SELECT lista_pól FROM lista_tabel WHERE wyrażenie operator (SELECT lista_pól FROM lista_tabel WHERE wyrażenie) ORDER BY pole
11
Język SQL – podzapytania
Przebieg wykonania zapytania z podzapytaniem 1) Wykonanie podzapytania 2) Wykonanie zapytania zewnętrznego wykorzystujące wartość dostarczoną przez podzapytanie. Wyróżniamy podzapytania wierszowe i tablicowe. Podzapytanie wierszowe Zwraca co najwyżej jeden rekord Możliwe jest zastosowanie dla niego operatorów =,!=,<>,>,>=,<,<= Przykład: informacje o nazwie i typie towaru o najniższej cenie SELECT nazwa,typ FROM towary WHERE cena = (SELECT MIN(cena) FROM towary)
12
Język SQL – podzapytania
Podzapytanie tablicowe Zwraca zbiór rekordów Możliwe jest zastosowanie dla niego operatorów IN,ANY,ALL Przykład: informacje o nazwie, typie i cenie towarów, które są najdroższe w ramach każdego z typu towarów. SELECT nazwa,typ,cena FROM towary WHERE (id_typu,cena) IN (SELECT id_typu,MAX(cena) GROUP BY id_typu) Jak widzimy klauzula WHERE jednocześnie sprawdza wartości id_typu i cena. Podzapytanie wskazuje na maksymalną cenę towaru w ramach danego typu. Całe zapytanie wyświetla informacje o nazwie, typie i cenie tylko tych towarów, które mają odpowiednie id_typu i cenę wskazane przez podzapytanie.
13
Język SQL – podzapytania
Dodatkowo z podzapytaniami tablicowymi mogą być stosowane operatory ANY i ALL. Operator ANY – warunek z tym operatorem jest prawdziwy jeśli jest spełniony dla przynajmniej jednej wartości odczytanej przez podzapytanie Operator ALL – warunek z tym operatorem jest prawdziwy jeśli jest spełniony dla wszystkich wartości odczytanych przez
14
Język SQL – podzapytania
Przykład z operatorem ANY Wyświetl nazwy towarów z kategorii napoje których cena jest większa od ceny DOWOLNEGO towaru z kategorii slodycze. SELECT nazwa FROM towary WHERE cena > ANY (SELECT cena WHERE typ=‘slodycze’) AND typ = ‘napoje’
15
Język SQL – podzapytania
Przykład z operatorem ALL Wyświetl nazwy towarów z kategorii napoje których cena jest większa od ceny WSZYSTKICH towarów z kategorii slodycze. SELECT nazwa FROM towary WHERE cena > ALL (SELECT cena WHERE typ=‘slodycze’) AND typ = ‘napoje’
16
Język SQL – podzapytania
Podzapytania w klauzuli HAVING Zasady tworzenia takich podzapytań są identyczne jak w przypadku podzapytań w klauzuli WHERE. Przykład: Wyświetl nazwę typu i średnią cenę towaru danego typu, ale tylko dla typów, w których średnia cena towaru jest większa od średniej ceny wszystkich towarów w magazynie. SELECT typ,AVG(cena) FROM towary GROUP BY typ HAVING AVG(cena) > (SELECT AVG(cena) FROM towary)
17
Język SQL – podzapytania
Podzapytania w klauzuli HAVING Zasady tworzenia takich podzapytań są identyczne jak w przypadku podzapytań w klauzuli WHERE. Przykład: Wyświetl nazwę typu i średnią cenę towaru danego typu, ale tylko dla typów, w których średnia cena towaru jest większa od średniej ceny wszystkich towarów w magazynie. SELECT typ,AVG(cena) FROM towary GROUP BY typ HAVING AVG(cena) > (SELECT AVG(cena) FROM towary)
18
Język SQL – zadania Stwórz zapytanie wyświetlające:
1) Informacje o średniej, minimalnej i maksymalnej cenie pokoju. 2) informacje o tym ile razy dany typ pokoju był zamawiany. 3) Informacje o liczbie rezerwacji dla pokoi 2 osobowych. 4) Informacje o średnim czasie pobytu w hotelu (data wyjazdu – data przyjazdu). 5) Informacje o średnich cenach pokoi dla każdego typu pokoju.
19
Język SQL – zadania 6) Informacje o maksymalnych cenach pokoi dla poszczególnych typów, ale tylko dla typów którym przypisany jest co najmniej jeden pokój. Wynik w postaci: nazwatypu, maxcena. 7) Informacje o liczbie rezerwacji którymi opiekuje się dany pracownik w postaci nazwisko, liczbarezerwacji. 8) Informacje o produktach z menu (nazwa,cena), ale tylko takich które były zamawiane co najmniej raz. 9) Informacje o klientach (nazwisko,imie) którzy zamówili co najmniej dwa produkty z menu.
20
Język SQL – zadania 10) Informacje o liczbie dotychczasowych rezerwacji dla pokoi każdego typu w postaci nazwatypu, liczbarezerwacji. 11) Informacja o pokoju o cenie minimalnej ze wszystkich w postaci id_pokoju, cena, osob, typ pokoju. 12) Informacje o nazwiskach pracowników, którzy opiekują się większą lub taką samą liczbą rezerwacji jak pracownik o nazwisku Goliszewska. 13) Informacje o pozycjach z menu, których cena jest większa od średniej ceny produktu z menu. Wynik w postaci: nazwa, cena.
21
Język SQL – zadania 14) Informacje o rezerwacjach, które dla których data_przyjazdu jest późniejsza niż ostatnia data_przyjazdu (tzn. max(data_przyjazdu)) osoby o nazwisku 'Kowalski'. Wynik w postaci: imie i nazwisko klienta, id_pokoju, nazwa typu pokoju, imie i nazwisko pracownika przyjmującego rezerwację. 15) Informacje o klientach którzy przyjeżdżali do hotelu częściej niż osoby, które zamawiały pokoje czterosobowe (tzn. klienci ci mieli więcej rezerwacji). Wynik w postaci: imie,nazwisko. 16) Informacje o pokojach które są najdroższe w ramach każdego z typów pokoi w postaci id_pokoju, cena, osob, typ pokoju.
22
Język SQL – zadania 17) Informacje o pokojach, których cena jest większa od ceny jakiegolwiek pokoju typu standard. Wynik w postaci id_pokoju, osob, cena, nazwa typu. 18) Informacje o pokojach, których cena jest mniejsza od ceny wszystkich pokoi typu apartament. Wynik w postaci id_pokoju, osob, cena, nazwa typu.
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.