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

Slides:



Advertisements
Podobne prezentacje
Przykład liczbowy Rozpatrzmy dwuwymiarową zmienną losową (X,Y), gdzie X jest liczbą osób w rodzinie, a Y liczbą izb w mieszkaniu. Niech f.r.p. tej zmiennej.
Advertisements

Bazy danych 4. Algebra relacji P. F. Góra
Podział i zastosowanie
Skrypty, procedury przechowywane i wyzwalane
SQL – Strukturalny język zapytań
Bazy danych II Instrukcja SELECT Piotr Górczyński 25/08/2001.
Język SQL Część II.
Bazy danych - SQL.
Domy Na Wodzie - metoda na wlasne M
Bazy danych 10. Z łą czenia i transakcje P. F. Góra semestr letni 2004/05.
Bazy danych 7. Postaci normalne P. F. Góra semestr letni 2004/05
Bazy danych 8. SQL podstawy P. F. Góra semestr letni 2004/05.
4. Relacyjny model baz danych
Relacyjne Bazy Danych Wykład 02/03 Wojciech St
Język SQL ma ciekawe możliwości tworzenia zapytań
Bazy danych II Instrukcja INSERT Piotr Górczyński 25/08/2001.
25/08/ Bazy danych II Piotr Górczyński MS Access – Action Query.
NOWE TECHNOLOGIE NA USŁUGACH EDUKACJI Publiczna Szkoła Podstawowa nr 3 w Grodkowie Zajęcia w ramach projektu NTUE.
Bieg na dystansie 400m Letnie Igrzyska olimpijskie M ęż czy ź niKobiety Seul ,13 s50,23 s Barcelona – ,79 s48,16 s Atlanta.
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 9: Język manipulowania danymi DML (Data Manipulation Language)
WekaSQL Język i aplikacja przetwarzania oraz eksploracji danych.
Co to jest studium przypadku?
Język definicji danych (Data Definition Language)
Język definicji danych (Data Definition Language)
WYZWALACZE (TRIGGERY) Wyzwalacz jest specjalnym rodzajem procedury składowanej, która może być wykonana w odpowiedzi na jedną z trzech sytuacji: UPDATE.
SQL select kredytobiorca,bank, rodzaj, data_zawarcia, klasyfikacja,kwota, terminzapadalnosci-data_zawarcia iledni from tab_kredyt where (terminzapadalnosci-data_zawarcia)>1095.
POWTÓRZENIE Główne elementy składni SQL: Zasady ogólne
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 – ciąg dalszy DML (Data Manipulation Language)
Język SQL (Structured Query Language) DDL (Data Definition Language)
SQL – zapytania posumowanie
SQL – Structured Query Language (3)
Przetwarzanie w oknie - nowa siła zapytań
Ogólnopolski Konkurs Wiedzy Biblijnej Analiza wyników IV i V edycji Michał M. Stępień
Tworzenie bazy danych – mySQL
Instrukcje: CREATE, INSERT, UPDATE, DELETE, DROP
SQL – Structured Query Language (1)
AKASA Bank Sebastian Marchel Anna Karpińska Anna Matusiewicz
SYSTEMY TELEINFORMATYCZNE
MySQL bazy danych dla witryny
SQL - Structured Query Language
Ze szczególnym uwzględnieniem stosowanych ćwiczeń specjalnych OPRACOWAŁ Z.LIPIŃSKI.
„Klucz do uczenia się” L.Wygotskiego
1. Pomyśl sobie liczbę dwucyfrową (Na przykład: 62)
Asystent Rejestr Umów.
Jak zacząć w MS SQL? USE master; GO IF DB_ID (Nbaza') IS NOT NULL DROP DATABASE baza; GO CREATE DATABASE baza; GO USE baza; GO.
Spływ należności w Branży Elektrycznej
SYSTEMY TELEINFORMATYCZNE
EGZAMINU GIMNAZJALNEGO 2013
EcoCondens Kompakt BBK 7-22 E.
SQL – część II.
MODU Ł II- KUPUJESZ? Dlaczego chcesz kupi ć ? (25) – Czy jeste ś gotowy na zakup? Sk ą d wiesz na co Ci ę sta ć ? Kryteria wyboru- matryca.
WYNIKI EGZAMINU MATURALNEGO W ZESPOLE SZKÓŁ TECHNICZNYCH
1 SBD, L.Banachowski Podstawy SQL - języka relacyjnych i obiektowo-relacyjnych baz danych (SQL2, SQL'1999, Oracle) Powtórzenie wyk ł adu 3.
Testogranie TESTOGRANIE Bogdana Berezy.
Jak Jaś parował skarpetki Andrzej Majkowski 1 informatyka +
Bazy Danych W04: JOIN (złączenia) Wojciech St
1 SBD, L.Banachowski Zaawansowane cechy SQL Powtórzenie wyk ł adu 5.
Autor: Damian Urbańczyk
Elementy geometryczne i relacje
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski 1 informatyka +
Strategia pomiaru.
LO ŁobżenicaWojewództwoPowiat pilski 2011r.75,81%75,29%65,1% 2012r.92,98%80,19%72,26% 2013r.89,29%80,49%74,37% 2014r.76,47%69,89%63,58% ZDAWALNOŚĆ.
1 SBD, L.Banachowski Oprogramowanie strony serwera cz. 1 Powtórzenie wyk ł adu 6.
Komendy SQL do pracy z danymi
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.
Wybieranie wierszy: 1 Warunek WHERE Rodzaje warunków: - liczbowe - liczbowe z zakresu - znakowe.
Widoki (views) - Perspektywy:
J2EE: Bazy danych c.d. Język zapytań EJB QL.
Zapis prezentacji:

Bazy danych 9. SQL — Różności P. F. Góra semestr letni 2004/05 http://th-www.if.uj.edu.pl/zfs/gora/ semestr letni 2004/05

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 | | 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ść… Bazy danych - wykład 9

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

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

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

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

Brzegi źle obsługiwane Zmienna tymczasowa (nazwa zaczyna się od „@”) 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) Autozłączenie (self-join) Brzegi źle obsługiwane Klauzula grupowania jest niezbędna Bazy danych - wykład 9

Wprowadzam nowe zmienne tymczasowe: 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; mysql> SELECT @Dolny, @Gorny; +--------+--------+ | @Dolny | @Gorny | | 0 | 11 | 1 row in set (0.00 sec) Bazy danych - wykład 9

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 - @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) Bazy danych - wykład 9

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

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 | | Torun | | Bydgoszcz | 7 rows in set (0.00 sec) Bazy danych - wykład 9

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