Adatbázis rendszerek Molnár Bence Szerkesztette: Koppányi Zoltán
A mai órán
A mai órán SQL (és ami mögötte van) Mi lesz a ZH-ban?
SQL
Történet 1970-es évek eleje IBM SEQUEL (Structured English QUery Languge) Structured/Standard Query Language 1986-tól ANSI, 1987-től ISO szabvány SQL2 ('92), SQL3 ('99),... folyamatos fejlesztés (SQL2011) szabvány, melyet többé-kevésbé a legtöbb relációs adatbázis-kezelő támogat Relational Software, Inc. Oracle Corp.
Alapok Magja ekvivalens a relációs algebrával, de annál bővebb összesítő műveletek (pl. SUM, AVG) adatbázis-módosítások Nem procedurális nyelv (deklaratív), tehát az alapvető kérdés az, hogy mit kell csinálni, és nem az, hogy hogyan. Adatleíró (DDL) -, Adatmódosító (DML) -, Adatelérést vezérlő (DCL) -, Lekérdező (QL) nyelv
SQL alapok adatbázis létrehozása CREATE DATABASE adatbazis; jogosultságok felhasználó elérés helye kódolás (UTF8, LATIN2 [ISO-8859-2]) sablonok (pl. téradatok tárolása esetén) használat explicit definíció kapcsolódáskor USE adatbazis; Használt karakterek: [_a-z0-9]
Emlékeztető Relációs adatbázis séma Relációs séma: Hallgató(Neptun: Szöveg, Név: Szöveg, Születési_év: Szám) Relációs adatbázis séma: Hallgató Neptun: Szöveg Név: Szöveg Születési_év: Szám...
Tábla létrehozása CREATE TABLE hallgato ( neptun VARCHAR(6) [...], nev VARCHAR(50), szuletesi_ev INTEGER, atlag DOUBLE PRECISION, PRIMARY KEY (neptun) );
Hogyan (ne) használjuk a dokumentációt? PostgreSQL MySQL Oracle W3Schools
Tábla létrehozása CREATE TABLE táblanév : DEFAULT alapértelmezett érték NULL /NOT NULL UNIQUE (!= PRIMARY KEY!) AUTO INCREMENT/Sequence
Tábla módosítása ALTER TABLE táblanév ADD oszlopnév típus; ALTER TABLE hallgato ADD szuletesi_hely VARCHAR(50); ALTER TABLE táblanév DROP oszlopnév; ALTER TABLE hallgato DROP nev; ALTER TABLE táblanév RENAME TO új_táblanév; ALTER TABLE hallgato RENAME TO bme_hallgatok; DROP táblanév; DROP hallgato; TRUNCATE táblanév; TRUNCATE hallgato; Változtatások esetén figyelni kell a többi táblával való kapcsolatok frissítésére is!
Adatfeltöltés Beszúrás INSERT INTO táblanév [(attribútum1, attribútum2, )] VALUES (érték1, érték2, ); INSERT INTO hallgato (neptun, nev, szuletesi_ev, atlag) VALUES ('ABCDEF', 'Kiss Péter', 1993, 4.5); LOAD DATA COPY
Adatmódosítás Módosítás UPDATE táblanév SET attribútum = érték WHERE feltétel; UPDATE hallgato SET atlag = 4.6 WHERE nev = 'Nagy Sándor'; Törlés DELETE FROM táblanév WHERE attribútum = érték; DELETE hallgato WHERE nev = 'Kovács József';
Vetítés SQL-ben Vetítés (projekció) [π, Π]: a reláció bizonyos attribútumait megtartjuk és a többit törölve új relációt hozunk létre. SELECT nev, szuletesi_ev FROM hallgato; neptun nev szuletesi_ev SELECT * FROM hallgato; neptun nev szuletesi_ev
Egyszerű lekérdezések SELECT attribútum(ok) FROM táblá(k) WHERE tulajdonság(ok); SELECT nev FROM hallgatok WHERE nev = 'Kiss Péter'; attribútumok, táblák elválasztása vesszővel tulajdonságok összefűzése logikai operátorral aliasok (AS) DISTINCT különleges karakterek: *, _, % escape karakterek operátorok: =, <>, >, <, =>, <=, LIKE, BETWEEN, NOT Idézőjelek: ', " kis- és nagybetűk
Nézettáblák CREATE TABLE: fizikailag létrejön (tárolásra kerül) CREATE VIEW nézettábla AS lekérdezés; CREATE VIEW hallgato_a AS SELECT * FROM hallgato WHERE nev LIKE 'A%'; nem jön létre (csak a definíció tárolódik), nem foglal tárkapacitást lekérdezhető módosítható? (materializált view) DROP VIEW nézettábla;
Sorba rendezés SELECT * FROM hallgato WHERE nev LIKE 'Kovács%' ORDER BY szuletesi_hely ASC/DESC; neptun_kod nev szuletesi_hely Abádszalók Abádszalók Almásfüzitő Budapest neptun_kod nev szuletesi_hely Zalaegerszeg Zalaegerszeg Záhony Záhony
Csoportosítás Valamilyen attribútum értéken egyező rekordok csoportosítása, együttes kezelése SELECT AVG(jegy) FROM hallgato WHERE targy = 'Adatbázisok' GROUP BY szuletesi_ido; Feltétel megadása a csoport tulajdonságaira SELECT AVG(jegy) FROM hallgato WHERE targy = 'Adatbázisok' GROUP BY szuletesi_ido HAVING szuletesi_ido < 1994;
Függvények használata SELECT COUNT(*) FROM hallgato; SELECT AVG(atlag) FROM hallgato; SELECT MIN(atlag) FROM hallgato; SELECT MAX(atlag) FROM hallgato; SELECT SUM(atlag)/COUNT(*) FROM hallgato; SELECT DISTINCT szuletesi_hely FROM hallgato;
Bonyolultabb lekérdezések SELECT nev FROM hallgato WHERE (nev LIKE '%Péter' OR nev LIKE '%Sándor') AND nev LIKE 'Nagy%'; SELECT nev FROM hallgato WHERE nev LIKE 'Kov_cs%'; SELECT eloadas_hossza*60 AS perc FROM targyak; SELECT eloadas_hossza 'óra' FROM targyak; SELECT nev FROM hallgatok WHERE targy = 'Adatbázisok' AND NOT bukott;
Metszet/Únió Általános formula: (SELECT neptun_kod FROM hallgatok WHERE nev LIKE 'Nagy%') INTERSECT/UNION (SELECT neptun_kod FROM hallgatok WHERE szuletesi_hely = 'Budapest'); szintaktika attribútumok száma
Subselect film(cim, ev, hossz, studionev, rendezoid) rendezo(id, nev, cim, bevetel) SELECT nev FROM rendezo WHERE ID = (SELECT rendezoid FROM Film WHERE cim = 'Gyűrűk Ura'); SELECT * FROM film WHERE rendezoid IN (SELECT ID FROM Rendezo WHERE nev LIKE 'P_ter%');
Több táblát érintő lekérdezések film(cim, ev, hossz, studionev, rendezoid) rendezo(id, nev, cim, bevetel) SELECT cim, nev FROM rendezo, film; (?) SELECT cim, nev FROM rendezo, film WHERE film.rendezoid = rendezo.id;
Kapcsolatok természetes összekapcsolás az összekapcsolási feltétel az azonos nevű attribútumok egyenlőségéből képződik nincs más feltétel az egyenlő attribútumok közül csak egyet tartalmaz az eredmény théta-összekapcsolás (csak = operátor)
Kapcsolatok oktatok oktato tanszekkod Koppányi Zoltán FMT Lovas Tamás FMT Tuchband Tamás AGT Gipsz Jakab NULL tanszekek tanszekkod tanszeknev FMT Fotogrammetria AGT Geodézia OCT Szerves Kémia
Kapcsolatok (természetes) SELECT * FROM oktatok NATURAL JOIN tanszekek; oktato tanszekkod tanszeknev Koppányi Zoltán FMT Fotogrammetria Lovas Tamás FMT Fotogrammetria Tuchband Tamás AGT Geodézia
Kapcsolatok (INNER JOIN) SELECT * FROM oktatok INNER JOIN tanszekek ON oktatok.tanszekkod = tanszekek.tanszekkod; oktatok.oktato oktatok.tansz ekkod tanszekek.tan szekkod tanszekek.tan szeknev Koppányi Zoltán FMT FMT Fotogrammetria Lovas Tamás FMT FMT Fotogrammetria Tuchband Tamás AGT AGT Geodézia
Kapcsolatok Lógó sor: olyan sor, amelyek egy másik reláció egyetlen sorával sem kapcsolódnak össze. Külső összekapcsolások a külső kapcsolatok esetén a lógó sorokat is megjelenítjük teljes (FULL OUTER JOIN) jobbról, balról (LEFT OUTER JOIN, RIGHT OUTER JOIN)
Kapcsolatok (LEFT OUTER) SELECT * FROM oktatok LEFT OUTER JOIN tanszekek ON oktatok.tanszekkod = tanszekek.tanszekkod; oktatok.oktato oktatok.tansz ekkod tanszekek.tan szekkod tanszekek.tan szeknev Koppányi Zoltán FMT FMT Fotogrammetria Lovas Tamás FMT FMT Fotogrammetria Tuchband Tamás AGT AGT Geodézia Gipsz Jakab NULL NULL NULL
Kapcsolatok (RIGHT OUTER) SELECT * FROM oktatok RIGHT OUTER JOIN tanszekek ON oktatok.tanszekkod = tanszekek.tanszekkod; oktatok.oktato oktatok.tansz ekkod tanszekek.tan szekkod tanszekek.tan szeknev Koppányi Zoltán FMT FMT Fotogrammetria Lovas Tamás FMT FMT Fotogrammetria Tuchband Tamás AGT AGT Geodézia NULL NULL OCT Szerves Kémia
Hivatkozási épség megőrzése NULL értékre állítás módszere Kaszkádolt frissítés CREATE TABLE táblanév (, ON DELETE SET NULL ON UPDATE CASCADE );
Megszorítások Attribútumokra vonatkozó (definíciókor) CREATE TABLE hallgato ( neptun_kod VARCHAR(6) NOT NULL, atlag FLOAT CHECK (altag > 0), nem CHAR(1) CHECK (nem IN ('F','N')),... );
Megszorítások Értéktartományra vonatkozó PostgreSQL példa! CREATE DOMAIN azonositok INT CHECK (VALUE >= 10000); CREATE TABLE hallgatok ( ); azon azonositok,
Megszorítások Rekordra vonatkozó CREATE TABLE hallgatok ( ); nev CHAR(30) UNIQUE, nem CHAR(1) CHECK (nem = 'N' OR nem = 'F')
Megszorítások Elnevezés... nev CHAR(30) CONSTRAINT nevkulcs PRIMARY KEY... CREATE DOMAIN fizetes INT CONSTRAINT nagyszam CHECK (VALUE >= 100000); Módosítás ALTER TABLE szinesz DROP CONSTRAINT nevkulcs; ALTER TABLE rendezo ADD CONSTRAINT nagyszam;
Triggerek Ravasz :) Esemény-feltétel-művelet szabály (+ tárolt eljárás/függvény) Események bekövetkeztekor beszúrás törlés módosítás tranzakciók befejeződése Ha a feltétel teljesül nem teljesül
Triggerek CREATE OR REPLACE FUNCTION bonusz_fv() RETURNS trigger AS $$ BEGIN -- NEW => az újonnan beszúrt sor -- ha az új sorban a jegy = 5 -- 10 bónusz pont jár IF NEW.jegy = 5 THEN NEW.bonusz = 10; END IF; END; RETURN NEW; $$ LANGUAGE plpgsql; CREATE TRIGGER bonusz BEFORE INSERT ON jegy FOR EACH ROW EXECUTE PROCEDURE bonusz_fv();
Triggerek AFTER/BEFORE/INSTEAD OF UPDATE OF attribútum/insert/delete több művelet
Mi lesz a ZH-ban?
Kérdések 2 csoport, 5 kérdés 3 elméleti kérdés 2 rövidebb 1 kifejtős a mai óra anyaga is! 2 gyakorlati kérdés relációs algebra lekérdezés (rel. alg.)
Kulcsszavak adat, információ, metaadat, adatmodell, adatbázis, adatbázis kezelő rendszer, tábla, reláció, a reláció egy előfordulása, kulcs, szuperkulcs, összetett kulcs E/K diagram: egyed, attribútum, kapcsolat, a kapcsolat multiplicitása, többágú kapcsolat, redundancia, inkonzisztencia, módosítási, beszúrási és törlési anomáliák, funkcionális függőség, dekompozíció SQL: tábla létrehozása, módosítása, adatfeltöltés, adatmódosítás, lekérdezések, kapcsolatok, triggerek, megszorítások
Forrás Wikipedia http://hu.wikipedia.org/wiki/adatb%c3%a1zis http://en.wikipedia.org/wiki/graph_database http://en.wikipedia.org/wiki/database http://guide.couchdb.org J. D. Ullman J. Widom: Adatbázisrendszerek M. J. Hernandez: Adatbázis-tervezés Gajdos Sándor: Adatbázisok Dominich Sándor: Adatbáziskezelő rendszerek http://www.bigonehost.com
Köszönöm a figyelmet! Adatbázis rendszerek