Adatbázis kezelés SQL
Történeti áttekintés 1976IBM:SEQUEL,SQL 1976IBM:SEQUEL,SQL 1983ORACLE 1983ORACLE 1984INFORMIX 1984INFORMIX 1986SQL – szabvány : alaputasítások 1986SQL – szabvány : alaputasítások 1989SQL – szabvány : dinamikus SQL 1989SQL – szabvány : dinamikus SQL 1990-től OOP hatás 1990-től OOP hatás SYBASE:hálózati munkára alkalmas adatbázis, metaadatbázis SYBASE:hálózati munkára alkalmas adatbázis, metaadatbázis Programozó által def. Adattípus Programozó által def. Adattípus Kulcsdefiníció Kulcsdefiníció Tárolt eljárások és triggerek Tárolt eljárások és triggerek
Történeti áttekintés 4GL hatás 4GL hatás INFORMIX: képernyőtervező és nyomatatási fejlesztőeszkőz INFORMIX: képernyőtervező és nyomatatási fejlesztőeszkőz Ügyfél-kiszolgálói felépítés hatása: Ügyfél-kiszolgálói felépítés hatása: Adatbázis-gép programozása SQL alapon Adatbázis-gép programozása SQL alapon SQL változatok: SQL változatok: dBase IV SQL, DB2, Ingres, Gupta SQL, MS SQL Server, Transact SQL, InterBase, … dBase IV SQL, DB2, Ingres, Gupta SQL, MS SQL Server, Transact SQL, InterBase, …
Igények az adatbázis kezelő rendszer felé Metaadatok Metaadatok Tárkezelő Tárkezelő Lekérdezés feldolgozó Lekérdezés feldolgozó Tranzakció-kezelő Tranzakció-kezelő Szerkezeti módosítások Szerkezeti módosítások Lekérdezések Lekérdezések Adatmódosítások Adatmódosítások Kapcsolat teremtés Kapcsolat teremtés
A szabvány SQL nyelv elemei
Alapelemek Az SQL táblákat (relációkat kezel) Az SQL táblákat (relációkat kezel) Elnevezésük: TABLE Elnevezésük: TABLE A tábla azonosítója (neve) betűvel kezdődik (max 8 karakter) A tábla azonosítója (neve) betűvel kezdődik (max 8 karakter) A tábla attributumait oszlopoknak nevezzük, melyek típusát a tábla definiálásakor adjuk meg A tábla attributumait oszlopoknak nevezzük, melyek típusát a tábla definiálásakor adjuk meg Oszlopazonosító: max 10 karakter Oszlopazonosító: max 10 karakter A táblák névvel ellátott együttese az adatbázis A táblák névvel ellátott együttese az adatbázis Neve: DATABASE Neve: DATABASE
Táblák fajtái Adattábla Adattábla Eredménytábla Eredménytábla Virtuális tábla – nincs adattartalom fizikailag Virtuális tábla – nincs adattartalom fizikailag Index tábla – kereséshez kell Index tábla – kereséshez kell Szinoníma tábla Szinoníma tábla
Oszloptípusok SMALLINT SMALLINT INTEGER INTEGER DECIMAL(x,y) DECIMAL(x,y) NUMERIC(x,y) NUMERIC(x,y) FLOAT(x,y) FLOAT(x,y) Char(n) Char(n) DATE DATE LOGICAL LOGICAL
Kifejezések Aritmetikai Aritmetikai Oszlopneveket, konstansokat, függvényeket és aritmetikai müveleti jeleket tartalmazhat Oszlopneveket, konstansokat, függvényeket és aritmetikai müveleti jeleket tartalmazhat Függvények: Függvények: Aggregáló függvények: Aggregáló függvények: COUNT, SUM, AVG, MAX, MIN COUNT, SUM, AVG, MAX, MIN A behívó nyelv függvényei A behívó nyelv függvényei
Kifejezések Karakteres Karakteres Karaktertípusú oszlopokat, szövegkonstansokat és a konkatenáció műveleti jelét tartalmazhatja. Karaktertípusú oszlopokat, szövegkonstansokat és a konkatenáció műveleti jelét tartalmazhatja. Függvények Függvények MIN,MAX kivételével nincsenek, de a behívó nyelv függvényeit elfogadja MIN,MAX kivételével nincsenek, de a behívó nyelv függvényeit elfogadja
Kifejezések Logikai Logikai Logikai típusú oszlopokat, logikai műveleteket, valamint az előbbi típusok közti összehasonlításokat tartalmazhatja Logikai típusú oszlopokat, logikai műveleteket, valamint az előbbi típusok közti összehasonlításokat tartalmazhatja Függvények Függvények Nincsenek, de a behívó nyelv függvényeit elfogadja Nincsenek, de a behívó nyelv függvényeit elfogadja
Az adatbázis létrehozása, törlése CREATE DATABASE adatbázisnév; CREATE DATABASE adatbázisnév; Létrejön az adatbázis az aktuális könyvtár adott nevű alkönyvtárában Létrejön az adatbázis az aktuális könyvtár adott nevű alkönyvtárában DROP DATABASE adatbázisnév; DROP DATABASE adatbázisnév; Törli a lezárt adatbázist Törli a lezárt adatbázist
Információ a létező adatbázisokról SHOW DATABASE, SHOW DATABASE, Megjeleníti az összes adatbázis nevét, az egyes adatbázisok alkönyvtárához vezető utat, annak az alkalmazónak az azonosítóját, aki az adatbázist létrehozta, és a létrehozás dátumát Megjeleníti az összes adatbázis nevét, az egyes adatbázisok alkönyvtárához vezető utat, annak az alkalmazónak az azonosítóját, aki az adatbázist létrehozta, és a létrehozás dátumát
Adatbázis megnyítása, lezárása START DATABASE adatbázisnév; START DATABASE adatbázisnév; Megnyitja az adatbázist (egyszerre csak egy aktív) Megnyitja az adatbázist (egyszerre csak egy aktív) STOP DATABASE; STOP DATABASE; Lezárja az aktív adatbázist Lezárja az aktív adatbázist
ISKOLA TANULO TAGSAGSEGELYETKEZES KORJOGCIMNAPIDIJ
Adattábla definiálása CREATE TABLE táblanév (oszlopnév adattípus (adathossz)[,oszlopnév adattípus (adathossz)]…) CREATE TABLE táblanév (oszlopnév adattípus (adathossz)[,oszlopnév adattípus (adathossz)]…) A felsorolt oszlopokkal létrehoz egy táblát A felsorolt oszlopokkal létrehoz egy táblát Neve legfeljebb 8 karakter Neve legfeljebb 8 karakter Egy adatbázison belül a nevek különböznek Egy adatbázison belül a nevek különböznek Max 255 oszlop Max 255 oszlop Max 4000 byte széles Max 4000 byte széles
SZEMELY{kod,nev,nem,anya,apa} CREATE TABLE szemely(kod char(3), nev char(12), nem logical, anya char(3), apa char(3)); CREATE TABLE szemely(kod char(3), nev char(12), nem logical, anya char(3), apa char(3));
A tábla módosítása, törlése ALTER TABLE táblanév ADD (oszlopnév adattípus (adathossz)); ALTER TABLE táblanév ADD (oszlopnév adattípus (adathossz)); Táblához hozzáadni új oszlopkat Táblához hozzáadni új oszlopkat DROP TABLE táblanév; DROP TABLE táblanév; A tábla kitörlése az adatbázisból A tábla kitörlése az adatbázisból
Új sorok elhelyezése az adattáblába INSERT INTO táblanév [(oszlopnév-lista)] VALUES (értéklista INSERT INTO táblanév [(oszlopnév-lista)] VALUES (értéklista A tábla felsorolt oszlopaiba az értéklista elemeit helyezi el A tábla felsorolt oszlopaiba az értéklista elemeit helyezi el Alapértelmezés: minden oszlop Alapértelmezés: minden oszlop
Sorok beszúrása a SZEMELY –be: INSERT INTO szemely VALUES (‘351’,’xxx’,.t.,’333’,’555’); INSERT INTO szemely VALUES (‘351’,’xxx’,.t.,’333’,’555’); INSERT INTO szemely VALUES (‘352’,’xxy’,.t.,’333’,’555’); INSERT INTO szemely VALUES (‘352’,’xxy’,.t.,’333’,’555’); INSERT INTO szemely VALUES (‘741’,’zzz’,.t.,’777’,’444’); INSERT INTO szemely VALUES (‘741’,’zzz’,.t.,’777’,’444’); INSERT INTO szemely VALUES (‘742’,’zzs’,.f.,’777’,’444’); INSERT INTO szemely VALUES (‘742’,’zzs’,.f.,’777’,’444’);
Sorok beillesztése másik táblából INSERT INTO táblanév [oszloplista] SELECT * FROM régitábla; INSERT INTO táblanév [oszloplista] SELECT * FROM régitábla; Ahol SELECT * FROM régitábla a régitábla Eredmény táblája minden oszlopával Ahol SELECT * FROM régitábla a régitábla Eredmény táblája minden oszlopával
Adatsor módosítása a táblában UPDATE táblanév UPDATE táblanév SET oszlop1 = újérték1,... [WHERE feltétel] WHERE nélkül minden sorra végrehajtódik WHERE nélkül minden sorra végrehajtódik
Sorok törlése a tábálból DELETE FROM táblanév [WHERE feltétel] DELETE FROM táblanév [WHERE feltétel] WHERE nélkül minden sort töröl WHERE nélkül minden sort töröl
Lekérdezés adattáblákból A lekérdezés során egy úgynevezett eredménytábla (E-tábla) jön létre A lekérdezés során egy úgynevezett eredménytábla (E-tábla) jön létre A SELECT paranccsal az E-tábla a végrehajtás során lépésenként alakul ki A SELECT paranccsal az E-tábla a végrehajtás során lépésenként alakul ki
A SELECT parancs szerkezete SELECT … oszlop kiválasztása= pojekció SELECT … oszlop kiválasztása= pojekció FROM … tábla-nevek megadása = Descartes-szorzat [WHERE …] sorok kiválasztása = szelekció [GROUP BY …] csoportosítás [HAVING …] csoportok közötti választás [UNION…] E-táblák összefűzése = unió [ORDER BY …] E-tábla rendezése [SAVE TO TEMP …]; E-tábla megőrzése
A select utasítás részei részletesen SELECT [ALL|DISTINCT] oszlopnév-lista|* FROM táblanév lista; SELECT [ALL|DISTINCT] oszlopnév-lista|* FROM táblanév lista; A FROM mögé írt táblákból a SELECT mögé írt paraméterek szerint oszlopokat emel ki A FROM mögé írt táblákból a SELECT mögé írt paraméterek szerint oszlopokat emel ki Ezekből eredmény táblát hoz létre Ezekből eredmény táblát hoz létre
Az opciók A * hatása: A * hatása: A tábla, vagy táblák minden oszlopa bekerül az E- táblába A tábla, vagy táblák minden oszlopa bekerül az E- táblába Az oszlopnév-lista hatása: Az oszlopnév-lista hatása: A lista elemei lesznek oszlopai az E-táblának A lista elemei lesznek oszlopai az E-táblának Az ALL hatása: Az ALL hatása: Az E-tábla duplikált sorokat is tartalmazhat Az E-tábla duplikált sorokat is tartalmazhat A DISTINCT hatása: A DISTINCT hatása: A duplikált sorokat csak egyszer tartalmazza A duplikált sorokat csak egyszer tartalmazza
A lista elemei lehetnek: A tábla oszlopnevei; ha több táblában is szerepel ugyanaz az oszlopnév, akkor táblanév.oszlopnév alakban írjuk A tábla oszlopnevei; ha több táblában is szerepel ugyanaz az oszlopnév, akkor táblanév.oszlopnév alakban írjuk A FROM által kijelölt tábla oszlopneveiből képzett kifejezés A FROM által kijelölt tábla oszlopneveiből képzett kifejezés Az aggregáló függvények valamelyike Az aggregáló függvények valamelyike Egyéb kifejezés Egyéb kifejezés
Példák származtatott oszlopokra Aritmetikai kifejezés Aritmetikai kifejezés SELECT joved+2000 FROM tanulo; SELECT joved+2000 FROM tanulo; Karakteres kifejezés Karakteres kifejezés SELECT left(osztaly,1),upper(nev) FROM tanulo; SELECT left(osztaly,1),upper(nev) FROM tanulo; Aggregáló függvény Aggregáló függvény SELECT AVG(joved) FROM tanulo; SELECT AVG(joved) FROM tanulo;
Aggregáló függvények A COUNT függvény A COUNT függvény COUNT([DISTINCT] oszlopnév|*) COUNT([DISTINCT] oszlopnév|*) Megszámolja az oszlopnév által megadott oszlop elemeinek számát Megszámolja az oszlopnév által megadott oszlop elemeinek számát
Aggregáló függvények A SUM függvény A SUM függvény SUM [ALL] kifejezés | [ALL | DISTINCT] [oszlopnév] SUM [ALL] kifejezés | [ALL | DISTINCT] [oszlopnév] Összegzi a numerikus típusú oszlop értékeit Összegzi a numerikus típusú oszlop értékeit
Aggregáló függvények A következő aggregáló függvények paraméterezése megegyezik a SUM –mal A következő aggregáló függvények paraméterezése megegyezik a SUM –mal AVG (…) : átlag képzése AVG (…) : átlag képzése MIN (…) : minimális érték kikeresése MIN (…) : minimális érték kikeresése MAX (…) : maximális érték kikeresése MAX (…) : maximális érték kikeresése Megjegyzés: a MIN és MAX fv. Argumentuma numerikus, dátum vagy karakteres is lehet Megjegyzés: a MIN és MAX fv. Argumentuma numerikus, dátum vagy karakteres is lehet
A WHERE alparancs WHERE feltétel WHERE feltétel Az E-tábla a feltételeknek megfelelő sorokat teszi be Az E-tábla a feltételeknek megfelelő sorokat teszi be A feltétel egy logikai kifejezés A feltétel egy logikai kifejezés
Predikátum függvények A WHERE feltételében használhatjuk A WHERE feltételében használhatjuk A BETWEEN predikátum A BETWEEN predikátum kif1 BETWEEN kif2 AND kif3 kif1 BETWEEN kif2 AND kif3 Igaz ha : kif2 <= kif1 <= kif3 Igaz ha : kif2 <= kif1 <= kif3 Az In predikátum Az In predikátum Oszlopnév IN (értéklista) Oszlopnév IN (értéklista) Igaz, ha az oszlopnév értékei elemei a listának Igaz, ha az oszlopnév értékei elemei a listának A LIKE predikátum A LIKE predikátum Oszlopnév LIKE érték Oszlopnév LIKE érték Igaz, ha az oszlop értéke megegyezik a like utáni értékkel Igaz, ha az oszlop értéke megegyezik a like utáni értékkel Maszkolható: _% Maszkolható: _%
A GROUP BY alparancs GROUP BY oszlopnév[,oszlopnév]… GROUP BY oszlopnév[,oszlopnév]… Az oszlopk értékei alapján csoportokat képez (egy csoportba az azonos értékűek tartoznak) Az oszlopk értékei alapján csoportokat képez (egy csoportba az azonos értékűek tartoznak) A csoportra rendszerint aggregáló függvényt alkalmazunk A csoportra rendszerint aggregáló függvényt alkalmazunk
Megkötések Minden GROUP BY –beli oszlopnévnek vagy a SELECT-ben, vagy a SELECT-ben felírt aggregáló függvény argumentumában kell szerepelnie Minden GROUP BY –beli oszlopnévnek vagy a SELECT-ben, vagy a SELECT-ben felírt aggregáló függvény argumentumában kell szerepelnie Nem lehet származtatott oszlopnév a GROUP BY argumentuma Nem lehet származtatott oszlopnév a GROUP BY argumentuma
A HAVING alparancs HAVING feltétel HAVING feltétel A GROUP BY csoportjaiból, csak azok a sorok kerülnek az E-táblába, amelyek eleget tesznek a feltételnek A GROUP BY csoportjaiból, csak azok a sorok kerülnek az E-táblába, amelyek eleget tesznek a feltételnek
Az ORDER BY alparancs ORDER BY oszlopnév / oszlopnév-sorszám [ASC/DESC]… ORDER BY oszlopnév / oszlopnév-sorszám [ASC/DESC]… Az oszlopok értéke szerint rendezi az E-táblát Az oszlopok értéke szerint rendezi az E-táblát
Megjegyzés Az oszlopnévnek szerepelnie kell a SELECT- ben Az oszlopnévnek szerepelnie kell a SELECT- ben Az oszlop-sorszám a SELECT-ben megadott oszlopnév sorszáma Az oszlop-sorszám a SELECT-ben megadott oszlopnév sorszáma Az ASC növekvő Az ASC növekvő A DESC csökkenő rendezettség A DESC csökkenő rendezettség
A UNION alparancs SELECT …. UNION SELECT …[UNION SELECT]… SELECT …. UNION SELECT …[UNION SELECT]… Veszi az egymás után következő E-táblák unióját Veszi az egymás után következő E-táblák unióját Az E-tábláknak kompatibilisnek kell lenniük: Az E-tábláknak kompatibilisnek kell lenniük: Azonos oszlopszám Azonos oszlopszám Az oszlopoknak azonos típusúnak kell lenniük Az oszlopoknak azonos típusúnak kell lenniük
Táblák összekapcsolása A táblák összekapcsolása azt jelenti, hogy a FROM mögött több A-tábla nevét adjuk meg A táblák összekapcsolása azt jelenti, hogy a FROM mögött több A-tábla nevét adjuk meg SELECT * FROM table1, table2 SELECT * FROM table1, table2 Ilyenkor a táblák DESCARTES-szorzata képződik Ilyenkor a táblák DESCARTES-szorzata képződik
Táblák összekapcsolása Egyenlőség-kapcsolat (EQUIJOIN-kapcsolat) Egyenlőség-kapcsolat (EQUIJOIN-kapcsolat) Gyakran kötünk össze táblákat közös oszlopok alapján (kulcs-oszlopok) Gyakran kötünk össze táblákat közös oszlopok alapján (kulcs-oszlopok) Tábla összekapcsolása önmagával (SELF-JOIN) Tábla összekapcsolása önmagával (SELF-JOIN) Az A-táblát önmagával is összekapcsolhatjuk Az A-táblát önmagával is összekapcsolhatjuk A táblát két névvel jelöljük meg A táblát két névvel jelöljük meg
Beágyazott SELECT parancsok A WHERE és a HAVING feltételében SELECT parancs is szerepelhet A WHERE és a HAVING feltételében SELECT parancs is szerepelhet Ez az úgynevezett belső vagy beágyazott SELECT Ez az úgynevezett belső vagy beágyazott SELECT DE nem tartalmazhat ORDER BY, SAVE TO TEMP és FOR UPDATE OF klauzákat DE nem tartalmazhat ORDER BY, SAVE TO TEMP és FOR UPDATE OF klauzákat A belső SELECT is tartalmazhat belső SELECT-et, vagyis a SELECT-ek egymásba ágyazhatók A belső SELECT is tartalmazhat belső SELECT-et, vagyis a SELECT-ek egymásba ágyazhatók
Beágyazott SELECT parancsok A belső SELECT –et mindig zárójelpárban kell megadni A belső SELECT –et mindig zárójelpárban kell megadni Sorrend: Sorrend: Először a belső, majd a külső lekérdezést értékeli ki, és végül összeveti az értékeket Először a belső, majd a külső lekérdezést értékeli ki, és végül összeveti az értékeket A másodlagos lekérdezést a főlekérdezés minden sorával külön kiértékeli A másodlagos lekérdezést a főlekérdezés minden sorával külön kiértékeli
Esetek Egyetlen értéket tartalmazó belső E-tábla Egyetlen értéket tartalmazó belső E-tábla Több értéket tartalmazó belső E-tábla Több értéket tartalmazó belső E-tábla Ilyenkor használni kell az IN, ANY, ALL vagy EXISTS predikátumok valamelyikét Ilyenkor használni kell az IN, ANY, ALL vagy EXISTS predikátumok valamelyikét A megadás formátuma: A megadás formátuma: Predikátum (belső SELECT) Predikátum (belső SELECT)
Predikátumok Az IN predikátum: Az IN predikátum: Igaz értéket ad vissza, ha az egyelőség valamelyik belső E-táblabeli értékre igaz Igaz értéket ad vissza, ha az egyelőség valamelyik belső E-táblabeli értékre igaz Az ANY predikátum: Az ANY predikátum: Igaz, ha a megadott összehasonlítás valamelyik belső E-táblabeli értékre igaz Igaz, ha a megadott összehasonlítás valamelyik belső E-táblabeli értékre igaz
Predikátumok Az ALL predikátum Az ALL predikátum Igaz értéket ad vissza, ha az egyelőség valamennyi belső E-táblabeli értékre igaz Igaz értéket ad vissza, ha az egyelőség valamennyi belső E-táblabeli értékre igaz Az EXISTS predikátum Az EXISTS predikátum Kiválasztja azokat a sorokat, amelyekhez a belső E- táblában egy vagy több sor tartozik Kiválasztja azokat a sorokat, amelyekhez a belső E- táblában egy vagy több sor tartozik Az IN operátor helyett mindig alkalmazható, de fordítva nem Az IN operátor helyett mindig alkalmazható, de fordítva nem
Esetek A belső SELECT egyszer hajtódik végre A belső SELECT egyszer hajtódik végre A belső SELECT a külső minden sorára végrehajtódik A belső SELECT a külső minden sorára végrehajtódik Okozója: a belső SELECT –beli hivatkozások a külsőre Okozója: a belső SELECT –beli hivatkozások a külsőre SELECT nev, osztaly FROM tanulo WHERE azon NOT IN (SELECT azon FROM szemely) SELECT nev, osztaly FROM tanulo WHERE azon NOT IN (SELECT azon FROM szemely) SELECT nev FROM tanulo WHERE azon IN (SELECT azon FROM segely WHERE jogcim IN (SELECT jogcim FROM jogcim WHERE megnev LIKE ‘%konyv%)); SELECT nev FROM tanulo WHERE azon IN (SELECT azon FROM segely WHERE jogcim IN (SELECT jogcim FROM jogcim WHERE megnev LIKE ‘%konyv%));