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

Slides:



Advertisements
Podobne prezentacje
Podział i zastosowanie
Advertisements

Dr inż. Andrzej Szuwarzyński Dr inż. Marcin Forkiewicz
Bazy danych i inżynieria oprogramowania
Bazy danych II Instrukcja SELECT Piotr Górczyński 25/08/2001.
Bazy danych 9. SQL — Różności P. F. Góra semestr letni 2004/05
Bazy danych 8. SQL podstawy P. F. Góra semestr letni 2004/05.
Język SQL ma ciekawe możliwości tworzenia zapytań
Jan Aleksander Wierzbicki
Kwerendy i ich rodzaje Wybierające
MS Access 2003 Kwerendy Paweł Górczyński.
Bazy danych II Instrukcja INSERT Piotr Górczyński 25/08/2001.
25/08/ Bazy danych II Piotr Górczyński Instrukcja UPDATE.
Język SQL – zapytania zagnieżdżone (podzapytania)
Rozdział 2: Język bazy danych - SQL
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 2: Język bazy danych - SQL Proste zapytania.
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 3: Język bazy danych - SQL Funkcje grupowe.
Co to jest studium przypadku?
BIOSTATYSTYKA I METODY DOKUMENTACJI
SQL – Structured Query Language (2)
WYZWALACZE (TRIGGERY) Wyzwalacz jest specjalnym rodzajem procedury składowanej, która może być wykonana w odpowiedzi na jedną z trzech sytuacji: UPDATE.
SQL-owskie szlaki górskie
SQLDziałanie select * from tab_kredyt wyświetla wszystko z tab_kredyt select Kredytobiorca, Bank, rodzaj, data_zawarcia, klasyfikacja from tab_kredyt.
SQL select kredytobiorca,bank, rodzaj, data_zawarcia, klasyfikacja,kwota, terminzapadalnosci-data_zawarcia iledni from tab_kredyt where (terminzapadalnosci-data_zawarcia)>1095.
Wymagania do projektu i realizacji baz danych:
POWTÓRZENIE Techniki zbierania informacji : Analiza dokumentacji
Budowa wyrażeń w SQL: Wyrażenia języka SQL występują w instrukcji SELECT, oraz służą do formułowania warunków podawanych w klauzuli WHERE instrukcji takich,
POWTÓRZENIE definicja danych; opcje definicji kolumn;
POWTÓRZENIE Główne elementy składni SQL: Zasady ogólne
POWTÓRZENIE Kontrola integralności danych; dane wymagane;
Podzapytania – zapytania SELECT umieszczone w innym zapytaniu SELECT
POWTÓRZENIE Metodologia : Pojęcia:
Zapytania SQL: wydajność i optymalizacja
BD-LAB6 Wojciech Pieprzyca
WYKONYWANIE ZAPYTAŃ Przygotował Lech Banachowski na podstawie: 1.Raghu Ramakrishnan, Johannes Gehrke, Database Management Systems, McGrawHill, 2000 (książka.
Język SQL – podstawy zapytań
Język SQL – ciąg dalszy DML (Data Manipulation Language)
Język SQL (Structured Query Language) DDL (Data Definition Language)
Przykład włamania do aplikacji internetowej poprzez modyfikację zapytań SQL Skrypty ASP Serwer bazy danych MS SQL Server Piotr Kuźniacki BDi.
SQL ("Structured Query Language" - "Strukturalny Język Zapytań"), opracowany przez firmę IBM jest rozwinięciem języka SEQUEL (“Structured English QUEry.
Structured Query Language
dr inż. Piotr Muryjas Wyższa Szkoła Przedsiębiorczości i Administracji
OPERACJA DZIELENIA W SQL
SQL – zapytania posumowanie
SQL – Structured Query Language (3)
Przetwarzanie w oknie - nowa siła zapytań
ZASTOSOWANIE FUNKCJI W EXCELU
SQL – podstawowe funkcje
Wykład 4 Prowadzący: dr Paweł Drozda. Trzy typy instrukcji Wstawianie – INSERT INTO Usuwanie – DELETE FROM Aktualizacje - UPDATE dr Paweł Drozda.
Arkusze kalkulacyjne, część 3
Łączenie tabel Odpowiedzi.
Wyprowadzanie informacji z bazy danych - kwerendy wybierające Marzena Nowakowska Katedra Informatyki Stosowanej, WZiMK, PŚk.
PL/SQL – dalsza wędrówka
Język manipulacji danymi – SQL cz. I
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski 1 informatyka +
Bazy Danych W04: JOIN (złączenia) Wojciech St
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski 1 informatyka +
Komendy SQL do pracy z danymi
Język SQL – polecenie Select
Relacja (ang.relation) Po podzieleniu danych na tabele i zdefiniowaniu pól kluczy podstawowych trzeba wprowadzić do systemu bazy danych informacje na temat.
TEMAT: ACCESS - KWERENDY.
Funkcje w Excelu Wyrażenia, które pobierają wartość lub wartości z komórek, przeprowadzają oprację i zwracają wartość. Funkcje upraszczają i skracają formuły.
Excel 2007 dla średniozaawansowanych Zajęcia z Prowadzący: Artur Kołos.
1 Definicja danych: Do utworzenia tabeli służy instrukcja CREATE TABLE, wymagająca podania nazwy tworzonej tabeli, nazwy każdej kolumny w tej tabeli, typu.
1 Instrukcja SELECT : SELECT[DISTINCT  ALL] {*  [wyrażenie_kolumnowe [AS nowa_nazwa]],[…]} FROMNazwaTabeli [alias],[...] [WHEREwarunek_selekcji_wierszy]
1 Procedury i funkcje CREATE PROCEDURE nazwa ([proc_parameter[,...]]) [characteristic...] routine_body CREATE FUNCTION nazwa ([func_parameter[,...]]) RETURNS.
Podstawy SQL.
Widoki (views) - Perspektywy:
Ćwiczenie 1 Podaj liczbę wizyt w nieruchomościach w kolejnych dniach poprzedniego miesiąca kalendarzowego: SELECT data_wizyty, COUNT(*) AS liczba FROM.
SYSTEMY BAZ I HURTOWNI DANYCH
Własności relacji: Baza danych jest zbiorem relacji, o następujących własnościach: każda relacja w bazie danych jest jednoznacznie określona przez swoją.
Zapis prezentacji:

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

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

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 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 | | 70 | | SB21 | Daniel | Frankowski | kierownik | | 52 | | SB23 | Anna | Biały | asystent | | 50 | | SB30 | Katarzyna | Michalska | dyrektor | | 50 | | SG20 | Karolina | Mucha | dyrektor | | 57 | | SL20 | Paweł | Nowak | kierownik | | 48 | | SL21 | Paweł | Kowalski | asystent | | 41 | | SL30 | Jan | Wiśniewski | dyrektor | | 65 | | SL31 | Julia | Lisicka | asystent | | 45 | | SL32 | Michał | Brzęczyk | asystent | | 51 | rows in set (0.04 sec)

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 | | 70 | | SB21 | Daniel | Frankowski | kierownik | | 52 | | SB23 | Anna | Biały | asystent | | 50 | | SB30 | Katarzyna | Michalska | dyrektor | | 50 | | SG20 | Karolina | Mucha | dyrektor | | 57 | | SL20 | Paweł | Nowak | kierownik | | 48 | | SL21 | Paweł | Kowalski | asystent | | 41 | | SL30 | Jan | Wiśniewski | dyrektor | | 65 | | SL31 | Julia | Lisicka | asystent | | 45 | | SL32 | Michał | Brzęczyk | asystent | | 51 | rows in set (0.04 sec)

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 | rows in set (0.01 sec)

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 | | | B002 | Cicha 56 | Łomża | | | B003 | Mała 63 | Białystok | | | B005 | Dobra 22 | Łomża | | | B006 | Słoneczna 55 | Białystok | | rows in set (0.00 sec)

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 | | | B002 | Cicha 56 | Łomża | | | B003 | Mała 63 | Białystok | | | B005 | Dobra 22 | Łomża | | | B006 | Słoneczna 55 | Białystok | | rows in set (0.40 sec)

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 | | | B007 | Akacjowa 16 | Augustów | | | B010 | Świerkowa 5 | Woźniewo | | | B011 | Olchowa 12 | Mińsk | NULL | rows in set (0.02 sec)

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 | rows in set (0.00 sec)

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 | rows in set (0.00 sec)

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 | rows in set (0.01 sec)

13 SELECT personelNr, imie, nazwisko, stanowisko, pensja FROM personel WHERE pensja>=2000 AND pensja<=3000; lub: mysql> SELECT personelNr, imie, nazwisko, stanowisko, pensja -> FROM personel -> WHERE pensja>=2000 AND pensja<=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 | rows in set (0.00 sec)

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 | rows in set (0.00 sec) Selekcja czynszu z zakresu oraz miast

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 | Białystok, Wodna 63 | | | CO87 | Karol | Frankowski | Białystok, Agrestowa 6 | | | CO93 | Tomasz | Szymański | Białystok, Parkowa 12 | | rows in set (0.00 sec)

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 mysql> SELECT klientNr, data_wizyty, uwagi -> FROM wizyta -> WHERE nieruchomoscNr='B4' AND uwagi IS NULL; | klientNr | data_wizyty | uwagi | | CR52 | | NULL | 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 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 | | brak jadalni | | CR53 | | za daleko | rows in set (0.01 sec)

19 Zawartość tabeli wizyta : mysql> SELECT * FROM wizyta; | klientnr | nieruchomoscnr | data_wizyty | uwagi | | CR51 | A14 | | za mały | | CR51 | B4 | | brak jadalni | | CR52 | A14 | | brak jadalni | | CR52 | B36 | | NULL | | CR52 | B4 | | NULL | | CR53 | B4 | | za daleko | rows in set (0.00 sec)

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 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 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 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 Diagram związków :

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

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 | row in set (0.00 sec)

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 | | rows in set (0.00 sec)

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 | row in set (0.00 sec)

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 | row in set (0.00 sec)

30 Zawartość tabeli wizyta : mysql> SELECT * FROM wizyta; | klientnr | nieruchomoscnr | data_wizyty | uwagi | | CR51 | B21 | | | | CR52 | A14 | | brak jadalni | | CR51 | A14 | | za maĹy | | CR51 | L33 | | | | CR52 | B18 | | NULL | | CR52 | B17 | | NULL | | CR53 | A14 | | NULL | | CO17 | B17 | | NULL | | CO18 | B21 | | NULL |... | CR53 | L33 | | za daleko | | 1 | A14 | | aaa | | 1 | B17 | | NULL | rows in set (0.00 sec)

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 | | row in set (0.00 sec)

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 | | | row in set (0.00 sec)

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 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 | rows in set (0.00 sec)

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 | | | B002 | 3 | | | B003 | 4 | | | B005 | 3 | | rows in set (0.00 sec)

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 | rows in set (0.00 sec) SELECT biuronr, personelnr, COUNT(*) AS liczba FROM nieruchomosc GROUP BY biuronr, personelnr;

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 | rows in set (0.00 sec)

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

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

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

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

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 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 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 | | | B003 | 4 | | | B005 | 3 | | rows in set (0.00 sec)

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 | | | B003 | 4 | | | B005 | 3 | | rows in set (0.00 sec) Z wykorzystaniem alias’u:

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 | | 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 | | row in set (0.00 sec)

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 mysql> SELECT biuroNr, miasto, ulica, kod -> FROM biuro -> WHERE miasto like 'Grajewo'; | biuroNr | miasto | ulica | kod | | B004 | Grajewo | Miodowa 32 | | mysql> SELECT biuroNr, miasto, ulica, kod -> FROM biuro -> GROUP BY miasto; | biuroNr | miasto | ulica | kod | | B007 | Augustów | Akacjowa 16 | | | B001 | Białystok | Piękna 46 | | | B004 | Grajewo | Miodowa 32 | | | B002 | Łomża | Cicha 56 | |

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

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 mysql> SELECT count(*) -> FROM biuro -> WHERE miasto like 'Grajewo'; | count(*) | | 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 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 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 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 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 mysql> SELECT COUNT(*) AS liczba, SUM(pensja) AS sumaryczna -> FROM personel; | liczba | sumaryczna | | 17 | | 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 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 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: