Informatika szigorlat 11-es tétel: Lekérdező nyelvek 1. Relációs algebra A relációs algebra egy speciális algebra, amely néhány egyszerű, de hathatós módszert ad arra nézve, hogy miként építhetünk új relációkat a régi relációkból. A relációs algebrai kifejezések alapjait képezik a relációk, mint operandusok. Egy reláció megadható a nevével vagy közvetlenül, sorainak egy listájával. Ezután, alkalmazva az operátorokat a relációkra vagy egyszerűbb relációs algebrai kifejezésekre, fokozatosan egyre bonyolultabb kifejezéseket építhetünk fel. Egy lekérdezés tulajdonképpen egy relációs algebrai kifejezés. Ilyenformán a relációs algebra az első konkrét példánk lekérdezőnyelvre. A relációs algebrában kevés alapművelet van, amelyek egyszerűek (implementálhatók). Mind a méretek és a kiszámítás becsülhető, emiatt jól lehet optimalizálni. A relációs algebrának nagy kifejezőereje van. R(A 1, A 2,..., A n ), ahol R a reláció neve, és A i az attribútum neve. 1.1. Alapműveletek Unió: R 1 (A 1,..., A n ) r 1 R 2 (A 1,..., A n ) r 2 r 1 r 2 R(A 1,..., A n ) Kivonás: R 1 (A 1,..., A n ) r 1 R 2 (A 1,..., A n ) r 2 r 1 r 2 R(A 1,..., A n ) Azok a sorok, amelyek r 1 -ben benne vannak, de r 2 -ben nincsenek. Szorzás: R 1 (A 1,..., A n ) r 1 R 2 (B 1,..., B l ) r 2 r 1 r 2 R(A 1,..., A n, B 1,..., B l ) sorok száma szorzódik: r 1 r 2 = r 1 r 2 Vetítés: R(A 1,..., A n ) r és B 1,..., B k {A 1,..., A n } π B1,...,B k (r) = {t[b 1... B k ] t r} Kiválasztás: Atomi feltétel: AΘc 1
cθa A i ΘA j ahol c konstans, és Θ {=,, <, >,, } Összetett feltétel: Atomi feltétel +{,, } R(A 1,..., A n ) r : σ F (r) = {t r F (t) = igaz} Átnevezés: ϱ A B(r) 1.2. Levezethető műveletek Metszet: R S = (R S) ((R S) (S R)) = R (R S) Hivatkozás: R.A i Természetes összekapcsolás: R(A, B) S(B, C) = = π R.A,R.B,S.C (σ R.B=S.B (r s)) Hányados: R(A 1,..., A n, B 1,..., B m ) r S(B 1,..., B m ) s r s (A 1,..., A n ) és (r s) s r r s a legnagyobb olyan tábla, aminek (A 1,..., A n ) a sémája, és s-sel visszaszorozva r. r s = π A (r) (π A (π A (r) s r)) Félig összekapcsolás (semi join): r s = π R (r s) Théta összekapcsolás r θ s = σ θ (r s), ahol θ tetszőleges logikai kifejezés. 1.3. Műveletek tulajdonságai Def.:f monoton növekedő kifejezés, ha r i r i esetén f(r 1,..., r k ) f(r 1,..., r k ) Áll.:,,π,σ, monoton. A nem monoton. Áll.:,, és a műveletek asszociatívak és kommutatívak. 1. π A (π B (E)) = π A (E),ha A B 2. σ F2 (σ F1 (E)) = σ F2 F 1 (E) = σ F1 (σ F2 (E)) 3. Ha attr(f ) = A B és A B =, akkor π A (σ F (E)) = π A (σ F (π AB (E)) 4. Ha F = F 1 F 2 és attr(f i ) attr(e i ), akkor σ F (E 1 E 2 ) = σ F (E 1 ) σ F (E 2 ) 2
5. Ha F = F 1 F 2 és attr(f i ) attr(e i ), akkor π F (E 1 E 2 ) = π F (E 1 ) π F (E 2 ) 6. σ F (E 1 E 2 ) = σ F (E 1 ) σ F (E 2 ) 7. π F (E 1 E 2 ) = π F (E 1 ) π F (E 2 ) 8. σ F (E 1 E 2 ) = σ F (E 1 ) σ F (E 2 ) 9. Ha attr(f ) attr(e 1 ) attr(e 2 ) akkor σ F (E 1 E 2 ) = σ F (E 1 ) σ F (E 2 ) 10. π A (E 1 E 2 ) = π A (E 1 ) π A (E 2 ) 11. Ha A = B C és B attr(e 1 ) és C attr(e 2 ), akkor π A (E 1 E 2 ) = π B (E 1 ) π C (E 2 ) 2. Relációs komponenskalkulus(drc) 1 Q = { x 1, x 2,..., x }{{ n F (x } 1, x 2,..., x n )} ez egy DRC lekérdezés az F összes szabad változója F itt egy formulát jelöl. 2.1. Formulák Atomi formula: p(t 1,..., t k ) ahol t i szabad előfordulású változó vagy konstans. p(c 1,..., c k ) (c 1,..., c k ) P (tábla) xθy, ahol x és y szabad előfordulásúak és Θ {=,, <, >,, } F 1 és F 2 formula (F 1 F 2 ),(F 1 F 2 ) és F 1 is formulák Ha F formula, akkor ( x)f és ( x)f is formula, de ezekben x-nek már nincs szabad előfordulása. Def.: Egy változó szabad előfordulású, ha nem hat rá kvantor. Def.: Egy formulának x szabad változója, ha van minimum egy szabad előfordulása. Csak szabad változókkal építjük fel a formulákat!! 1 Ezt szokás tartománykalkulusnak is nevezni 3
2.2. Műveletek E 1 E 2 {x 1,..., x n F 1 (x 1,..., x n ) F 2 (x 1,..., x n )} E 1 E 2 {x 1,..., x n F 1 (x 1,..., x n ) F 2 (x 1,..., x n )} E 1 E 2 {x 1,..., x n, y 1,..., y n F 1 (x 1,..., x n ) F 2 (y 1,..., y n )} σ $i θ$ j (E 1 ) {x 1,..., x n F 1 (x 1,..., x n ) x i θx j } π $1,...,$ k (E 1 ) {x 1,..., x k y 1,..., y n k : F 1 (x 1,..., x k, y 1,..., y n k )} 3. Tartományfüggetlenség, biztonságosság Def.: dom(f ) = {F konstansai } {F rel. predikátumainak megfelelő táblákban szereplő értékei} Def.: F tartományfüggetlen formula, ha D dom(f ) esetén R(F, D) = R(F, dom(f )). Tétel: Nincsen olyan algoritmus, amely tetszőleges F -ről eldöntené, hogy tartományfüggetlen-e. A biztonságos DRC lekérdezések olyan bizonyos szintaktikai feltételeket kielégítő kérdések, melyek biztosan tartományfüggetlenek, és ezek a szintaktikai feltételek könnyen ellenőrizhetőek, szemben a tartományfüggetlenséggel. Megszorítások a következőek: A kifejezésben nem szerepel a kvantor. F 1 F 2 esetén F 1 és F 2 szabad változói ugyanazok. F 1... F n maximális konjunkciós lánc esetén a formulákban szereplő változó korlátozott, azaz valamelyik F i egy p predikátum, amelyben szerepel az x változó, vagy x = c, ahol c konstans, vagy x = y, ahol y korlátozott változó, vagy valamelyik F i F alakú, ahol az x az F -ben korlátozott vagy valamelyik F i F 1 F 2 alakú, ahol x F 1 -ben vagy F 2 -ben korlátozott. F csak olyan maximális konjunkciós láncban szerepelhet, amelyben van pozitív tag is. Egy adott F formula esetén a biztonságosságot a következőképpen ellenőrizhetjük: az első lépésben F összes részformulájára megvizsgáljuk az első két feltétel teljesülését, ha minden részformula megfelel a követelményeknek, akkor az F -hez tartozó logikai kifejezésfában alulról felfelé haladva 4
vesszük a maximális konjunkciós láncokat, és ellenőrizzük a harmadik és negyedik tulajdonságokat. 4. Relációs sorkalkulus(trc) Ebben az esetben egy sort tekintünk változónak. Q = {t (n) F (t (n) )}, ahol F formula és t az egyetlen szabad sorváltozója. 4.1. Formulák Atomi formula: p(t (n) ), ahol p egy n dimenziós predikátum szimbólum, és t szabad előfordulású sorváltozó. t[i]θkonst konstθt[i] t[i]θt [j] is formulák,ahol t és t szabad előfordulású. F 1 és F 2 formulák F 1 F 2, F 1 F 2 és F 1 is formulák. F -nek t szabad előfordulású sorváltozója, akkor t F és t F nem lesznek formulák. 4.2. Műveletek E 1 E 2 {t F 1 (t) F 2 (t)} E 1 E 2 {t F 1 (t) F 2 (t)} E 1 E 2 {t (n+m) u (n) v (m) : (F 1 (u) F 2 (v) t[1] = u[1]... t[n] = u[n] t[n + 1] = v[1]... t[n + m] = v[m])} π $1,...,$k (E) {t (k) u(f (u) u[1] = t[1]... u[k] = t[k])} σ $i θ$ j (E) {t F (t) t[i]θt[j]} 5. SQL Az SQL a relációs adatbázisok programnyelve. Az SQL-t (Structured Query Language) a 70-es években az IBM-nél fejlesztették ki. Az SQL utasításait osztályozzák: Adatdefiniálás (Data Definition Language DDL): azok az utasítások tartoznak ide, amelyekkel a sémákat és a bennük található objektumokat határozhatjuk meg, például: create table, create schema, create view stb. 5
Adatmódosítás (Data Manipulation Language DML): az ide tartozó parancsok adatok tárolására, módosítására szolgálnak, például: insert, update, delete. Lekérdezés (Query Language QL). No comment, select... Adatszabályozás (Data Control Language DCL): ide a jogokkal kapcsolatos utasítások tartoznak, például: grant jog adása és revoke visszavonása. Ezek csak a legfontosabb osztályok, több is van még, mint például munkameneti utasítások osztálya vagy hibakeresési utasítások osztálya. 5.1. Parancsok select... from... where... select distinct : duplikátum eltávolítása create table név(mezotípus); insert into név values(érték); select a a from r:csoport átnevezése a fejlécben select a*2+1 from r:aritmetika select a from r where a+4<b:aritmetika select a from r where a like M% :mintaillesztés(%:akárhány karakter) select a from r where a like M_ :mintaillesztés( :1 karakter) select... from... where... not exists s... f... w...:r S select * from... union select * from...:r S delete from név where felt:törlés update tábla set régi=új where felt:módosítja a tábla értékeit in: eleme not in: nem eleme drop view A: Az A nézettábla megszüntetése all: összehasonlítás any: összehasonlítás create view a as select... from... where...: nézettábla létrehozása. Ezt mindig akkor értékeli ki, amikor szükség van rá. Nézettáblába való beszúrás, az eredeti táblába való beszúrás. Az SQL-nek összesítő operátorai is vannak: Sum(), Avg(), Count(), Min() és Max(). A lekérdezések általános formája: select... from... where... group by... having... order by... 6
Ebből az első kettőt kötelező megadni, a többi opcionális. A where-rel lehet lekérdezés feltételeit megadni. A group by-t csoport képzésre lehet alkalmazni. A having záradékkal az összesítő függvények értékei alapján szűrhetünk. Az order by záradékkal az eredmény rendezhető, és asc és desc kifejezések határozzák meg a rendezés növekvő ill. csökkenő sorrendjét. 5.2. Programozás Gyakran kell az SQL parancsokat valamilyen szoftverfejlesztő eszközzel elkészített (al)programok részeként felhasználni. Tehát adott egy befogadó nyelv (például C), amiben a program készül. A program különböző részeiben SQL utasításokat helyeznek el az adatbázisban tárolt információk elérésére. Ebben az esetben a programozó feladata az adatfeldolgozó algoritmusnak a befogadó nyelven való megfogalmazása, és a tényleges adatmanipulációért felelős beágyazott SQL utasítások programba szerkesztése. A változók deklarációját két beágyazott SQL utasítás közé kell tenni: EXEC SQL BEGIN DECLARE SECTION;... EXEC SQL END DECLARE SECTION; Adatbázishoz csatlakozás utasítása: EXEC SQL CONNECT. SQL utasítás végrehajtására két lehetőség van: előkészített és az immediate utasítás: Az első két utasításból áll: EXEC SQL PREPARE név FROM: kérdés; EXEC SQL EXECUTE név (USING A1,...Ak); Akkor célszerű ezt alkalmazni, ha SQL utasítást többször is végre kell hajtani. A másik megoldás: EXEC SQL EXECUTE IMMEDIATE <mit hajtson végre>; Ebben az esetben csak DML utasításokat lehet végrehajtani. 7