Wybieranie wierszy: 1 Warunek WHERE Rodzaje warunków: - liczbowe - liczbowe z zakresu - znakowe.

1 Wybieranie wierszy: 1 Warunek WHERE Rodzaje warunków: -...
Author: Dagmara Rosińska
0 downloads 0 Views

1 Wybieranie wierszy: 1 Warunek WHERE Rodzaje warunków: - liczbowe - liczbowe z zakresu - znakowe

2 2 Wyodrębnianie składowych z daty: YEAR(data) MONTH(data) mysql> SELECT YEAR('2016-03-22'); +--------------------+ | YEAR('2016-03-22') | +--------------------+ | 2016 | +--------------------+ mysql> SELECT MONTH('2016-03-22'); +---------------------+ | MONTH('2016-03-22') | +---------------------+ | 3 | +---------------------+ mysql> SELECT QUARTER ('2016-03-22'); +------------------------+ | QUARTER ('2016-03-22') | +------------------------+ | 1 | +------------------------+ mysql> SELECT MONTHNAME('2016-03-22'); +-------------------------+ | MONTHNAME('2016-03-22') | +-------------------------+ | March | +-------------------------+ QUARTER(data) MONTHNAME(data)

3 3 Wyodrębnianie składowych z czasu: HOUR(czas) MINUTE(czas) SECOND(czas) mysql> SELECT HOUR('10:15:43'); +------------------+ | HOUR('10:15:43') | +------------------+ | 10 | +------------------+ mysql> SELECT MINUTE('10:16:27'); +--------------------+ | MINUTE('10:16:27') | +--------------------+ | 16 | +--------------------+ mysql> SELECT SECOND('10:18:38'); +--------------------+ | SECOND('10:18:38') | +--------------------+ | 38 | +--------------------+

4 4 Wyliczanie wieku i jego ograniczenie: SELECT personelNr, imie, nazwisko, stanowisko, data_ur, Year(Now())- Year(data_ur) AS wiek FROM personel WHERE (Year(Now())-Year(data_ur)) > 40; mysql> SELECT personelNr, imie, nazwisko, stanowisko, data_ur, Year(Now())- Year(data_ur) AS wiek FROM personel WHERE (Year(Now())-Year(data_ur))> 40; +------------+-----------+------------+------------+------------+------+ | personelNr | imie | nazwisko | stanowisko | dataUr | wiek | +------------+-----------+------------+------------+------------+------+ | SB20 | Sabina | Bober | dyrektor | 1940-06-03 | 70 | | SB21 | Daniel | Frankowski | kierownik | 1958-03-24 | 52 | | SB23 | Anna | Biały | asystent | 1960-11-10 | 50 | | SB30 | Katarzyna | Michalska | dyrektor | 1960-11-17 | 50 | | SG20 | Karolina | Mucha | dyrektor | 1953-03-03 | 57 | | SL20 | Paweł | Nowak | kierownik | 1962-02-02 | 48 | | SL21 | Paweł | Kowalski | asystent | 1969-05-05 | 41 | | SL30 | Jan | Wiśniewski | dyrektor | 1945-10-01 | 65 | | SL31 | Julia | Lisicka | asystent | 1965-07-13 | 45 | | SL32 | Michał | Brzęczyk | asystent | 1959-03-15 | 51 | +------------+-----------+------------+------------+------------+------+ 10 rows in set (0.04 sec)

5 5 Wyliczanie wieku i jego ograniczenie (bez alias’u): SELECT personelNr, imie, nazwisko, stanowisko, data_ur, Year(Now())- Year(data_ur) FROM personel WHERE (Year(Now())-Year(data_ur)) > 40; mysql> SELECT personelNr, imie, nazwisko, stanowisko, data_ur, Year(Now())-Year(data_ur) FROM personel WHERE (Year(Now())-Year(data_ur))>40; +------------+-----------+------------+------------+------------+--------------------------+ | personelNr | imie | nazwisko | stanowisko | dataUr | Year(Now())-Year(dataUr) | +------------+-----------+------------+------------+------------+--------------------------+ | SB20 | Sabina | Bober | dyrektor | 1940-06-03 | 70 | | SB21 | Daniel | Frankowski | kierownik | 1958-03-24 | 52 | | SB23 | Anna | Biały | asystent | 1960-11-10 | 50 | | SB30 | Katarzyna | Michalska | dyrektor | 1960-11-17 | 50 | | SG20 | Karolina | Mucha | dyrektor | 1953-03-03 | 57 | | SL20 | Paweł | Nowak | kierownik | 1962-02-02 | 48 | | SL21 | Paweł | Kowalski | asystent | 1969-05-05 | 41 | | SL30 | Jan | Wiśniewski | dyrektor | 1945-10-01 | 65 | | SL31 | Julia | Lisicka | asystent | 1965-07-13 | 45 | | SL32 | Michał | Brzęczyk | asystent | 1959-03-15 | 51 | +------------+-----------+------------+------------+------------+--------------------------+ 10 rows in set (0.04 sec)

6 6 Ograniczenie pensji : SELECT personelNr, imie, nazwisko, stanowisko, pensja FROM personel WHERE pensja > 1000; mysql> SELECT personelNr, imie, nazwisko, stanowisko, pensja -> FROM personel -> WHERE pensja>1000; +------------+------------+------------+------------+--------+ | personelNr | imie | nazwisko | stanowisko | pensja | +------------+------------+------------+------------+--------+ | SA8 | Katarzyna | Morawska | kierownik | 1700 | | SB20 | Sabina | Bober | dyrektor | 2400 | | SB21 | Daniel | Frankowski | kierownik | 1800 | | SB23 | Anna | Biały | asystent | 1200 | | SB30 | Katarzyna | Michalska | dyrektor | 2500 | | SB31 | Dawid | Piotrowski | asystent | 1100 | | SB32 | Małgorzata | Plichta | asystent | 1200 | | SG20 | Karolina | Mucha | dyrektor | 2200 | | SG21 | Piotr | Cybulski | asystent | 1300 | | SL20 | Paweł | Nowak | kierownik | 1500 | | SL22 | Monika | Munk | asystent | 1100 | | SL30 | Jan | Wiśniewski | dyrektor | 3000 | +------------+------------+------------+------------+--------+ 12 rows in set (0.01 sec)

7 7 Złożony warunek selekcji Podaj adresy biur w Łomży lub w Białymstoku: SELECT biuroNr, ulica, miasto, kod FROM Biuro WHERE miasto='Łomża' OR miasto="Białystok"; mysql> SELECT biuroNr, ulica, miasto, kod -> FROM biuro -> WHERE miasto='Łomża' OR miasto="Białystok"; +---------+--------------+-----------+--------+ | biuroNr | ulica | miasto | kod | +---------+--------------+-----------+--------+ | B001 | Piękna 46 | Białystok | 15-900 | | B002 | Cicha 56 | Łomża | 18-400 | | B003 | Mała 63 | Białystok | 15-900 | | B005 | Dobra 22 | Łomża | 18-400 | | B006 | Słoneczna 55 | Białystok | 15-900 | +---------+--------------+-----------+--------+ 5 rows in set (0.00 sec)

8 8 Warunek selekcji przynależność do zbioru: SELECT biuroNr, ulica, miasto, kod FROM biuro WHERE miasto IN ('Łomża','Białystok'); mysql> SELECT biuroNr, ulica, miasto, kod -> FROM biuro -> WHERE miasto IN ('Łomża', 'Białystok'); +---------+--------------+-----------+--------+ | biuroNr | ulica | miasto | kod | +---------+--------------+-----------+--------+ | B001 | Piękna 46 | Białystok | 15-900 | | B002 | Cicha 56 | Łomża | 18-400 | | B003 | Mała 63 | Białystok | 15-900 | | B005 | Dobra 22 | Łomża | 18-400 | | B006 | Słoneczna 55 | Białystok | 15-900 | +---------+--------------+-----------+--------+ 5 rows in set (0.40 sec)

9 9 czy też spoza zbioru: WHERE miasto NOT IN ('Łomża','Białystok'); mysql> SELECT biuroNr, ulica, miasto, kod -> FROM biuro -> WHERE miasto NOT IN ('Łomża', 'Białystok'); +---------+-------------+-----------+--------+ | biuroNr | ulica | miasto | kod | +---------+-------------+-----------+--------+ | B004 | Miodowa 32 | Grajewo | 19-300 | | B007 | Akacjowa 16 | Augustów | 16-300 | | B010 | Świerkowa 5 | Woźniewo | 15-200 | | B011 | Olchowa 12 | Mińsk | NULL | +---------+-------------+-----------+--------+ 6 rows in set (0.02 sec)

