Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Ami még kimaradt. Halmazműveletek A lekérdezések eredmény sorainak halmazát tekintve több lekérdezés között értelmezhetjük a szokásos halmaz műveleteket.

Hasonló előadás


Az előadások a következő témára: "Ami még kimaradt. Halmazműveletek A lekérdezések eredmény sorainak halmazát tekintve több lekérdezés között értelmezhetjük a szokásos halmaz műveleteket."— Előadás másolata:

1 Ami még kimaradt

2 Halmazműveletek A lekérdezések eredmény sorainak halmazát tekintve több lekérdezés között értelmezhetjük a szokásos halmaz műveleteket. A lekérdezések eredmény sorainak halmazát tekintve több lekérdezés között értelmezhetjük a szokásos halmaz műveleteket. Ef.: lekérdezések ugyanannyi, ugyanolyan típusú oszlopot adnak vissza Ef.: lekérdezések ugyanannyi, ugyanolyan típusú oszlopot adnak vissza

3 Halmazműveletek Szintaxis: Szintaxis: SELECT … SELECT …; A következő műveleteket ismerjük: A következő műveleteket ismerjük: UNION: unió halmazképzéssel, azaz az azonos sorokból csak egyet szerepeltet UNION: unió halmazképzéssel, azaz az azonos sorokból csak egyet szerepeltet UNION ALL: unió halmazképzés nélkül, az azonos sorok bent maradnak UNION ALL: unió halmazképzés nélkül, az azonos sorok bent maradnak INTERSECT: metszet INTERSECT: metszet MINUS: halmaz különbség MINUS: halmaz különbség

4 Halmazműveletek Példa: Példa: Írjuk ki az összes tanár nevét, és hogy hány diáknak osztályfőnöke! Azok a tanárok is jelenjenek meg, akik nem osztályfőnökök!

5 Halmazműveletek SELECT t.nev, COUNT(1) FROM tTanar t, tDiak d FROM tTanar t, tDiak d WHERE d.Ofo = t.TAzon WHERE d.Ofo = t.TAzon GROUP BY t.nev, t.TAzon GROUP BY t.nev, t.TAzonUNION SELECT nev, 0 FROM tTanar FROM tTanar WHERE TAzon NOT IN (SELECT Ofo FROM tDiak); WHERE TAzon NOT IN (SELECT Ofo FROM tDiak);

6 Sorszámozás A táblákban gyakran használunk folytonosan növekvő egész számokat arra, hogy azonosítsuk a sorokat, és tipikusan ezt jelöljük meg elsődleges kulcsként A táblákban gyakran használunk folytonosan növekvő egész számokat arra, hogy azonosítsuk a sorokat, és tipikusan ezt jelöljük meg elsődleges kulcsként Minden adatbázis-kezelő rendszer ad lehetőséget az automatikus sorszámgenerálásra. Minden adatbázis-kezelő rendszer ad lehetőséget az automatikus sorszámgenerálásra.

7 Sorszámozás Microsoft SQL Server, MySQL Microsoft SQL Server, MySQL tábla definíciójában a mező típusánál megmondjuk, hogy ez egy sorszámozandó mező tábla definíciójában a mező típusánál megmondjuk, hogy ez egy sorszámozandó mező a rendszer az új sorok beszúrásakor mindig automatikusan generál egy, az előzőnél eggyel nagyobb számot a rendszer az új sorok beszúrásakor mindig automatikusan generál egy, az előzőnél eggyel nagyobb számot

8 Sorszámozás Oracle Oracle A tábláktól függetlenül létrehozhatunk speciális objektumokat (sequence-eket), amik generálják a számokat: A tábláktól függetlenül létrehozhatunk speciális objektumokat (sequence-eket), amik generálják a számokat: CREATE SEQUENCE CREATE SEQUENCE [START WITH a] [INCREMENT BY b]; (alapbeállítás a=1, b=1) A sequence-ből az Oracle dummy táblájára (u.n. DUAL) vonatkozó lekérdezéssel tudunk egy új értéket kérni: A sequence-ből az Oracle dummy táblájára (u.n. DUAL) vonatkozó lekérdezéssel tudunk egy új értéket kérni: SELECT.nextval FROM DUAL; SELECT.nextval FROM DUAL;

9 Sorszámozás Feladat: Feladat: Készítsünk egy sequence-et a tDiak táblára, és szúrjunk be néhány diákot ennek segítségével! Megoldás: Megoldás: CREATE SEQUENCE seqDiak START WITH 50; INSERT INTO tDiak (DAzon, Nev, Kor, Ofo) (SELECT seqDiak.nextval, ‘Kis Pista’, 18, 2 FROM DUAL); FROM DUAL); INSERT INTO tDiak (DAzon, Nev, Kor, Ofo) (SELECT seqDiak.nextval, ‘Nagy Jóska’, 16, 1 FROM DUAL); COMMIT;

10 Join-ok Join-okról beszélünk, ha egy lekérdezésen belül több tábla adatait kombináljuk össze. Join-okról beszélünk, ha egy lekérdezésen belül több tábla adatait kombináljuk össze. Join feltételnek nevezzük a lekérdezések WHERE feltételében szereplő minden olyan részfeltételt, amiben legalább két tábla egy-egy oszlopa között fogalmazunk meg egy logikai kifejezést. Join feltételnek nevezzük a lekérdezések WHERE feltételében szereplő minden olyan részfeltételt, amiben legalább két tábla egy-egy oszlopa között fogalmazunk meg egy logikai kifejezést. A leggyakrabban használt join fajta az u.n. equijoin, ahol két tábla egy-egy oszlopa között az egyenlőség operátort használjuk. A leggyakrabban használt join fajta az u.n. equijoin, ahol két tábla egy-egy oszlopa között az egyenlőség operátort használjuk. A „self join” kifejezést használjuk azokra a lekérdezésekre, melyekben egy táblát többször is szerepeltetünk a FROM részben. A „self join” kifejezést használjuk azokra a lekérdezésekre, melyekben egy táblát többször is szerepeltetünk a FROM részben.

11 Join-ok Ahogy tanultuk, a join alapértelmezésben direktszorzat képzést jelent, mely eredményét tipikusan join feltételekkel szűkítjük. Ahogy tanultuk, a join alapértelmezésben direktszorzat képzést jelent, mely eredményét tipikusan join feltételekkel szűkítjük. Leggyakoribb példa az, amikor két tábla között egy-a-sokhoz (idegen kulcs) kapcsolat van, és a join feltétel az idegen kulcsban szereplő két oszlop között fogalmaz meg egyenlőséget Leggyakoribb példa az, amikor két tábla között egy-a-sokhoz (idegen kulcs) kapcsolat van, és a join feltétel az idegen kulcsban szereplő két oszlop között fogalmaz meg egyenlőséget

12 Join-ok Mivel a join feltételek a WHERE részben keverednek a többi feltétellel, speciális szintaxissal lehetőség van a join feltételt a FROM részben szerepeltetni. Mivel a join feltételek a WHERE részben keverednek a többi feltétellel, speciális szintaxissal lehetőség van a join feltételt a FROM részben szerepeltetni. Általános szintaxis: Általános szintaxis: SELECT … FROM t1 JOIN t2 ON t1.a = t2.b WHERE …;

13 Inner join (egyszerű join / belső join / join) Az inner join azt jelenti, hogy csakis azok a sorok jelennek meg a lekérdezés eredményében, melyek pontosan kielégítik a join feltételt. Az inner join azt jelenti, hogy csakis azok a sorok jelennek meg a lekérdezés eredményében, melyek pontosan kielégítik a join feltételt.

14 Outer join Az „külső join”-ok által visszaadott sorok halmaza bővebb, mint a belső join-ok eredménye. Az „külső join”-ok által visszaadott sorok halmaza bővebb, mint a belső join-ok eredménye. Visszaadják az összes olyan sort, melyek kielégítik a join feltételt, plusz még az egyik vagy mindkét táblából azokat is, melyekhez a másik táblában egyetlen olyan rekord sem található, amellyel a join feltétel kielégíthető lenne. Visszaadják az összes olyan sort, melyek kielégítik a join feltételt, plusz még az egyik vagy mindkét táblából azokat is, melyekhez a másik táblában egyetlen olyan rekord sem található, amellyel a join feltétel kielégíthető lenne.

15 Outer join Ezeknél a pluszban megjelenő soroknál a másik tábla oszlopaiban csupa NULL értékeket fogunk látni. Ezeknél a pluszban megjelenő soroknál a másik tábla oszlopaiban csupa NULL értékeket fogunk látni.

16 Outer join típusai left outer join left outer join inner join által visszaadott sorok + inner join által visszaadott sorok + egy-egy sor minden olyan t1-beli rekordhoz, melyhez nincs t2-ben egyetlen, a join feltétel által párosítható sor sem. egy-egy sor minden olyan t1-beli rekordhoz, melyhez nincs t2-ben egyetlen, a join feltétel által párosítható sor sem. right outer join right outer join inner join által visszaadott sorok + inner join által visszaadott sorok + egy-egy sor minden olyan t2-beli rekordhoz, melyhez nincs t1-ben egyetlen, a join feltétel által párosítható sor sem. egy-egy sor minden olyan t2-beli rekordhoz, melyhez nincs t1-ben egyetlen, a join feltétel által párosítható sor sem. full outer join full outer join inner join által visszaadott sorok + inner join által visszaadott sorok + egy-egy sor minden olyan t1-beli rekordhoz, melyhez nincs t2-ben egyetlen, a join feltétel által párosítható sor sem + egy-egy sor minden olyan t1-beli rekordhoz, melyhez nincs t2-ben egyetlen, a join feltétel által párosítható sor sem + egy-egy sor minden olyan t2-beli rekordhoz, melyhez nincs t1-ben egyetlen, a join feltétel által párosítható sor sem. egy-egy sor minden olyan t2-beli rekordhoz, melyhez nincs t1-ben egyetlen, a join feltétel által párosítható sor sem.

17 Outer join típusai t1 LEFT OUTER JOIN t2 t1 LEFT OUTER JOIN t2 logikailag pontosan ugyanaz, mint a logikailag pontosan ugyanaz, mint a t2 RIGHT OUTER JOIN t1 t2 RIGHT OUTER JOIN t1 azzal a különbséggel, hogy azzal a különbséggel, hogy első esetben a t1 oszlopai lesznek elöl, első esetben a t1 oszlopai lesznek elöl, második esetben pedig a t2 oszlopai második esetben pedig a t2 oszlopai

18 Inner join eddig eddig SELECT * FROM tDiak d, tTanar t WHERE d.Ofo = t.TAzon; most most SELECT * FROM tDiak d INNER JOIN tTanar t ON d.Ofo = t.TAzon;

19 Left outer join Orcale Orcale SELECT * SELECT * FROM tDiak d, tTanar t FROM tDiak d, tTanar t WHERE d.Ofo = t.TAzon(+); WHERE d.Ofo = t.TAzon(+); Szabványos Szabványos SELECT * SELECT * FROM tDiak d LEFT OUTER JOIN tTanar t ON d.Ofo = t.TAzon; FROM tDiak d LEFT OUTER JOIN tTanar t ON d.Ofo = t.TAzon;

20 Right outer join Orcale Orcale SELECT * SELECT * FROM tDiak d, tTanar t FROM tDiak d, tTanar t WHERE d.Ofo(+) = t.TAzon; WHERE d.Ofo(+) = t.TAzon; Szabványos Szabványos SELECT * SELECT * FROM tDiak d RIGHT OUTER JOIN tTanar t ON d.Ofo = t.TAzon; FROM tDiak d RIGHT OUTER JOIN tTanar t ON d.Ofo = t.TAzon;

21 Right outer join Példa Példa Írjuk ki az összes tanár nevét, és hogy hány diáknak osztályfőnöke! Azok a tanárok is jelenjenek meg, akik nem osztályfőnökök! Megoldás Megoldás SELECT t.Nev, COUNT(d.DAzon) AS DB SELECT t.Nev, COUNT(d.DAzon) AS DB FROM tDiak d RIGHT OUTER JOIN tTanar t ON d.Ofo = t.TAzon GROUP BY t.Tazon, T.Nev

22 Full outer join SELECT * FROM tDiak d FULL OUTER JOIN tTanar t ON d.Ofo = t.TAzon; FROM tDiak d FULL OUTER JOIN tTanar t ON d.Ofo = t.TAzon;

23 Hierarchikus (rekurzív) lekérdezések Relációs táblákban nagyon egyszerűen tárolhatunk hierarchikus adatokat úgy, hogy készítünk egy oszlopot, mely idegen kulccsal ugyanennek a táblának az azonosítójára mutat. Relációs táblákban nagyon egyszerűen tárolhatunk hierarchikus adatokat úgy, hogy készítünk egy oszlopot, mely idegen kulccsal ugyanennek a táblának az azonosítójára mutat.

24 Hierarchikus (rekurzív) lekérdezések Példa: Példa: tDolgozo(DAzon, Nev, FonokAzon) tDolgozo(DAzon, Nev, FonokAzon) DAzonNevFonokAzon 1Nagy Főnök 2Osztály Vezető11 3Osztály Vezető21 4Kisfőnök2 5Dolgozó14 6Dolgozó24 7Dolgozó33

25 Hierarchikus (rekurzív) lekérdezések Feladat (rekurzív megoldást igényel) Feladat (rekurzív megoldást igényel) Kik az Osztály Vezető1 alá rendelt emberek? Kik az Osztály Vezető1 alá rendelt emberek? Megoldás Megoldás s ELECT * FROM tDolgozo FROM tDolgozo START WITH nev = 'Osztály Vezetõ1' START WITH nev = 'Osztály Vezetõ1' CONNECT BY FonokAzon = PRIOR DAzon ; CONNECT BY FonokAzon = PRIOR DAzon ;

26 Hierarchikus (rekurzív) lekérdezések START WITH feltétel START WITH feltétel definiálja a gyökér elemet definiálja a gyökér elemet lehet összetett logikai kifejezés is lehet összetett logikai kifejezés is CONNECT BY feltétel CONNECT BY feltétel a hierarchikus fa éleit definiálja úgy, hogy a PRIOR operátorral mondhatjuk meg, hogy ez a fában „feljebb” lévő attribútum a hierarchikus fa éleit definiálja úgy, hogy a PRIOR operátorral mondhatjuk meg, hogy ez a fában „feljebb” lévő attribútum lehet összetett logikai kifejezés is lehet összetett logikai kifejezés is level érték level érték megmondja, hogy az adott elem milyen mélyen van a fában megmondja, hogy az adott elem milyen mélyen van a fában példa példa SELECT DAzon, Nev, Fonokazon, level FROM TDOLGOZO FROM TDOLGOZO START WITH nev = 'Osztály Vezetõ1' START WITH nev = 'Osztály Vezetõ1' CONNECT BY FonokAzon = PRIOR DAzon; CONNECT BY FonokAzon = PRIOR DAzon;

27 Indexelés Az indexelés a keresések hatékonyságát növeli. Az indexelés a keresések hatékonyságát növeli. Ha nem használjuk, akkor a rendszer a tábla / táblák összes sorára szekvenciálisan végrehajtja a WHERE feltételt. Ha nem használjuk, akkor a rendszer a tábla / táblák összes sorára szekvenciálisan végrehajtja a WHERE feltételt.

