W y k ł a d IV Temat: Polecenie SELECT Plan wykładu: Złączenia Podzapytania Agregaty SUM, AVG, COUNT, MIN, MAX GROUP BY 1 SELECT Polecenie wyświetlające zawartość tabeli. Składnia uproszczona: select atrybut, atrybut,... from relacja [where atrybut = wartość] Na przykład: select imie, data_urodzenia from studenci where wydzial = Informatyka 2
SELECT select imie, data_urodzenia from studenci where wydzial = Informatyka selekcja NR_INDEKS U IMIE DATA_UR ROK_S TUDIOW WYDZIAL 333456 tomek 12-05-1976 5 informatyka 333457 zosia 23-10-1980 4 informatyka 333458 madzia 01-01-1982 3 biologia 333459 zbyszek 03-12-1984 2 informatyka... Wynik zapytania: IMIE DATA_UR projekcja tomek 12-05-1976 zosia 23-10-1980 zbyszek 03-12-1984 3 Zadanie Podaj nazwisko, płacę i numer działu pracowników zarabiających powyżej 450 zł; posortuj malejąco według zarobków. sortowanie: ORDER BY nazwa_atrybutu [, nazwa atrybutu,...] [ASC DESC] 4
FILMY id_filmu tytul rezyser N 1 Złączenia GATUNKI id_gatunku nazwa opis 5 Złączenia FILMY id_filmu tytul rezyser N 1 GATUNKI id_gatunku nazwa opis Filmy (id_filmu, tytul, rezyser, gatunek) Gatunki (id_gatunku, nazwa, opis) Filmy id_filmu tytul re zyse r gatune k 1 S łodki drań Woody Allen 10 2Piła II D. Lynn Bousman 20 3 Bracie, gdzie jesteś?joel Coen 10 4 S przedawcy Kevin S mith 10 id_gatunku nazwa opis Gatunki 10 komedia ś mieszne ;) 20 horror przerażające.. 30 dramat wyciskacz lez 6
Filmy Złączenia - przykład id_filmu tytul re zyse r gatune k 1 S łodki drań Woody Allen 10 2Piła II D. Lynn Bousman 20 3 Bracie, gdzie jesteś?joel Coen 10 4 S przedawcy Kevin S mith 10 select F.tytul, G.nazwa from filmy F, gatunki G where F.gatunek = G.id_gatunku Gatunki id_gatunku nazwa opis 10 komedia ś mieszne ;) 20 horror przerażające.. 30 dramat wyciskacz lez tytul na zw a Słodki drań komedia P iła II horror Bracie, gdzie jesteś? komedia Sprzedawcy komedia 7 Złączenia - zadania 1. Podaj nazwiska pracowników oraz nazwy działów, w których pracują 2. Podaj nazwiska i płacę podstawową adiunktów pracujących w dziale SYSTEMY ROZPROSZONE 3. Podaj nazwiska pracowników, nazwy stanowisk oraz płace minimalne i maksymalne na tych stanowiskach 4. Podaj nazwiska pracowników pracujących na Piotrowie 5. Podaj nazwiska pracowników i nazwiska ich szefów 6. Podaj pracowników, którzy zarabiają więcej niż Koszlajda 8
Podzapytania Zapytanie zwraca pewien zbiór wynikowy, który może być użyty w innym zapytaniu (nadzapytaniu). Na przykład: Filmy id_filmu tytul re zyse r gatune k 1 S łodki drań Woody Allen 10 2 Piła II D. Lynn Bousman 20 3 Bracie, gdzie jesteś?joel Coen 10 4 Sprzedawcy Kevin Smith 10 Gatunki id_gatunku nazwa opis Podaj tytuły i reżyserów komedii: select tytul, rezyser from filmy where gatunek = ( select id_gatunku from gatunki where nazwa = komedia 10 komedia ś mieszne ;) 20 horror przerażające.. 30 dramat wyciskacz lez ) 9 Podzapytania - zadania 1. Podaj nazwiska pracowników pracujących w dziale ALGORYTMY 2. Podaj nazwiska pracowników pracujących na Piotrowie 3. Podaj nazwiska i datę zatrudnienia pracowników pracujących dłużej niż Koszlajda 4. Podaj nazwiska pracowników pracujących w tym samym dziale co Koszlajda 10
Podzapytania skorelowane Na przykład: Podaj nazwiska i datę zatrudnienia pracowników pracujących dłużej niż Koszlajda, i pracujących w tym samym dziale co on select nazwisko, convert(char(12),zatrudniony,104) as data from pracownicy p1 where zatrudniony < (select zatrudniony from pracownicy p2 where nazwisko = 'Koszlajda' and p1.id_dzialu = p2.id_dzialu) Zadanie: Znajdź pracowników, których płaca podstawowa (placa_pod) jest większa niż płaca maksymalna (placa_max) na ich stanowisku 11 Rozwiązanie Zadanie: Znajdź pracowników, których płaca podstawowa (placa_pod) jest większa niż płaca maksymalna (placa_max) na ich stanowisku select nazwisko, stanowisko, placa_pod from pracownicy p where placa_pod > (select placa_max from stanowiska s where s.nazwa = p.stanowisko) 12
SUM AVG COUNT MIN MAX Agregaty - sumuje - wylicza średnią - zlicza liczbę elementów - wyznacza wartość minimalną - wyznacza wartość maksymalną w zbiorze A B a 1 b 3 b 1 b 4 c 4 c 5 sum(b) = 18 avg(b) = 3 count(b) = 6 count(distinct B) = 4 min(b) = 1 max(b) = 5 13 Agregaty - przykład id_filmu tytul rezyser gatunek czas_trwania 1 S łodki drań Woody Allen 10 120 2 Piła II D. Lynn Bousman 20 130 3 Bracie, gdzie jesteś? Joel Coen 10 110 4 Sprzedawcy Kevin Smith 10 100 Podaj czas trwania najdłuższego filmu: select max(czas_trwania) from Filmy Podaj łączny czas trwania wszystkich komedii: select sum(czas_trwania) from Filmy f, gatunki g where f.gatunek = g.id_gatunku and g.nazwa = komiedia 14
Agregaty - zadania 1. Podaj faktyczną najniższą i najwyższą płacę asystentów 2. Podaj średni zarobek pracowników z działu 10 3. Podaj liczbę wszystkich pracowników 4. Podaj sumę zarobków podwładnych Brzezińskiego 5. Zlicz pracowników, którzy są szefami 6. Policz pracowników, którzy nie dostają płacy dodatkowej 15 Agregaty c.d. GROUP BY A B a 1 b 3 b 1 b 4 c 4 c 5 SELECT A, AVG(B)as srednia FROM TAB GROUP BY A A srednia a 1 b 2,666667 c 4,5 16
GROUP BY - zadania 1. Dla każdego działu podaj średni zarobek jego pracowników 2. Podaj liczbę pracowników na każdym stanowisku, zatrudnionych przed 1990 rokiem 3. Dla każdego szefa podaj sumę zarobków jego pracowników 17 Agregaty + podzapytania - zadania 1. Podaj nazwisko najgorzej zarabiającego pracownika 2. Podaj nazwiska pracowników zarabiających mniej niż średnia 3. Podaj nazwiska, płace i stanowisko pracowników zarabiających więcej niż średnia płaca na ich stanowisku 4. Dla każdego działu podaj nazwisko najlepiej zarabiającego pracownika 18