10 10 inny przykład przynależność do zbioru : SELECT personelNr, imie, nazwisko, stanowisko FROM personel WHERE stanowisko IN ('kierownik','dyrektor'); mysql> SELECT personelNr, imie, nazwisko, stanowisko -> FROM personel -> WHERE stanowisko IN ('kierownik','dyrektor'); +------------+-----------+------------+------------+ | personelNr | imie | nazwisko | stanowisko | +------------+-----------+------------+------------+ | SA8 | Katarzyna | Morawska | kierownik | | SB20 | Sabina | Bober | dyrektor | | SB21 | Daniel | Frankowski | kierownik | | SB30 | Katarzyna | Michalska | dyrektor | | SG20 | Karolina | Mucha | dyrektor | | SL20 | Paweł | Nowak | kierownik | | SL30 | Jan | Wiśniewski | dyrektor | +------------+-----------+------------+------------+ 7 rows in set (0.00 sec)

11 11 lub spoza zbioru : SELECT personelNr, imie, nazwisko, stanowisko FROM personel WHERE stanowisko NOT IN ('kierownik','dyrektor'); mysql> SELECT personelNr, imie, nazwisko, stanowisko -> FROM personel -> WHERE stanowisko NOT IN ('kierownik','dyrektor'); +------------+------------+------------+------------+ | personelNr | imie | nazwisko | stanowisko | +------------+------------+------------+------------+ | SA9 | Maria | Hojna | asystent | | SB22 | Małgorzata | Kowalska | asystent | | SB23 | Anna | Biały | asystent | | SB31 | Dawid | Piotrowski | asystent | | SB32 | Małgorzata | Plichta | asystent | | SG21 | Piotr | Cybulski | asystent | | SL21 | Paweł | Kowalski | asystent | | SL22 | Monika | Munk | asystent | | SL31 | Julia | Lisicka | asystent | | SL32 | Michał | Brzęczyk | asystent | +------------+------------+------------+------------+ 10 rows in set (0.00 sec)

12 12 SELECT personelNr, imie, nazwisko, stanowisko, pensja FROM personel WHERE pensja BETWEEN 2000 AND 3000; Selekcja pensji z zakresu: mysql> SELECT personelNr, imie, nazwisko, stanowisko, pensja -> FROM personel -> WHERE pensja BETWEEN 2000 AND 3000; +------------+-----------+------------+------------+--------+ | personelNr | imie | nazwisko | stanowisko | pensja | +------------+-----------+------------+------------+--------+ | SB20 | Sabina | Bober | dyrektor | 2400 | | SB30 | Katarzyna | Michalska | dyrektor | 2500 | | SG20 | Karolina | Mucha | dyrektor | 2200 | | SL30 | Jan | Wiśniewski | dyrektor | 3000 | +------------+-----------+------------+------------+--------+ 4 rows in set (0.01 sec)

13 13 SELECT personelNr, imie, nazwisko, stanowisko, pensja FROM personel WHERE pensja>=2000 AND pensja SELECT personelNr, imie, nazwisko, stanowisko, pensja -> FROM personel -> WHERE pensja>=2000 AND pensja

14 14 SELECT nieruchomoscNr, miasto, typ, czynsz FROM nieruchomosc WHERE miasto='Białystok' AND czynsz BETWEEN 350 AND 450 OR miasto='Augustów'; mysql> SELECT nieruchomoscNr, miasto, typ, czynsz -> FROM nieruchomosc -> WHERE miasto='Białystok' AND czynsz BETWEEN 350 AND 450 OR miasto='Augustów'; +----------------+-----------+------------+--------+ | nieruchomoscNr | miasto | typ | czynsz | +----------------+-----------+------------+--------+ | A14 | Augustów | dom | 715 | | B17 | Białystok | mieszkanie | 412 | | B18 | Białystok | mieszkanie | 385 | +----------------+-----------+------------+--------+ 3 rows in set (0.00 sec) Selekcja czynszu z zakresu oraz miast

15 15 SELECT wlascicielNr, imie, nazwisko, adres, telefon FROM wlasciciel WHERE adres LIKE '%Białystok%'; lub WHERE adres LIKE "*Białystok*"; (w Access‘ie) Warunek selekcji – dopasowanie do wzorca mysql> SELECT wlascicielNr, imie, nazwisko, adres, telefon -> FROM wlasciciel -> WHERE adres LIKE '%Białystok%'; +--------------+---------+--------------+-------------------------------+---------------+ | wlascicielNr | imie | nazwisko | adres | telefon | +--------------+---------+--------------+-------------------------------+---------------+ | CO40 | Tatiana | Marcinkowski | 15-900 Białystok, Wodna 63 | 0-85-111 5555 | | CO87 | Karol | Frankowski | 15-900 Białystok, Agrestowa 6 | 0-85-222 6666 | | CO93 | Tomasz | Szymański | 15-900 Białystok, Parkowa 12 | 0-85-333 4444 | +--------------+---------+--------------+-------------------------------+---------------+ 3 rows in set (0.00 sec)

16 16 Podaj informacje o wszystkich mieszkaniach w Białymstoku, w których są przynajmniej trzy pokoje, a czynsz nie przekracza 350 złotych: SELECT nieruchomoscnr AS nr, miasto, ulica, typ, pokoje, czynsz FROM nieruchomosc WHERE miasto = 'Białystok' AND pokoje >= 3 AND czynsz < 350; +-----+-----------+---------+------------+--------+--------+ | nr | miasto | ulica | typ | pokoje | czynsz | +-----+-----------+---------+------------+--------+--------+ | B16 | Białystok | Nowa 5 | mieszkanie | 4 | 195 | | B17 | Białystok | Mała 2 | mieszkanie | 3 | 112 | | B18 | Białystok | Leśna 6 | mieszkanie | 3 | 172 | +-----+-----------+---------+------------+--------+--------+

17 17 mysql> SELECT klientNr, data_wizyty, uwagi -> FROM wizyta -> WHERE nieruchomoscNr='B4' AND uwagi IS NULL; +----------+-------------+-------+ | klientNr | data_wizyty | uwagi | +----------+-------------+-------+ | CR52 | 2010-05-26 | NULL | +----------+-------------+-------+ 1 row in set (0.00 sec) Warunek selekcji - wartości puste Podaj informacje wizytach w nieruchomości B4, po których nie zgłoszono uwag: SELECT klientNr, data_wizyty, uwagi FROM wizyta WHERE nieruchomoscNr='B4' AND uwagi IS NULL;

18 18 lub zgłoszono uwagi: WHERE nieruchomoscNr= ' B4 ' AND uwagi IS NOT NULL; mysql> SELECT klientNr, data_wizyty, uwagi -> FROM wizyta -> WHERE nieruchomoscNr='B4' AND uwagi IS NOT NULL; +----------+-------------+--------------+ | klientNr | data_wizyty | uwagi | +----------+-------------+--------------+ | CR51 | 2010-03-18 | brak jadalni | | CR53 | 2010-04-20 | za daleko | +----------+-------------+--------------+ 2 rows in set (0.01 sec)

19 19 Zawartość tabeli wizyta : mysql> SELECT * FROM wizyta; +----------+----------------+-------------+--------------+ | klientnr | nieruchomoscnr | data_wizyty | uwagi | +----------+----------------+-------------+--------------+ | CR51 | A14 | 2010-05-24 | za mały | | CR51 | B4 | 2010-03-18 | brak jadalni | | CR52 | A14 | 2010-05-14 | brak jadalni | | CR52 | B36 | 2010-04-28 | NULL | | CR52 | B4 | 2010-05-26 | NULL | | CR53 | B4 | 2010-04-20 | za daleko | +----------+----------------+-------------+--------------+ 6 rows in set (0.00 sec)

20 20 SELECT FROM WHERE Za wynajęcie których nieruchomości dokonano opłaty gotówką? Dla których nieruchomości kaucja była większa od czynszu? SELECT FROM WHERE

21 21 Zastosowanie funkcji agregujących: COUNT – zwraca liczbę wartości występujących w określonej kolumnie; SUM – zwraca sumę wartości występujących w określonej kolumnie; AVG – zwraca średnią wartości występujących w określonej kolumnie; MIN – zwraca najmniejszą wartość występującą w określonej kolumnie; MAX – zwraca największą wartość występującą w określonej kolumnie. W standardzie ISO zdefiniowanych jest pięć funkcji agregujących:

22 22 Funkcje COUNT, MIN i MAX można stosować zarówno do pól liczbowych jak i nieliczbowych. Natomiast SUM i AVG jedynie do pól liczbowych. Funkcje agregujące mogą być stosowane jedynie na liście SELECT i w klauzuli HAVING

23 23 W MySQL istnieją funkcje agregujące: COUNT(wyrażenie) – zlicza wiersze, dla których wyrażenie przyjmuje wartość różną od NULL ; AVG(wyrażenie) – oblicza średnią wartość wyrażenia dla uwzględnionych wierszy; MIN(wyrażenie), MAX(wyrażenie) – podają odpowiednio minimalną i maksymalną wartość wyrażenia dla uwzględnionych wierszy; SUM(wyrażenie) – sumuje wyrażenie po uwzględnionych wierszach; STD(wyrażenie) lub STDDEV(wyrażenie) – oblicza standardowe odchylenie wyrażenia; BIT_OR(wyrażenie), BIT_AND(wyrażenie) – alternatywa i odpowiednio koniunkcja bitów wyrażenia.

24 24 Diagram związków :

25 25 Policz – ile jest wszystkich nieruchomości: SELECT Count(*) AS liczba FROM nieruchomosc; mysql> SELECT Count(*) AS liczba FROM nieruchomosc; +--------+ | liczba | +--------+ | 8 | +--------+ 1 row in set (0.02 sec)

26 26 Policz z ograniczeniem – w ilu nieruchomościach miesięczny czynsz jest wyższy od 350: SELECT Count(*) AS liczba FROM nieruchomosc WHERE czynsz > 400; mysql> SELECT Count(*) AS liczba FROM nieruchomosc WHERE czynsz>400; +--------+ | liczba | +--------+ | 2 | +--------+ 1 row in set (0.00 sec)

27 27 Zawartość tabeli nieruchomosc : mysql> SELECT nieruchomoscNr, ulica, miasto, typ, czynsz FROM nieruchomosc; +----------------+------------+------------+------------+--------+ | nieruchomoscNr | ulica | miasto | typ | czynsz | +----------------+------------+------------+------------+--------+ | A14 | fgdb | fbdfb | dom | 350 | | B16 | Nowa 5 | Białystok | mieszkanie | 85 | | B17 | Mała 2 | Białystok | mieszkanie | 2 | | B18 | Leśna 6 | Białystok | mieszkanie | 172 | | B21 | Dobra 18 | Białystok | dom | 960 | | L27 | Inna 7 | Łomża | dom | 340 | | L33 | Pogodna 3 | Łomża | mieszkanie | 300 | | L94 | Akacjowa 6 | Łomża | mieszkanie | 65535 | +----------------+------------+------------+------------+--------+ 8 rows in set (0.00 sec)

28 28 Policz z ograniczeniem daty - ile nieruchomości odwiedzono w listopadzie 2014: SELECT Count(nieruchomoscNr) AS liczba FROM wizyta WHERE Month(data_wizyty)=11 AND Year(data_wizyty)=2014; mysql> SELECT Count(nieruchomoscNr) AS liczba FROM wizyta WHERE Month(data_wizyty)=11 AND Year(data_wizyty)=2014; +--------+ | liczba | +--------+ | 11 | +--------+ 1 row in set (0.00 sec)

29 29 Policz z ograniczeniem daty - ile nieruchomości odwiedzono w listopadzie 2014: SELECT Count(*) AS liczba FROM wizyta WHERE Month(data_wizyty)=11 AND Year(data_wizyty)=2014; mysql> SELECT Count(*) AS liczba FROM wizyta WHERE Month(data_wizyty)=11 AND Year(data_wizyty)=2014; +--------+ | liczba | +--------+ | 11 | +--------+ 1 row in set (0.00 sec)

30 30 Zawartość tabeli wizyta : mysql> SELECT * FROM wizyta; +----------+----------------+-------------+--------------+ | klientnr | nieruchomoscnr | data_wizyty | uwagi | +----------+----------------+-------------+--------------+ | CR51 | B21 | 2015-04-28 | | | CR52 | A14 | 2015-04-14 | brak jadalni | | CR51 | A14 | 2015-04-24 | za maĹy | | CR51 | L33 | 2015-04-24 | | | CR52 | B18 | 2015-05-04 | NULL | | CR52 | B17 | 2013-12-05 | NULL | | CR53 | A14 | 2014-04-15 | NULL | | CO17 | B17 | 2014-11-25 | NULL | | CO18 | B21 | 2014-11-26 | NULL |... | CR53 | L33 | 0000-00-00 | za daleko | | 1 | A14 | 2015-11-08 | aaa | | 1 | B17 | 2015-11-09 | NULL | +----------+----------------+-------------+--------------+ 21 rows in set (0.00 sec)