28 Indexelés Indexek használata esetén az adatbázis-kezelő adott oszlop / oszlopok szerint egy vagy több index struktúrát (pl. B-fa) is fenntart, melyet minden módosításkor aktualizál. Indexek használata esetén az adatbázis-kezelő adott oszlop / oszlopok szerint egy vagy több index struktúrát (pl. B-fa) is fenntart, melyet minden módosításkor aktualizál. Ha olyan oszlop szerint keresünk, ami indexelve van, akkor az index struktúra alapján fog keresni. Ha olyan oszlop szerint keresünk, ami indexelve van, akkor az index struktúra alapján fog keresni. Példa Példa Ha egy 10 millió embert nyilvántartó táblában kiadjuk a következő lekérdezést: SELECT * FROM Emberek WHERE Nev = ’Tóth István’; akkor alap helyzetben legrosszabb esetben 10 millió lépésben, 10 millió szöveges összehasonlítással fogja a rendszer megtalálni Tóth István adatait. Míg ha a Nev mező szerint a táblát előzőleg indexeltük, akkor a keresés log(10 millió) = 24 lépésben lefut.

29 Indexelés Az indexeket a következő paranccsal hozhatjuk létre: Az indexeket a következő paranccsal hozhatjuk létre: CREATE [UNIQUE] INDEX ON (oszlop1, …, oszlopN); CREATE [UNIQUE] INDEX ON (oszlop1, …, oszlopN); A UNIQUE kulcsszó használata esetén automatikusan az UNIQUE constraint is születik ezekre az oszlopokra. A UNIQUE kulcsszó használata esetén automatikusan az UNIQUE constraint is születik ezekre az oszlopokra. Az adatbázis-kezelők az elsődleges kulcsokra mindig automatikusan definiálnak indexet (tehát elsődleges kulcsra mindig hatékonyan tudunk keresni). Az adatbázis-kezelők az elsődleges kulcsokra mindig automatikusan definiálnak indexet (tehát elsődleges kulcsra mindig hatékonyan tudunk keresni).

30 Indexelés Csak azokat a táblákat indexeljük, amikben nagy mennyiségű adatot tárolunk. Csak azokat a táblákat indexeljük, amikben nagy mennyiségű adatot tárolunk. Csak azokat a mezőket indexeljük, amelyekre gyakran hivatkozunk a WHERE feltételeinkből. Csak azokat a mezőket indexeljük, amelyekre gyakran hivatkozunk a WHERE feltételeinkből. Idegen kulcsok esetén a hivatkozó tábla hivatkozó oszlopát szinte mindig érdemes indexelni, ha a hivatkozott táblában aránylag sok adat van. Idegen kulcsok esetén a hivatkozó tábla hivatkozó oszlopát szinte mindig érdemes indexelni, ha a hivatkozott táblában aránylag sok adat van.

31 Indexelés Olyan mezőket ne indexeljünk, amik csak néhányféle adatot tartalmaznak (pl. emberek neme: ’F’/’N’, erre akkor sem szabad indexet tenni, ha nagyon sok emberünk van, és nagyon gyakran kérdezzük le pl. a férfiakat!). Olyan mezőket ne indexeljünk, amik csak néhányféle adatot tartalmaznak (pl. emberek neme: ’F’/’N’, erre akkor sem szabad indexet tenni, ha nagyon sok emberünk van, és nagyon gyakran kérdezzük le pl. a férfiakat!). Gondoljuk meg, hogy indexeljük-e azokat a mezőket, amiket gyakran módosítunk. Gondoljuk meg, hogy indexeljük-e azokat a mezőket, amiket gyakran módosítunk. Az UPDATE, INSERT, DELETE parancsoknál ugyanis mindig újra kell építeni az index struktúrát, ami időt vesz igénybe. Mindig azt kell mérlegelni, hogy azt szeretnénk-e, hogy a lekérdezés legyen gyors (ekkor lehetőleg indexelünk), vagy a módosítások (ekkor lehetőleg nem indexelünk).

32 Indexelés Ha egy mezőre gyakran hivatkozunk, ám mindig speciális kifejezéssel, akkor az adatbázis-kezelő nem fogja tudni használni az indexet. Ha egy mezőre gyakran hivatkozunk, ám mindig speciális kifejezéssel, akkor az adatbázis-kezelő nem fogja tudni használni az indexet. Ilyenkor válasszuk inkább az úgynevezett funkció alapú indexelést. Pl. hiába van egy tábla a, b, c oszlopok szerint rendezve, a Pl. hiába van egy tábla a, b, c oszlopok szerint rendezve, a SELECT * FROM t WHERE a + b * (c – 1) < 100; lekérdezést csak index használat nélkül, szekvenciálisan végignézve az egész táblát fogja tudni végrehajtani az adatbázis-kezelő. Lehetőség van viszont a következő funkció alapú index létrehozására: CREATE INDEX iFunkcio ON t (a + b * (c – 1)); Ez után a fenti lekérdezés már hatékony lesz.

33 Indexelés Ne hozzunk létre feleslegesen túl sok indexet egy táblára, mert bonyolult lekérdezéseknél az adatbázis-kezelő nem feltétlenül azt/azokat az indexeket választja a végrehajtáshoz, amik a leghatékonyabb eredményt adnák. Ne hozzunk létre feleslegesen túl sok indexet egy táblára, mert bonyolult lekérdezéseknél az adatbázis-kezelő nem feltétlenül azt/azokat az indexeket választja a végrehajtáshoz, amik a leghatékonyabb eredményt adnák. (Megjegyezzük, hogy lehetőség van egy lekérdezés megírásakor az adatbázis-kezelőt kényszeríteni arra, hogy bizonyos index-eket használjon, másokat pedig vegyen figyelmen kívül, amikor a lekérdezést futtatja.) (Megjegyezzük, hogy lehetőség van egy lekérdezés megírásakor az adatbázis-kezelőt kényszeríteni arra, hogy bizonyos index-eket használjon, másokat pedig vegyen figyelmen kívül, amikor a lekérdezést futtatja.) Több oszlopból álló (u.n. összetett) indexet akkor érdemes létrehozni, ha sok olyan lekérdezésünk van, aminek a WHERE feltételében egyszerre szűrünk ezekre az oszlopokra. Több oszlopból álló (u.n. összetett) indexet akkor érdemes létrehozni, ha sok olyan lekérdezésünk van, aminek a WHERE feltételében egyszerre szűrünk ezekre az oszlopokra.

34 Indexelés Összetett indexeknél az un. „felvezető részekre” a rendszerek hatékonyan tudnak keresni, tehát a definícióban fontos a mezők sorrendje. Összetett indexeknél az un. „felvezető részekre” a rendszerek hatékonyan tudnak keresni, tehát a definícióban fontos a mezők sorrendje. Pl. ha (a, b, c) oszlop szerint összetett indexet készítünk, akkor hatékonyan tudunk keresni abban az esetben, ha a WHERE részben a következő mező kombinációkra adunk feltételt: Pl. ha (a, b, c) oszlop szerint összetett indexet készítünk, akkor hatékonyan tudunk keresni abban az esetben, ha a WHERE részben a következő mező kombinációkra adunk feltételt: (a), (a, b), (a, b, c), de a rendszer nem fogja használni az indexet a következő mezőkombinációkra vonatkozó feltételek esetén: de a rendszer nem fogja használni az indexet a következő mezőkombinációkra vonatkozó feltételek esetén: (b), (c), (b,c).

