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

2 Bazy danych - wykład 92 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 | row in set (0.00 sec) Automatyczne zwi ę kszanie warto ś ci Wstawienie pustego wiersza! A jednak co ś w tabeli jest!

3 Bazy danych - wykład 93 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 | rows in set (0.00 sec) Trzy puste wiersze W tabeli s ą teraz cztery wiersze

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

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

6 Bazy danych - wykład 96 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 | rows in set (0.00 sec) Wype ł nienie warto ś ciami z tabeli C1 Warto ś ci NULL, bo w C1 tylko jedna kolumna!

7 Bazy danych - wykład 97 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 | 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

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

9 Bazy danych - wykład 99 mysql> DELETE FROM C3 WHERE Nr=48; Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO C3 (Czas) VALUES (45); Query OK, 1 row affected (0.00 sec) mysql> SELECT * FROM C3 WHERE NR >= 20; | CZAS | Nr | | 15 | 20 | | 30 | 46 | | 90 | 47 | | 45 | 49 | 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!

10 Bazy danych - wykład 910 Programowanie wsadowe: mysql nazwa_pliku_wy command

11 Bazy danych - wykład 911 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.

12 Bazy danych - wykład 912 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 Wprowadzanie do tabeli danych uprzednio przygotowanych w pliku

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

14 Bazy danych - wykład 914 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 | | 1 | 330 | | 2 | 405 | | 3 | 465 | | 4 | 915 | | 5 | 660 | | 6 | 720 | | 7 | 585 | | 8 | 825 | | 9 | 480 | rows in set (0.01 sec)

15 Bazy danych - wykład 915 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 | | 2 | 405 | | 3 | 465 | | 4 | 915 | | 5 | 660 | | 6 | 720 | | 7 | 585 | | 8 | 825 | | 9 | 480 | rows in set (0.01 sec)

16 Bazy danych - wykład 916 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 | | 1 | 1 | 90 | | 1 | 2 | 195 | | 1 | 3 | 45 | | 1 | 4 | 315 | | 4 | 6 | 75 | | 4 | 7 | 45 | | 4 | 8 | 150 | | 4 | 9 | 150 | rows in set (0.00 sec) Niezbyt rozs ą dna kolejno ść …

17 Bazy danych - wykład 917 mysql> SELECT MONTH(Data) AS miesiac, KlientId, SUM(Czas) AS ChargedTime -> FROM czynnosci -> GROUP BY KlientId, miesiac; | miesiac | KlientId | ChargedTime | | 1 | 1 | 90 | | 2 | 1 | 180 | | 3 | 1 | 45 | | 4 | 1 | 15 | | 1 | 9 | 135 | | 2 | 9 | 15 | | 3 | 9 | 180 | | 4 | 9 | 150 | rows in set (0.01 sec)

18 Bazy danych - wykład 918 mysql> SELECT MONTH(Data) AS miesiac, KlientID, SUM(Czas) AS ChargedTime -> FROM czynnosci -> GROUP BY KlientId, miesiac -> WITH ROLLUP; | miesiac | KlientID | ChargedTime | | 1 | 1 | 90 | | 2 | 1 | 180 | | 3 | 1 | 45 | | 4 | 1 | 15 | | NULL | 1 | 330 | | 1 | 2 | 195 | | 2 | 2 | 45 | | 4 | 2 | 165 | | NULL | 2 | 405 | | NULL | 8 | 825 | | 1 | 9 | 135 | | 2 | 9 | 15 | | 3 | 9 | 180 | | 4 | 9 | 150 | | NULL | 9 | 480 | | NULL | NULL | 5385 | rows in set (0.01 sec) Z podsumowaniem w obr ę bie podgrup!

19 Bazy danych - wykład 919 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 ą : Obliczenie tego po stronie aplikacji jest proste. Jak jednak zrobi ć to w SQL? Szereg czasowy

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

21 Bazy danych - wykład 921 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 | | 1 | | | 5 | | | 2.2 | | | 0.8 | | | 4 | | | 3.1 | | | 3.9 | | | 2.7 | | | 3.1 | | | 0.9 | | rows in set (0.02 sec) Zmienna tymczasowa (nazwa zaczyna si ę Autoz łą czenie (self-join) Klauzula grupowania jest niezb ę dna Brzegi ź le obs ł ugiwane

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

23 Bazy danych - wykład 923 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 | | 5 | | | 2.2 | | | 0.8 | | | 4 | | | 3.1 | | | 3.9 | | | 2.7 | | | 3.1 | | rows in set (0.02 sec) Autoz łą czenie (self-join)

24 Bazy danych - wykład 924 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 | 1 | 1.0 | | 2 | 5 | 6.0 | | 3 | 2.2 | 8.2 | | 4 | 0.8 | 9.0 | | 5 | 4 | 13.0 | | 6 | 3.1 | 16.1 | | 7 | 3.9 | 20.0 | | 8 | 2.7 | 22.7 | | 9 | 3.1 | 25.8 | | 10 | 0.9 | 26.7 | rows in set (0.01 sec)

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

26 Bazy danych - wykład 926 mysql> SELECT Miasto FROM Jan -> INTERSECT -> SELECT Miasto FROM Maria; Nie dzia ł a w MySQL 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 | rows in set (0.00 sec) Iloczyn kartezja ń ski


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

Podobne prezentacje


Reklamy Google