Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Bazy danych 9. SQL — Różności P. F. Góra semestr letni 2004/05

Podobne prezentacje


Prezentacja na temat: "Bazy danych 9. SQL — Różności P. F. Góra semestr letni 2004/05"— Zapis prezentacji:

1 Bazy danych 9. SQL — Różności P. F. Góra semestr letni 2004/05
semestr letni 2004/05

2 Pewne modyfikacje zapytania CREATE TABLE
mysql> CREATE TABLE C1 -> (Nr INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT); Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO C1 VALUES (); Query OK, 1 row affected (0.00 sec) mysql> SELECT * FROM C1; +----+ | Nr | | 1 | 1 row in set (0.00 sec) Automatyczne zwiększanie wartości A jednak coś w tabeli jest! Wstawienie pustego wiersza! Bazy danych - wykład 9

3 W tabeli są teraz cztery wiersze
Trzy „puste” wiersze mysql> INSERT INTO C1 VALUES (), (), (); Query OK, 3 rows affected (0.01 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM C1; +----+ | Nr | | 1 | | 2 | | 3 | | 4 | 4 rows in set (0.00 sec) W tabeli są teraz cztery wiersze Bazy danych - wykład 9

4 Do kolumny z AUTO_INCREMENT wolno wprowadzać wartości „ręcznie”
mysql> INSERT INTO C1 VALUES (18); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO C1 VALUES (); mysql> SELECT * FROM C1; +----+ | Nr | | 1 | | 2 | | 3 | | 4 | | 18 | | 19 | 6 rows in set (0.01 sec) Bazy danych - wykład 9

5 mysql> INSERT INTO C1 VALUES (8);
Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO C1 VALUES (); mysql> SELECT * FROM C1; +----+ | Nr | | 1 | | 2 | | 3 | | 4 | | 8 | | 18 | | 19 | | 20 | 8 rows in set (0.00 sec) Bazy danych - wykład 9

6 mysql> CREATE TABLE C2
-> (Nr INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, -> Czas SMALLINT) -> SELECT * FROM C1; Query OK, 8 rows affected (1.31 sec) Records: 8 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM C2; | Czas | Nr | | NULL | 1 | | NULL | 2 | | NULL | 3 | | NULL | 4 | | NULL | 8 | | NULL | 18 | | NULL | 19 | | NULL | 20 | 8 rows in set (0.00 sec) Wypełnienie wartościami z tabeli C1 Wartości NULL, bo w C1 tylko jedna kolumna! Bazy danych - wykład 9

7 mysql> CREATE TABLE C3
-> (Nr INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, -> Czas SMALLINT NOT NULL DEFAULT 15) -> SELECT * FROM C1; Query OK, 8 rows affected (0.01 sec) Records: 8 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM C3; | Czas | Nr | | 15 | 1 | | 15 | 2 | | 15 | 3 | | 15 | 4 | | 15 | 8 | | 15 | 18 | | 15 | 19 | | 15 | 20 | 8 rows in set (0.00 sec) Wartość domyślna Zawsze lepiej dać NOT NULL, jeśli nie spowoduje to błędu Kolumna wypełniona wartościami domyślnymi Bazy danych - wykład 9

8 mysql> INSERT INTO C3 (Nr,Czas) VALUES (46,30);
Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO C3 (Czas) VALUES (90); mysql> INSERT INTO C3 VALUES (); mysql> SELECT * FROM C3 WHERE NR >= 20; | CZAS | Nr | | 15 | 20 | | 30 | 46 | | 90 | 47 | | 15 | 48 | 4 rows in set (0.00 sec) stare Ręcznie wstawiony wiersz Auto_increment atrybutu Nr Auto_increment atrybutu Nr Domyślna wartość atrybutu Czas Bazy danych - wykład 9

9 mysql> DELETE FROM C3 WHERE Nr=48;
Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO C3 (Czas) VALUES (45); mysql> SELECT * FROM C3 WHERE NR >= 20; | CZAS | Nr | | 15 | 20 | | 30 | 46 | | 90 | 47 | | 45 | 49 | 4 rows in set (0.00 sec) Mimo iż krotki o Nr=48 już nie ma, SQL pamięta jaka była największa wartość tego atrybutu! Bazy danych - wykład 9

10 Programowanie wsadowe: mysql < nazwa_pliku_we > nazwa_pliku_wy
command Bazy danych - wykład 9

11 Projekt „Kancelaria” (1)
Kancelaria adwokacka gromadzi informacje o czynnościach wykonanych na rzecz klientów. Każda czynność ma swój unikalny numer, datę, numer klienta, kod wykonującego ją pracownika, czas trwania czynności. Klient jest obciążany proporcjonalnie do czasu, jaki poświęcili jego sprawom pracownicy kancelarii. Bazy danych - wykład 9

12 Wprowadzanie do tabeli danych uprzednio przygotowanych w pliku
mysql> CREATE TABLE czynnosci -> (Nr INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, -> Data DATE NOT NULL, -> KlientId SMALLINT UNSIGNED NOT NULL, -> Pracownik CHAR(3) NOT NULL, -> Czas SMALLINT UNSIGNED NOT NULL DEFAULT 15, -> Opis VARCHAR(24)); Query OK, 0 rows affected (0.06 sec) mysql> LOAD DATA INFILE 'c://wyklady//bazy//kanc//czyn.txt' -> INTO TABLE czynnosci; Query OK, 120 rows affected, 120 warnings (0.44 sec) Records: 120 Deleted: 0 Skipped: 0 Warnings: 120 Bazy danych - wykład 9

13 mysql> SELECT * FROM czynnosci ORDER BY Data LIMIT 10;
| Nr | Data | KlientId | Pracownik | Czas | Opis | | 48 | | | KRZ | 60 | Kwerenda biblioteczna | | 103 | | | ZOF | 90 | Udział w rozprawie | | 57 | | | ANN | 45 | Kwerenda biblioteczna | | 78 | | | PIO | 30 | Konsultacje specjalisty | | 39 | | | PIO | 45 | Czytanie akt | | 27 | | | JOZ | 30 | Rozmowa z klientem | | 52 | | | JAN | 45 | Czytanie akt | | 55 | | | JOZ | 90 | Udział w rozprawie | | 113 | | | ZOF | 30 | Czytanie akt | | 22 | | | KRZ | 15 | Rozmowa z klientem | 10 rows in set (0.01 sec) Bazy danych - wykład 9

14 Ile czynności poświęciliśmy poszczególnym klientom?
mysql> SELECT KlientId, SUM(Czas) AS ChargedTime -> FROM czynnosci -> GROUP BY KlientId -> ORDER BY KlientId; | KlientId | ChargedTime | | | | | | | | | | | | | | | | | | | | | | | | | | | | 9 rows in set (0.01 sec) Bazy danych - wykład 9

15 Ile czynności poświęciliśmy poszczególnym klientom
Ile czynności poświęciliśmy poszczególnym klientom? Uwzględniamy tylko klientów, dla których przepracowaliśmy więcej niż 400 minut. mysql> SELECT KlientId, SUM(Czas) AS ChargedTime -> FROM czynnosci -> GROUP BY KlientId -> HAVING ChargedTime > 400 -> ORDER BY KlientId; | KlientId | ChargedTime | | | | | | | | | | | | | | | | | | | | | | | | | 8 rows in set (0.01 sec) Bazy danych - wykład 9

16 Niezbyt rozsądna kolejność…
Ile czynności poświęciliśmy poszczególnym klientom w poszczególnych miesiącach? mysql> SELECT MONTH(Data) AS miesiac, KlientId, SUM(Czas) AS ChargedTime -> FROM czynnosci -> GROUP BY miesiac, KlientId; | miesiac | KlientId | ChargedTime | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 35 rows in set (0.00 sec) Niezbyt rozsądna kolejność… Bazy danych - wykład 9

17 mysql> SELECT MONTH(Data) AS miesiac, KlientId, SUM(Czas) AS ChargedTime
-> FROM czynnosci -> GROUP BY KlientId, miesiac; | miesiac | KlientId | ChargedTime | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 35 rows in set (0.01 sec) Bazy danych - wykład 9

18 Z podsumowaniem w obrębie podgrup!
mysql> SELECT MONTH(Data) AS miesiac, KlientID, SUM(Czas) AS ChargedTime -> FROM czynnosci -> GROUP BY KlientId, miesiac -> WITH ROLLUP; | miesiac | KlientID | ChargedTime | | | | | | | | | | | | | | | | | | NULL | | | | | | | | | | | | | | | | NULL | | | | NULL | | | | | | | | | | | | | | | | | | | | NULL | | | | NULL | NULL | | 45 rows in set (0.01 sec) Z podsumowaniem w obrębie podgrup! Bazy danych - wykład 9

19 Projekt „średnia ruchoma”
W tabeli mamy zgromadzone dane numeryczne, indeksowane „czasem” – na przykład kolejne dane giełdowe, kolejne odczyty temperatury, dane o sprzedaży z kolejnych miesięcy, stężenie metanu na kolejnych metrach odwiertu itp. W celu ich wygładzenia, należy obliczyć tak zwaną średnią ruchomą: Szereg czasowy Obliczenie tego „po stronie aplikacji” jest proste. Jak jednak zrobić to w SQL? Bazy danych - wykład 9

20 Mamy taką oto tabelę: mysql> DESCRIBE W;
| Field | Type | Null | Key | Default | Extra | | nr | int(10) unsigned | NO | PRI | | | | wartosc | float | NO | | | | 2 rows in set (0.00 sec) mysql> SELECT * FROM W; | nr | wartosc | | 1 | | | 2 | | | 3 | | | 4 | | | 5 | | | 6 | | | 7 | | | 8 | | | 9 | | | 10 | | 10 rows in set (0.00 sec) Bazy danych - wykład 9

21 Brzegi źle obsługiwane
Zmienna tymczasowa (nazwa zaczyna się od Mysql> = 3; mysql> SELECT x.wartosc, FORMAT(AVG(y.wartosc),4) AS Srednia -> FROM W as x, W as y -> WHERE y.nr >= x.nr AND y.nr <= x.nr -> GROUP BY x.nr; | wartosc | Srednia | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 10 rows in set (0.02 sec) Autozłączenie (self-join) Brzegi źle obsługiwane Klauzula grupowania jest niezbędna Bazy danych - wykład 9

22 Wprowadzam nowe zmienne tymczasowe:
mysql> = (SELECT MIN(nr) FROM W) -1; Query OK, 0 rows affected (0.00 sec) mysql> = (SELECT MAX(nr) FROM W) + 1; | | | | 1 row in set (0.00 sec) Bazy danych - wykład 9

23 Autozłączenie (self-join)
mysql> SELECT x.wartosc, FORMAT(AVG(y.wartosc),4) AS Srednia -> FROM W as x, W as y -> WHERE y.nr >= x.nr AND y.nr <= x.nr -> AND x.nr AND x.nr -> GROUP BY x.nr; | wartosc | Srednia | | | | | | | | | | | | | | | | | | | | | | | | | 8 rows in set (0.02 sec) Autozłączenie (self-join) Bazy danych - wykład 9

24 Projekt „suma narastająca”
mysql> SELECT x.nr, x.wartosc, FORMAT(SUM(y.wartosc),1) AS RunningTotal -> FROM W AS x, W AS y -> WHERE y.nr <= x.nr -> GROUP BY x.nr; | nr | wartosc | RunningTotal | | 1 | | | | 2 | | | | 3 | | | | 4 | | | | 5 | | | | 6 | | | | 7 | | | | 8 | | | | 9 | | | | 10 | | | 10 rows in set (0.01 sec) Bazy danych - wykład 9

25 Inne proste złączenia mysql> SELECT * FROM Jan;
| Data | Miasto | | | Kalisz | | | Poznan | | | Gniezno | 3 rows in set (0.00 sec) mysql> SELECT * FROM Maria; | Data | Miasto | | | Kalisz | | | Torun | | | Gniezno | | | Bydgoszcz | 4 rows in set (0.00 sec) mysql> SELECT Miasto FROM Jan -> UNION -> SELECT Miasto FROM Maria; | Miasto | | Kalisz | | Poznan | | Gniezno | | Torun | | Bydgoszcz | 5 rows in set (0.00 sec) mysql> SELECT Miasto FROM Jan -> UNION ALL -> SELECT Miasto FROM Maria; | Miasto | | Kalisz | | Poznan | | Gniezno | | Torun | | Bydgoszcz | 7 rows in set (0.00 sec) Bazy danych - wykład 9

26 mysql> SELECT Miasto FROM Jan -> INTERSECT
-> SELECT Miasto FROM Maria; Nie działa w MySQL Iloczyn kartezjański mysql> SELECT Jan.Data AS JanData, Jan.Miasto AS JanMiasto, -> Maria.Data AS MariaData, Maria.Miasto AS MariaMiasto -> FROM Jan CROSS JOIN Maria; | JanData | JanMiasto | MariaData | MariaMiasto | | | Kalisz | | Kalisz | | | Poznan | | Kalisz | | | Gniezno | | Kalisz | | | Kalisz | | Torun | | | Poznan | | Torun | | | Gniezno | | Torun | | | Kalisz | | Gniezno | | | Poznan | | Gniezno | | | Gniezno | | Gniezno | | | Kalisz | | Bydgoszcz | | | Poznan | | Bydgoszcz | | | Gniezno | | Bydgoszcz | 12 rows in set (0.00 sec) Bazy danych - wykład 9


Pobierz ppt "Bazy danych 9. SQL — Różności P. F. Góra semestr letni 2004/05"

Podobne prezentacje


Reklamy Google