35 Indexelés Előzőeknek megfelelően egy két oszlopot tartalmazó (x,y) indexet csak akkor hozzunk létre, ha (x,y)-ra együttesen nagyon gyakran keresünk (ilyenkor az összetett index hatékonyabb, mint külön-külön egy-egy index x-re és y-ra), (x,y)-ra együttesen nagyon gyakran keresünk (ilyenkor az összetett index hatékonyabb, mint külön-külön egy-egy index x-re és y-ra), de y-ra önmagában csak ritkán. de y-ra önmagában csak ritkán. Egyéb esetben inkább készítsünk egy indexet külön x-re és egyet külön y-ra. Ha minden eshetőségre be akarjuk biztosítani magunkat, akkor készítsünk egy (x,y) és egy (y) indexet is.

36 Indexelés Indexelt táblák használata esetén tisztában kell lennünk azzal, hogy mely függvények őrzik meg az indexelést, és melyek nem. Indexelt táblák használata esetén tisztában kell lennünk azzal, hogy mely függvények őrzik meg az indexelést, és melyek nem. Szerepeljen itt erre egy tipikus mintapélda (a datum mező DATE típusú, és erre van egy index): Szerepeljen itt erre egy tipikus mintapélda (a datum mező DATE típusú, és erre van egy index): SELECT * FROM t WHERE SELECT * FROM t WHERE TO_CHAR(datum, ‘YYYYMMDD’) = ‘20040301’; SELECT * FROM t WHERE SELECT * FROM t WHERE TRUNC(datum) = TO_DATE(‘20040301’, ‘YYYYMMDD’); Ez a két lekérdezés logikailag ugyanazt az eredményt adja. Ez a két lekérdezés logikailag ugyanazt az eredményt adja. Az elsőnél azonban az indexet a rendszer nem fogja használni, mert a TO_CHAR típuskonverziós függvény nem őrzi meg az indexelést. Az adatbázis-kezelő itt tehát végigmegy majd minden soron. Az elsőnél azonban az indexet a rendszer nem fogja használni, mert a TO_CHAR típuskonverziós függvény nem őrzi meg az indexelést. Az adatbázis-kezelő itt tehát végigmegy majd minden soron. A második verzió viszont tökéletes, mert a TRUNC függvény (ami egyszerűen levágja az idő részt, tehát csak a dátum rész marad, és DATE típussal tér vissza) megőrzi az indexelést, így tehát az index struktúrát használva könnyedén megtalálja a keresett sorokat. A második verzió viszont tökéletes, mert a TRUNC függvény (ami egyszerűen levágja az idő részt, tehát csak a dátum rész marad, és DATE típussal tér vissza) megőrzi az indexelést, így tehát az index struktúrát használva könnyedén megtalálja a keresett sorokat.

37 Jogosultságok Engedélyezés Engedélyezés GRANT ON TO [WITH GRANT OPTION] GRANT ON TO [WITH GRANT OPTION] lehetséges jogok: lehetséges jogok: SELECT SELECT INSERT INSERT DELETE DELETE UPDATE UPDATE ALL ALL

38 Jogosultságok Feladat: Feladat: Adjunk SELECT jogot az Geza azonosítójú felhasználónak a tTanar táblához! Megoldás: Megoldás: GRANT SELECT ON tTanar TO Geza Próbáljuk ki: Próbáljuk ki: SELECT * FROM.tTanar INSERT INTO … INSERT INTO … SELECT * FROM.tTanar

39 Jogosultságok Visszavonás Visszavonás REVOKE ON FROM REVOKE ON FROM

40 Jogosultságok Feladat: Feladat: Vonjuk vissza az előbb adott SELECT jogot! Megoldás: Megoldás: REVOKE SELECT ON tTanar FROM Geza


Letölteni ppt "Ami még kimaradt. Halmazműveletek A lekérdezések eredmény sorainak halmazát tekintve több lekérdezés között értelmezhetjük a szokásos halmaz műveleteket."

Hasonló előadás


Google Hirdetések