31 31 Policz i sumuj – oblicz ilu jest dyrektorów i jaka jest ich sumaryczna pensja: SELECT COUNT(*) AS liczba, SUM(pensja) AS suma FROM personel WHERE stanowisko='dyrektor'; mysql> SELECT COUNT(*) AS liczba, SUM(pensja) AS suma FROM personel WHERE stanowisko='dyrektor'; +--------+-------+ | liczba | suma | +--------+-------+ | 3 | 44950 | +--------+-------+ 1 row in set (0.00 sec)

32 32 Minimum, maksimum i średnia – policz parametry pensji wszystkich pracowników: SELECT MIN(pensja) AS min, MAX(pensja) AS max, AVG(pensja) AS srednia FROM personel; mysql> SELECT MIN(pensja) AS min, MAX(pensja) AS max, AVG(pensja) AS srednia FROM personel; +------+-------+-----------+ | min | max | srednia | +------+-------+-----------+ | 1200 | 16250 | 8731.4545 | +------+-------+-----------+ 1 row in set (0.00 sec)

33 33 Grupowanie wyniku – klauzula GROUP BY Zapytanie grupujące – zapytanie SELECT zawierające klauzulę GROUP BY – w trakcie jego obliczania dane z tabeli SELECT są dzielone na grupy i dla każdej z grup jest generowany jeden wiersz podsumowania. Kolumny grupowania – kolumny wymienione w klauzuli GROUP BY.

34 34 Policz z grupowaniem – ile jest nieruchomości w każdym mieście: SELECT miasto, COUNT(*) AS liczba FROM nieruchomosc GROUP BY miasto; mysql> SELECT miasto, COUNT(*) AS liczba FROM nieruchomosc GROUP BY miasto; +------------+--------+ | miasto | liczba | +------------+--------+ | Białystok | 4 | | fbdfb | 1 | | Łomża | 3 | +------------+--------+ 3 rows in set (0.00 sec)

35 35 Policz z grupowaniem i sumowaniem - dla każdego biura liczbę pracowników i ich sumaryczną pensję: SELECT biuroNr, COUNT(*) AS liczba, SUM(pensja) AS suma FROM personel GROUP BY biuroNr; mysql> SELECT biuroNr, COUNT(*) AS liczba, SUM(pensja) AS suma FROM personel GROUP BY biuroNr; +---------+--------+-------+ | biuroNr | liczba | suma | +---------+--------+-------+ | B001 | 1 | 16250 | | B002 | 3 | 14032 | | B003 | 4 | 28482 | | B005 | 3 | 37282 | +---------+--------+-------+ 4 rows in set (0.00 sec)

36 36 Wyznacz liczbę nieruchomości nadzorowanych przez każdego pracownika w każdym z biur: mysql> SELECT biuronr, personelnr, COUNT(*) AS liczba FROM nieruchomosc GROUP BY biuronr, personelnr; +---------+------------+--------+ | biuronr | personelnr | liczba | +---------+------------+--------+ | B001 | SL20 | 1 | | B003 | SB21 | 1 | | B003 | SB22 | 1 | | B003 | SB23 | 2 | | B005 | SL31 | 3 | +---------+------------+--------+ 5 rows in set (0.00 sec) SELECT biuronr, personelnr, COUNT(*) AS liczba FROM nieruchomosc GROUP BY biuronr, personelnr;

37 37 Wyznacz całkowitą liczbę nieruchomości każdego typu zarejestrowanych w każdym z biur: SELECT biuronr, typ, COUNT(*) FROM nieruchomosc GROUP BY biuronr, typ; mysql> SELECT biuronr, typ, COUNT(*) FROM nieruchomosc GROUP BY biuronr, typ; +---------+------------+----------+ | biuronr | typ | COUNT(*) | +---------+------------+----------+ | B001 | dom | 1 | | B003 | dom | 1 | | B003 | mieszkanie | 3 | | B005 | dom | 1 | | B005 | mieszkanie | 2 | +---------+------------+----------+ 5 rows in set (0.00 sec)

38 38 Ile jest osób na każdym stanowisku: SELECT... FROM... GROUP BY...; mysql> SELECT...; Ćwiczenia-1:

39 39 Ile jest osób na każdym stanowisku w każdym z biur : SELECT... FROM... GROUP BY...; mysql> SELECT...; Ćwiczenia-2:

40 40 Ile jest osób w każdym z biur z wybranych stanowisk : SELECT... FROM... WHERE... GROUP BY...; mysql> SELECT...; Ćwiczenia-3:

41 41 Jaka jest najniższa pensja na każdym z stanowisk : SELECT... FROM... GROUP BY...; mysql> SELECT...; Ćwiczenia-4:

42 42 Wybór grup – klauzula HAVING Policz z grupowaniem i wyborem grupy - Dla każdego biura zatrudniającego więcej niż dwóch (trzech) pracowników, podaj ich liczbę oraz sumę ich zarobków: SELECT biuroNr, COUNT(personelNr) AS liczba, SUM(pensja) AS suma FROM personel GROUP BY biuroNr HAVING COUNT(*)>2 ORDER BY biuroNr;

43 43 Z wykorzystaniem alias’u: SELECT biuroNr, COUNT(personelNr) AS liczba, SUM(pensja) AS suma FROM personel GROUP BY biuroNr HAVING liczba >2 ORDER BY biuroNr;

44 44 mysql> SELECT biuroNr, COUNT(*) AS liczba, SUM(pensja) AS suma FROM personel GROUP BY biuroNr HAVING COUNT(*)>2 ORDER BY biuroNr; +---------+--------+-------+ | biuroNr | liczba | suma | +---------+--------+-------+ | B002 | 3 | 14032 | | B003 | 4 | 28482 | | B005 | 3 | 37282 | +---------+--------+-------+ 3 rows in set (0.00 sec)

45 45 mysql> SELECT biuroNr, COUNT(*) AS liczba, SUM(pensja) AS suma FROM personel GROUP BY biuroNr HAVING liczba>2 ORDER BY biuroNr; +---------+--------+-------+ | biuroNr | liczba | suma | +---------+--------+-------+ | B002 | 3 | 14032 | | B003 | 4 | 28482 | | B005 | 3 | 37282 | +---------+--------+-------+ 3 rows in set (0.00 sec) Z wykorzystaniem alias’u:

46 46 mysql> SELECT biuroNr, COUNT(*) AS liczba, SUM(pensja) AS suma FROM personel GROUP BY biuroNr HAVING COUNT(*)>3 ORDER BY biuroNr; +---------+--------+-------+ | biuroNr | liczba | suma | +---------+--------+-------+ | B003 | 4 | 28482 | +---------+--------+-------+ 1 row in set (0.00 sec) mysql> SELECT biuroNr, COUNT(*) AS liczba, SUM(pensja) AS suma FROM personel GROUP BY biuroNr HAVING liczba>3 ORDER BY biuroNr; +---------+--------+-------+ | biuroNr | liczba | suma | +---------+--------+-------+ | B003 | 4 | 28482 | +---------+--------+-------+ 1 row in set (0.00 sec)

47 47 1. Podaj informacje o biurach w danym mieście: SELECT biuroNr, miasto, ulica, kod FROM biuro WHERE miasto like 'Grajewo'; lub SELECT biuroNr, miasto, ulica, kod FROM biuro GROUP BY miasto; Rodzaje rozwiązań zadań:

48 48 mysql> SELECT biuroNr, miasto, ulica, kod -> FROM biuro -> WHERE miasto like 'Grajewo'; +---------+---------+------------+--------+ | biuroNr | miasto | ulica | kod | +---------+---------+------------+--------+ | B004 | Grajewo | Miodowa 32 | 19-300 | +---------+---------+------------+--------+ mysql> SELECT biuroNr, miasto, ulica, kod -> FROM biuro -> GROUP BY miasto; +---------+------------+-------------+--------+ | biuroNr | miasto | ulica | kod | +---------+------------+-------------+--------+ | B007 | Augustów | Akacjowa 16 | 16-300 | | B001 | Białystok | Piękna 46 | 15-900 | | B004 | Grajewo | Miodowa 32 | 19-300 | | B002 | Łomża | Cicha 56 | 18-400 | +---------+------------+-------------+--------+

49 49 mysql> SELECT biuroNr, miasto, ulica, kod -> FROM biuro -> ORDER BY miasto; +---------+------------+---------------+--------+ | biuroNr | miasto | ulica | kod | +---------+------------+---------------+--------+ | B007 | Augustów | Akacjowa 16 | 16-300 | | B001 | Białystok | Piękna 46 | 15-900 | | B003 | Białystok | Mała 63 | 15-900 | | B006 | Białystok | Słoneczna 55 | 15-900 | | B004 | Grajewo | Miodowa 32 | 19-300 | | B002 | Łomża | Cicha 56 | 18-400 | | B005 | Łomża | Dobra 22 | 18-400 | +---------+------------+---------------+--------+ Natomiast:

50 50 Podaj liczbę wszystkich biur w danym mieście: SELECT count(*) FROM biuro WHERE miasto like 'Grajewo'; lub SELECT miasto, count(*) FROM biuro GROUP BY miasto; 2. Tu grupowanie przynosi oczekiwane wyniki

51 51 mysql> SELECT count(*) -> FROM biuro -> WHERE miasto like 'Grajewo'; +----------+ | count(*) | +----------+ | 1 | +----------+ 1 row in set (0.00 sec) mysql> SELECT miasto, count(*) -> FROM biuro -> GROUP BY miasto; +------------+----------+ | miasto | count(*) | +------------+----------+ | Augustów | 1 | | Białystok | 3 | | Grajewo | 1 | | Łomża | 2 | +------------+----------+

52 52 Podaj nazwiska, stanowiska oraz wysokości pensji pracowników zatrudnionych w danym biurze. Wynik uporządkuj według nazwisk: SELECT nazwisko, stanowisko, pensja FROM personel WHERE biuronr = 'B003' ORDER BY nazwisko; lub SELECT biuronr, nazwisko, stanowisko, pensja FROM personel ORDER BY biuronr, nazwisko; 3. Z wyświetleniem nazwisk w kolejnych biurach

53 53 mysql> SELECT nazwisko, stanowisko, pensja -> FROM personel -> WHERE biuronr = 'B003' -> ORDER BY nazwisko; +------------+------------+--------+ | nazwisko | stanowisko | pensja | +------------+------------+--------+ | Biały | asystent | 1200 | | Bober | dyrektor | 2400 | | Frankowski | kierownik | 1800 | | Kowalska | asystent | 1000 | +------------+------------+--------+

54 54 mysql> SELECT biuronr, nazwisko, stanowisko, pensja -> FROM personel -> ORDER BY biuronr, nazwisko; +---------+------------+------------+--------+ | biuronr | nazwisko | stanowisko | pensja | +---------+------------+------------+--------+ | B001 | Bogacz | dyrektor | 5000 | | B002 | Kowalski | asystent | 1000 | | B002 | Munk | asystent | 1100 | | B002 | Nowak | kierownik | 1500 | | B003 | Biały | asystent | 1200 | | B003 | Bober | dyrektor | 2400 | | B003 | Frankowski | kierownik | 1800 | | B003 | Kowalska | asystent | 1000 | | B004 | Cybulski | asystent | 1300 | | B004 | Mucha | dyrektor | 2200 | | B005 | Brzęczyk | asystent | 1000 | | B005 | Lisicka | asystent | 900 | | B005 | Wiśniewski | dyrektor | 3000 | | B006 | Michalska | dyrektor | 2500 | | B006 | Piotrowski | asystent | 1100 | | B006 | Plichta | asystent | 1200 | | B007 | Hojna | asystent | 900 | | B007 | Morawska | kierownik | 1700 | +---------+------------+------------+--------+

55 55 Podaj całkowitą liczbę pracowników firmy oraz ich sumaryczną pensję: SELECT COUNT(*) AS liczba, SUM(pensja) AS sumaryczna FROM personel; lub SELECT biuronr, COUNT(*) AS liczba, SUM(pensja) AS sumaryczna FROM personel GROUP BY biuronr; 4. Z podziałem na biura

56 56 mysql> SELECT COUNT(*) AS liczba, SUM(pensja) AS sumaryczna -> FROM personel; +--------+------------+ | liczba | sumaryczna | +--------+------------+ | 17 | 25800 | +--------+------------+ mysql> SELECT biuronr, COUNT(*) AS liczba, SUM(pensja) AS sumaryczna -> FROM personel -> GROUP BY biuronr; +---------+--------+------------+ | biuronr | liczba | sumaryczna | +---------+--------+------------+ | B002 | 3 | 3600 | | B003 | 4 | 6400 | | B004 | 2 | 3500 | | B005 | 3 | 4900 | | B006 | 3 | 4800 | | B007 | 2 | 2600 | +---------+--------+------------+

57 57 Dla każdej nieruchomości wynajmowanej więcej niż dwa razy, podaj ich liczbę oraz średnią czynszu: SELECT... FROM... GROUP BY... HAVING...; mysql> SELECT...; Ćwiczenia-5:

58 58 Dla każdej nieruchomości wynajmowanej więcej niż raz w 2014 roku, podaj ich liczbę oraz maksymalny czynsz: SELECT... FROM... WHERE... GROUP BY... HAVING...; mysql> SELECT...; Ćwiczenia-6: