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 http://th-www.if.uj.edu.pl/zfs/gora/ 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 | +----+ 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 | +----+ 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 | +----+ 6 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 | +----+ 8 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 | +------+----+ 8 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 | +------+----+ 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

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 | +------+----+ 4 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 | +------+----+ 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!

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 | 2005-01-01 | 6 | KRZ | 60 | Kwerenda biblioteczna | | 103 | 2005-01-01 | 4 | ZOF | 90 | Udział w rozprawie | | 57 | 2005-01-02 | 2 | ANN | 45 | Kwerenda biblioteczna | | 78 | 2005-01-05 | 7 | PIO | 30 | Konsultacje specjalisty | | 39 | 2005-01-05 | 6 | PIO | 45 | Czytanie akt | | 27 | 2005-01-07 | 6 | JOZ | 30 | Rozmowa z klientem | | 52 | 2005-01-08 | 5 | JAN | 45 | Czytanie akt | | 55 | 2005-01-08 | 1 | JOZ | 90 | Udział w rozprawie | | 113 | 2005-01-10 | 7 | ZOF | 30 | Czytanie akt | | 22 | 2005-01-10 | 5 | KRZ | 15 | Rozmowa z klientem | +-----+------------+----------+-----------+------+--------------------------+ 10 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 | +----------+-------------+ 9 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 | +----------+-------------+ 8 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 | +---------+----------+-------------+ 35 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 | +---------+----------+-------------+ 35 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 | +---------+----------+-------------+ 45 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 | | | | +---------+------------------+------+-----+---------+-------+ 2 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 | +----+---------+ 10 rows in set (0.00 sec) Mamy tak ą oto tabel ę :

21 Bazy danych - wykład 921 Mysql> SET @p = 3; mysql> SELECT x.wartosc, FORMAT(AVG(y.wartosc),4) AS Srednia -> FROM W as x, W as y -> WHERE y.nr >= x.nr - @p/2 AND y.nr <= x.nr + @p/2 -> GROUP BY x.nr; +---------+---------+ | wartosc | Srednia | +---------+---------+ | 1 | 3.0000 | | 5 | 2.7333 | | 2.2 | 2.6667 | | 0.8 | 2.3333 | | 4 | 2.6333 | | 3.1 | 3.6667 | | 3.9 | 3.2333 | | 2.7 | 3.2333 | | 3.1 | 2.2333 | | 0.9 | 2.0000 | +---------+---------+ 10 rows in set (0.02 sec) Zmienna tymczasowa (nazwa zaczyna si ę od @) Autoz łą czenie (self-join) Klauzula grupowania jest niezb ę dna Brzegi ź le obs ł ugiwane

22 Bazy danych - wykład 922 mysql> SET @Dolny = (SELECT MIN(nr) FROM W) -1; Query OK, 0 rows affected (0.00 sec) mysql> SET @Gorny = (SELECT MAX(nr) FROM W) + 1; Query OK, 0 rows affected (0.00 sec) mysql> SELECT @Dolny, @Gorny; +--------+--------+ | @Dolny | @Gorny | +--------+--------+ | 0 | 11 | +--------+--------+ 1 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 - @p/2 AND y.nr <= x.nr + @p/2 -> AND x.nr - @p/2 >= @Dolny AND x.nr + @p/2 <= @Gorny -> GROUP BY x.nr; +---------+---------+ | wartosc | Srednia | +---------+---------+ | 5 | 2.7333 | | 2.2 | 2.6667 | | 0.8 | 2.3333 | | 4 | 2.6333 | | 3.1 | 3.6667 | | 3.9 | 3.2333 | | 2.7 | 3.2333 | | 3.1 | 2.2333 | +---------+---------+ 8 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 | +----+---------+--------------+ 10 rows in set (0.01 sec)

25 Bazy danych - wykład 925 Inne proste z łą czenia mysql> SELECT * FROM Jan; +------------+---------+ | Data | Miasto | +------------+---------+ | 2005-04-16 | Kalisz | | 2005-04-28 | Poznan | | 2005-05-12 | Gniezno | +------------+---------+ 3 rows in set (0.00 sec) mysql> SELECT * FROM Maria; +------------+-----------+ | Data | Miasto | +------------+-----------+ | 2004-04-03 | Kalisz | | 2004-04-16 | Torun | | 2004-04-29 | Gniezno | | 2004-05-08 | 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 | | Kalisz | | Torun | | Gniezno | | Bydgoszcz | +-----------+ 7 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 | +------------+-----------+------------+-------------+ | 2005-04-16 | Kalisz | 2004-04-03 | Kalisz | | 2005-04-28 | Poznan | 2004-04-03 | Kalisz | | 2005-05-12 | Gniezno | 2004-04-03 | Kalisz | | 2005-04-16 | Kalisz | 2004-04-16 | Torun | | 2005-04-28 | Poznan | 2004-04-16 | Torun | | 2005-05-12 | Gniezno | 2004-04-16 | Torun | | 2005-04-16 | Kalisz | 2004-04-29 | Gniezno | | 2005-04-28 | Poznan | 2004-04-29 | Gniezno | | 2005-05-12 | Gniezno | 2004-04-29 | Gniezno | | 2005-04-16 | Kalisz | 2004-05-08 | Bydgoszcz | | 2005-04-28 | Poznan | 2004-05-08 | Bydgoszcz | | 2005-05-12 | Gniezno | 2004-05-08 | Bydgoszcz | +------------+-----------+------------+-------------+ 12 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