Wydział Informatyki Politechnika Poznańska jerzy.nawrocki@put.poznan.pl Baza danych Bazy danych = zorganizowana kolekcja danych Bazy danych (2) Cel Agenda Przedstawić relacyjny model baz danych Era przed-relacyjna Relacyjne bazy danych SQL Bazy danych (3) Bazy danych (4) Model hierarchiczny Model hierarchiczny Ile osób jest zatrudnionych na PP? Name Bazy danych (5) Bazy danych (6) Bazy danych 1
Model hierarchiczny Model sieciowy Name IBM IMS Bazy danych (7) Charles Bachman CODASYL Bazy danych (8) Agenda Era przed-relacyjna Relacyjne bazy danych SQL Bazy danych (9) Edgar Frank Codd 1923-08-23: Portland, Dorset Studiował matematykę and chemię na Oxfordzie Pilot RAF-u 1948: IBM, New York 1963: Ph.D., Univ. of Michigan, Ann Arbor 1970: A Relational Model of Data for Large Shared Data Banks 1981: Turing Award 2003-04-18: Died in Williams Island, Florida (US) Bazy danych (10) Name Model hierarchiczny Dane + Kod zbyt silnie powiązane Bazy danych (11) Employment Worker Faculty 20 1 21 2 22 2 23 3 Model relacyjny Key 20 21 22 23 Ile osób pracuje na PP? SELECT COUNT(*) FROM ; Bazy danych (12) Bazy danych 2
Employment Worker Faculty 20 1 21 2 22 2 23 3 Ile osób pracuje na FI? Model relacyjny Key 20 21 22 23 SELECT COUNT(*) FROM Employment, WHERE.Name= FI AND.Key=Employment.Faculty; Bazy danych (13) Name Model sieciowy Bazy danych (14) Model sieciowy Model relacyjny Employment Worker Faculty 20 1 21 2 22 2 23 3 21 3 Key 20 21 22 23 Ile osób pracuje na PP? SELECT COUNT(*) FROM ; Bazy danych (15) Employment Worker Faculty 20 1 21 2 22 2 23 3 21 3 Ile osób pracuje na FI? Key 20 21 22 23 SELECT COUNT(*) FROM Employment, WHERE.Name= FI AND.Key=Employment.Faculty; Bazy danych (16) Podejście formalne Key 20 21 22 23 : Key x x Key = 0, 1, 2,... = {"a",.., "z", "aa",.., "zz",.., "A",.., "Z",.., "Aa",.., "Az",..} = {"a",.., "z", "aa",.., "zz",.., "A",.., "Z",.., "Aa",.., "Az",..} = { (20, "", ""), (21, "", ""),.., (23, "", "")} Bazy danych (17) Projekcja: SELECT FROM ; Podstawowe operacje Key 20 21 22 23 Bazy danych (18) Bazy danych 3
Podstawowe operacje Podstawowe operacje Selekcja: Key 20 21 22 23 Selekcja z projekcją: Key 20 21 22 23 SELECT * FROM WHERE = ; SELECT FROM WHERE = ; Key 20 22 Bazy danych (19) Bazy danych (20) Połączenie: SELECT Name, FROM, WHERE Dean=.Key; Model relacyjny Key 20 21 22 23 Name FEE FI FME Bazy danych (21) Agenda Era przed-relacyjna Relacyjne bazy danyc SQL Bazy danych (22) CREATE TABLE ( Key SERIAL, VARCHAR(40), VARCHAR(40) ); Podstawowe typy: SERIAL VARCHAR (n) CHAR (n) INTEGER NUMERIC (n.f) Tworzenie tabeli Key Bazy danych (23) INSERT INTO VALUES (, ); INSERT INTO VALUES (, ); INSERT INTO VALUES (, ); INSERT INTO VALUES (, ); Wstawianie danych Key 20 21 22 23 CREATE TABLE ( Key SERIAL, VARCHAR(40), VARCHAR(40) ); Bazy danych (24) Bazy danych 4
Sortowanie danych Sortowanie danych SELECT, FROM WHERE = ORDER BY ASC; Key 20 21 22 23 Key 20 22 SELECT, FROM WHERE = ORDER BY DESC; Key 20 21 22 23 Key 20 22 Bazy danych (25) Bazy danych (26) Praca domowa Elementy bez powtórzeń SELECT, FROM WHERE = ORDER BY ; Key 20 21 22 23 Jaki będzie wynik? Imiona pracowników? SELECT FROM ORDER BY ASC; Key 20 21 22 23 Bazy danych (27) Bazy danych (28) Imiona pracowników? SELECT DISTINCT FROM ORDER BY ASC; Elementy bez powtórzeń Key 20 21 22 23 Bazy danych (29) Imiona pracowników? SELECT DISTINCT FROM ORDER BY ASC; Jeśli nie podoba Ci się nazwa kolumny... Key 20 21 22 23 Bazy danych (30) Bazy danych 5
SELECT DISTINCT AS "First name" FROM ORDER BY ASC; Jeśli nie podoba Ci się nazwa kolumny... Key 20 21 22 23 First name Bazy danych (31) SELECT, FROM WHERE LIKE %ki ; Wzorce Key 20 21 22 23 Bazy danych (32) SELECT, FROM WHERE LIKE _a% ; Wzorce Key 20 21 22 23 Bazy danych (33) Imiona pracowników SELECT DISTINCT FROM ORDER BY ASC; Zapisywanie wyników w tabeli Key 20 21 22 23 WorkNams Bazy danych (34) Imiona pracowników CREATE TABLE WorkNams ( Key SERIAL, Name VARCHAR(40), ); INSERT INTO WorkNams (Name) SELECT DISTINCT FROM ORDER BY ASC; Zapisywanie wyników w tabeli Key 20 21 22 23 WorkNams Key Name 1 2 3 Bazy danych (35), nie UPDATE SET = WHERE = ; Aktualizacja danych Key 20 21 22 23 Bazy danych (36) Bazy danych 6
Aktualizacja danych Usuwanie wierszy, nie UPDATE SET = WHERE = ; Key 20 21 22 23 DELETE FROM WHERE = %ro% ; Key 20 21 22 23 Key 21 23 Bazy danych (37) Bazy danych (38) SELECT COUNT() FROM ; 20 170 21 90 22 140 23 160 count 4 SELECT COUNT(*) FROM ; 20 170 21 90 22 140 23 160 count 4 Bazy danych (39) Bazy danych (40) SELECT MIN(Hours) FROM ; 20 170 21 90 22 140 23 160 min 90 SELECT MAX(Hours) FROM ; 20 170 21 90 22 140 23 160 max 170 Bazy danych (41) Bazy danych (42) Bazy danych 7
SELECT SUM(Hours) FROM ; 20 170 21 90 22 140 23 160 sum 560 SELECT AVG(Hours) FROM ; 20 170 21 90 22 140 23 160 avg 140 Bazy danych (43) Bazy danych (44) Zagnieżdżanie zapytań 20 170 21 90 22 140 23 160 Dziękuję za uwagę SELECT * FROM WHERE Hours > (SELECT AVG(Hours) FROM ); 20 170 23 160 Bazy danych (45) Bazy danych (46) Bazy danych 8