KENDE MÁRIA - NAGY ISTVÁN

SQL BEVEZETŐ
FELADATGYŰJTEMÉNY
TARTALOM
Előszó ............................................................................................................................. 2 Megjegyzés ..................................................................................................................... 2 0. Foglalkozás Adatbázis tervezés ...................................................................................................... 3 1. Foglalkozás Az SQL használatának alapjai, Egyszerű lekérdezések .............................................. 10 2. Foglalkozás Egytáblás csoportosító lekérdezések ........................................................................... 13 3. Foglalkozás Többtáblás lekérdezések, allekérdezések .................................................................... 22 4. Foglalkozás Interaktív környezet .................................................................................................... 30 5. Foglalkozás Adattáblák létrehozása, módosítása, tranzakciók, megszorítások .............................. 34 6. Foglalkozás Nézettáblák, felső-N analízis, ROWNUM .................................................................. 50 7. Foglalkozás SQL összefoglaló feladatsorok ................................................................................... 67 8. Foglalkozás Adatbázis-adminisztrátori ismeretek, jogosultság-kezelés ......................................... 100 Mellékletek Árnyék-objektumok .................................................................................................... 104 Hierarchikus szerkezetű adattáblák feldolgozása ....................................................... 106 Irodalom .......................................................................................................................... 110

2007. február 8.

ELŐSZÓ
E feladatgyűjtemény a tankönyvek (lásd az Irodalomban) kiegészítését, az "Adatbázis-kezelés" gyakorlatokra való önálló felkészülés további támogatását szolgálja. Az egyes Foglalkozások anyagában természetesen ismertnek tételezzük fel, és ezért fel is használjuk a tankönyvekben részletesen tárgyalt, valamint a korábbi Foglalkozásokban bemutatott anyagot. A megoldásoknál célszerű betartani a "02_Mire ügyeljünk.doc" file-ban írottakat. A feladatok az alábbi emp és dept táblákra vonatkoznak: >> Az emp tábla (14 soros):
EMPNO ---------7839 7698 7782 7566 7654 7499 7844 7900 7521 7902 7369 7788 7876 7934 ENAME ---------KING BLAKE CLARK JONES MARTIN ALLEN TURNER JAMES WARD FORD SMITH SCOTT ADAMS MILLER JOB MGR HIREDATE SAL COMM DEPTNO --------- ---------- ---------- ---------- ---------- ---------PRESIDENT 1981-11-17 5000 10 MANAGER 7839 1981-05-01 2850 30 MANAGER 7839 1981-06-09 2450 10 MANAGER 7839 1981-04-02 2975 20 SALESMAN 7698 1981-09-28 1250 1400 30 SALESMAN 7698 1981-02-20 1600 300 30 SALESMAN 7698 1981-09-08 1500 0 30 CLERK 7698 1981-12-03 950 30 SALESMAN 7698 1981-02-22 1250 500 30 ANALYST 7566 1981-12-03 3000 20 CLERK 7902 1980-12-17 800 20 ANALYST 7566 1987-04-19 3000 20 CLERK 7788 1987-05-23 1100 20 CLERK 7782 1982-01-23 1300 10

>> A dept tábla (4 soros):
DEPTNO ---------10 20 30 40 DNAME -------------ACCOUNTING RESEARCH SALES OPERATIONS LOC ------------NEW YORK DALLAS CHICAGO BOSTON

A táblák értelmezése: Az emp tábla a feladatokban szereplő vállalat dolgozóinak adatait tartalmazza. E tábla oszlopneveire a következő magyar nevekkel fogunk hivatkozni: empno – a dolgozó azonosítója, ename – a neve, job – a munkaköre, mgr – a főnöke azonosítója, hiredate – a belépésének dátuma, sal – a fizetése, comm – a jutaléka, deptno – a részlegének azonosítója. A dept tábla a vállalat részlegeinek adatait tartalmazza. E tábla oszlopneveire a következő módon fogunk hivatkozni: deptno – a részleg azonosítója, dname – a neve, loc – a telephelye. MEGJEGYZÉS E feladatgyűjtemény pdf formátumban a www.orakulum.com honlapon található az "Adatbáziskezelés" témakör kiválasztása után az "AKT (Adatbázis-Kezelés Technológiája)" menüpont kijelölésével a Labor almenüpontban letölthető 413_Labor alkönyvtárban, ahol egyéb (részben ebben az anyagban is hivatkozott) kiegészítő oktatási anyagok is találhatók. (E file az Acrobat cég www.acrobat.com honlapjáról ingyenesen letölthető, és a saját gépen telepíthető AcrobatReader programja segítségével olvasható.) Jelen dokumentum szerzői jogi védelem alatt áll, kizárólag az egyéni felkészülés céljára használható. Csak számítógépen olvasható, sem a teljes dokumentum, sem annak bármely része nem nyomtatható ki, nem másolható le, illetve nem adható ki a szerzők írásos engedélye nélkül.

#01_SQL Bevezető Feladatgyűjtemény [26]

-2-

0. Foglalkozás

Adatbázis Tervezés
Részletesebben lásd [1]: II. rész, 7. fejezet

RELÁCIÓ-ALGEBRAI ÁTTEKINTÉS
(Jelölések, definíciók) Elemek: a, b, c, ... Halmazok: A, B, C, ... Halmaz megadása (elemei felsorolásával): pl. A = {a, b, c}, ekkor pl. a ∈ A, azaz a eleme A-nak Halmaz megadása (az elemek tulajdonságának megadásával): pl. B = { x | x >= 50, x < 200 } A halmazokat rendezetleneknek tekintjük (esetenként a rendezetlen halmaz kifejezést is használjuk), vagyis bennük az elemek sorrendje tetszőleges, például {a, b, c} = {c, b, a}. A gyakorlatban a legtöbb csoportosítás ilyen, például Péter barátai: { Laci, Zoli, Attila }. Részhalmaz: Egy B halmaz részhalmaza egy A halmaznak, ha B minden eleme az A-nak is eleme. Jelölése: B ⊆ A. Például {c, a} ⊆ {a, b, c}. Rendezett halmaz (más néven vektor): pl. q = 〈a, b, c〉 A rendezett halmazokban az elemek sorrendje kötött, a sorrendjük megváltoztatásával már egy másik rendezett halmazhoz jutunk, így nyílván 〈a, b, c〉 ≠ 〈c, b, a〉. Ilyen például egy pont helyvektora valamely koordinátarendszerben, vagy a vezeték név – kereszt név páros. (Nyilván nem mindegy, hogy valakinek Gábor Miklós, vagy Miklós Gábor a neve.) Halmazok Descartes szorzata: Például A = {a, b, c} és B = {0, 1} esetén A × B = {〈a, 0〉, 〈a, 1〉, 〈b, 0〉, 〈b, 1〉, 〈c, 0〉, 〈c, 1〉}. A Descartes szorzat tehát egy rendezett elempárosokat tartalmazó halmaz. A halmazok Descartes szorzatát értelemszerűen kiterjeszthetjük kettőnél több tényezőre is, ekkor persze már nem párosokról, hanem hármasokról, négyesekről, vagy általánosabban n-esekről beszélünk. Ezeket az n-eseket az adatbázis-kezelésben rekordoknak nevezzük. Attribútumok (tulajdonság-halmazok): A, B, C, ... Tehát az attribútumok maguk is halmazok. Attribútum halmaz: pl. Q = { A, B, C } Funkcionális függőség: pl. f = { A, B } → { C, D, E } Gyakorlati példa fdolgozó = {NÉV, OSZTÁLY} → {MUNKAKÖR, MUNKAKÖRI_FIZETÉS, JUTALÉK} A funkcionális függőségeket (melyek tulajdonképpen többértékű függvények) a gyakorlatban röviden csak függőségeknek szoktuk nevezni. Kulcs (elsődleges kulcs, primary key) néven nevezzük a függőség baloldalán álló (úgynevezett elsődleges) attribútumok összességét. Ha a kulcs csak egyetlen attribútumból áll, akkor egyszerű kulcsról, egyébként összetett kulcsról beszélünk. A függőség jobboldalán álló attribútumokat másodlagos attribútumoknak nevezzük. A fenti példában tehát a Kfdolgozó = {NÉV, OSZTÁLY} attribútumhalmaz kulcs, míg a Qfdolgozó = {MUNKAKÖR, MUNKAKÖRI_FIZETÉS, JUTALÉK} a másodlagos attribútumok halmaza.

#01_SQL Bevezető Feladatgyűjtemény [26]

-3-

Függőségek ekvivalens egyesítése és felbontása: Két függőség ekvivalens módon egyesíthető, ha baloldaluk azonos. Ekkor az egyesített függőség jobboldala mindkét függőség jobboldalának attribútumait tartalmazza. Az egyesítés jele: • Például f = { A, B } → { C, D } és g = { A, B } → { D, E, F } esetén: f • g = { A, B } → { C, D, E, F } Minden függőség ekvivalens módon bontható fel olyan függőségek halmazára, melyekben a baloldalak megegyeznek az eredeti függőség baloldalával, a jobboldalak pedig az eredeti függőség jobboldalának egy-egy attribútumát tartalmazzák. Az egyesíthetőség és felbonthatóság fenti ekvivalenciái a gyakorlatban azt jelentik, hogy mivel elvben mindegy, hogy például az f • g függőséget, vagy az f, g függőségpárost használjuk, ezért gyakorlati szempontok alapján választhatunk. Relációséma az f függőség fölött: Rf 〈A, B, C, D, E〉 = A × B × C × D × E × F A relációséma a pontos algebrai jelentése szerint tehát a benne szereplő attribútumoknak a megadásuk sorrendjében vett Descartes-szorzata, vagyis halmaz, melynek elemei attribútum-érték n-esek, vagyis rekordok. A relációsémát a továbbiakban azonosítani fogjuk egy olyan adattáblával, melynek oszlopnevei a relációséma attribútumai, a sorai pedig a relációséma rekordjai. Mivel az egyes attribútumok (tulajdonsághalmazok) a megengedett értékek mindegyikét tartalmazzák, ezért a relációséma ebben az algebrai értelemben az összes lehetséges tulajdonság érték összes lehetséges csoportosítását tartalmazza, ami nyilván sokkal több nemcsak annál, ami valaha előfordulhat, hanem annál is, ami egyáltalán lehetséges. Például egy ember lehet 1 m magas és 18 kg testsúlyú (kb. 6 éves korában), és lehet 2 m-es, 150 kgos, de egész biztos nem lehet 1 m-es és 150 kg-os. A fentiek miatt a relációsémát a gyakorlatban inkább egy adattábla szerkezetének (más néven sémájának) megadására használjuk, és az őt reprezentáló adattábla helyett a gyakorlatban ténylegesen tárolt rekordokat tartalmazó adattáblával fogunk dolgozni. Ennek algebrai modelljét fogjuk a továbbiakban relációnak nevezni, mely tehát algebrailag nem más, mint a relációséma részhalmaza, gyakorlatilag pedig a ténylegesen feltöltött adattábla. Reláció az f függőség fölött: rf 〈A, B, C, D, E〉 ⊆ Rf 〈A, B, C, D, E〉 Gyakorlati példa: Jelölje dolgozó az fdolgozó függőség fölötti relációt. E reláció egy lehetséges értéke ekkor: dolgozó〈NÉV, OSZTÁLY, MUNKAKÖR, MUNKAKÖRI_FIZETÉS, JUTALÉK〉 = {〈Tóth Pál, TMK, asztalos, 60000, 30000〉, 〈Kis Jolán, Bérosztály, könyvelő, 80000, 0〉, 〈Kis Elemér, Áruforgalmi osztály, eladó, 50000, 60000〉} A relációk elemeit rekordoknak is nevezzük, és a relációkat a gyakorlatban olyan adattáblának nevezett táblázatokban ábrázoljuk, ahol a rekordok alkotják a sorokat, az attribútumok rekordbeli értékei pedig az oszlopokat. Egy relációsémában, illetve relációban a rajta értelmezett függőség elsődleges, azaz kulcs- és másodlagos attribútumait a függőségnél mondottakkal azonos módon használjuk. Valamely r reláció rekordjainak attribútumkészletét (azaz tulajdonsághalmazát) ki tudjuk terjeszteni egy s reláció attribútumaira, ha az s valamely Ks kulcsának minden attribútuma az r-nek is attribútuma. Ekkor a Ks kulcsot az r reláció idegen kulcsának is nevezzük (lásd az alábbi mintapéldát). Adatbázis: Általános értelemben adatbázisnak nevezzük valamely nyilvántartási feladatban fontosnak tekintett tulajdonságú tárolt objektumok (adat- és nézettáblák, jogosultságok, tárolt

#01_SQL Bevezető Feladatgyűjtemény [26]

-4-

alprogramok, triggerek, stb. összességét, szűkebb értelemben egy adott alkalmazáshoz tartozó adattáblák összességét. A nem megfelelő szerkezetű adattárolás több veszélyt is rejt magában (ezeket adatbázisanomáliáknak nevezzük, lásd e foglalkozási anyag végén), mely veszélyek elhárítása érdekében egy normalizálásnak nevezett adatbázis-tervezési eljárást használunk (lásd az alábbi mintapéldát).

ADATBÁZIS TERVEZÉS
(Vázlatos áttekintés) Az adatbázis tervezés, vagyis a normalizálás során a tárolni kívánt tulajdonságok (attribútumok) összességét kijelölő kezdeti adatbázis sémából (az úgynevezett ősmodellből), valamint az e tulajdonságok között felismert összefüggésekből (a függőségekből) indulunk ki. A függőségeken elvégzett transzformáció-sorozat (vagyis a tényleges normalizálás) eredményeként kapott, úgynevezett eredmény függőségek mindegyikéhez egyértelműen hozzárendelt eredmény relációsémák összessége alkotja az eredmény adatbázis sémát. Végül az eredmény relációsémákat reprezentáló adattáblák együttesen alkotják az eredetileg kijelölt nyilvántartási feladat adatbázisát. A normalizálás egyes lépései során a normalizálás adott szintjén létező függőségekre vonatkozóan bizonyos követelményeket fogalmazunk meg. Ezeket a követelményeket normálformáknak nevezzük. Mi a normalizálás folyamatát négy; az első, a második, a harmadik, és a BoyceCodd normálforma fázisain keresztül valósítjuk meg. Ezek jelölése; 1NF, 2NF, 3NF és BCNF. Az alábbiakban az ezekben megfogalmazott követelményeket foglaljuk össze: 1.) Minden attribútum egyszerű (vagyis csak egyetlen adatot tartalmaz) [1NF]. 2.) A másodlagos attribútumok mindegyikét a kulcsattribútumok csak együttesen határozzák meg (vagyis nincs részleges függés) [2NF]. 3.) A másodlagos attribútumok egymástól (funkcionálisan) függetlenek (vagyis nincs belső függés) [3NF]. 4.) A kulcsattribútumoknak nincs olyan részhalmaza, mely más kulcs- vagy másodlagos attribútumoktól (funkcionálisan) függne (vagyis nincs kulcstörés) [BCNF]. A magasabb normálformákban értelemszerűen teljesülniük kell az alacsonyabb normálformákban megfogalmazott követelményeknek. Az alábbi mintapéldában a feladat egy olyan adatbázis séma megtervezése lesz, melyben egy ősmodellből (kiindulási adatbázis sémából) el kell jutni a BCNF normálformában megfogalmazott követelményeket is teljesítő (BCNF alakú) adatbázis sémához. Az adatbázis-tervezés első lépése tehát a tárolni kívánt tulajdonságok (attribútumok) összességének (az ősmodell) kijelölése. Ez egy kreatív, intellektuális tevékenység, mely alapos körültekintést igényel, ám a tervezés eljárásának szempontjából önkényes. Az ősmodellben már minden attribútum rögzített (bár esetleg összetett) adattípussal rendelkezik, vagyis az ősmodellel kijelöltük a tárolni kívánt objektum típusát, az ősobjektumtípust. Felmerülhet ezek után a kérdés, miért nem ezt implementáljuk, miért van szükség további lépésekre. A válasz lényege (részletesen lásd lásd [1]: II. rész, 7. fejezet, 226-227), hogy el akarjuk kerülni az úgynevezett adatbázis-anomáliákat, vagyis az adatvesztést és az inkonzisztenciát (tartalom-ellentmondást). A tervezési folyamat, a normalizálás, első, és egyben legfontosabb lépése, az attribútumok között összefüggések, az úgynevezett függőségek felismerése. Ez is intellektuális, nem automatizálható lépés, ám már semmiképpen nem önkényes. Az adattárolás céljának, valamint a tárolni kívánt attribútumoknak (tulajdonságoknak) az ismeretében, a függőségek felírása tulajdonképpen az általunk létrehozni kívánt zárt világ belső kapcsolatainak, összefüggéseinek feltérképezését jelenti.

#01_SQL Bevezető Feladatgyűjtemény [26]

-5-

Maga a normalizálás a felírt függőségeknek a normálformák követelményei szerinti (lényegében mechanikus) transzformációját jelenti, melynek során (és ez nagyon lényeges!) automatikusan (!) elkülönülnek az ősmodell ősobjektumtípusából az adatmodell célszerű építőkövei, az elemi objektumtípusok, melyeket relációsémáknak is nevezünk, és amelyeknek implementációi maguk az adattáblák. Egyszerűbb feladatok esetén ezek az elemi objektumtípusok (relációsémák, adattáblák), szinte ránézésre elkülöníthetők (Raktár, Beszállítók, Vevők, Rendelések, stb. táblák), ám egy összetett feladat esetén csak a normalizálási folyamat „automatizmusa” adhat garanciát az „üzembiztosan” használható adatmodell létrehozására. Végül egy fontos gyakorlati javaslat. Mind a függőségek feltérképezésénél, mind a normalizáció transzformációs lépéseinél célszerű az összes lehetséges ekvivalens függőség-egyesítést elvégezni (lásd feljebb). Ez a gyakorlatban azt jelenti, hogy kevesebb adattáblát kell használnunk, elvileg pedig azt, hogy ugyanannak az objektumtípusnak egyetlen relációsémában tartjuk az attribútumait.

EGY ADATBÁZIS-TERVEZÉSI MINTAPÉLDA
Legyen egy adatbázis sémája: dolgozó〈 NÉV, OSZTÁLY, MUNKAKÖR, MUNKAKÖRI_FIZETÉS, JUTALÉK, FŐNÖK, TELEPHELY_CÍME 〉, ahol feltételezzük, hogy a.) a NÉV és az OSZTÁLY adatok csupán együtt azonosítják egyértelműen a dolgozót, b.) egy OSZTÁLY egy telephelyen található. Alakítsa át ezt az adatbázis sémát BCNF alakra. (Mutassa be a tervezés folyamatát és adja meg az elsődleges és az idegen kulcsokat is.) MEGOLDÁS 1. lépés (A tárolandó attribútumok kijelölése – az ősmodell relációsémája) dolgozó〈 NÉV, OSZTÁLY, MUNKAKÖR, MUNKAKÖRI_FIZETÉS, JUTALÉK, FŐNÖK, TELEPHELY_CÍME 〉 2. lépés (A függőségek felismerése) A függőségeket részben az attribútumok szövegesen megadott kapcsolatai, részben a „józan ész” megfontolása alapján ismerjük fel. a.) Az „a NÉV és az OSZTÁLY adatok csupán együtt azonosítják egyértelműen a dolgozót” kapcsolatból az alábbi függőség következik: fdolgozó = { NÉV, OSZTÁLY } → { MUNKAKÖR, MUNKAKÖRI_FIZETÉS, JUTALÉK, FŐNÖK, TELEPHELY_CÍME } b.) Az „egy OSZTÁLY egy telephelyen található” kapcsolatból következik: fosztályok = { OSZTÁLY } → { TELEPHELY_CÍME } Mivel a NÉV és az OSZTÁLY egyértelműen azonosítják a dolgozót, így a „józan ész” alapján nyilván felírható ffőnök = { OSZTÁLY } → { FŐNÖK }, a fenti két függőség pedig egyesíthető, hiszen a baloldaluk azonos. Így kapjuk: fosztályok1 = { OSZTÁLY } → { FŐNÖK, TELEPHELY_CÍME } c.) A „józan ész” alapján felírható az alábbi függőség:

#01_SQL Bevezető Feladatgyűjtemény [26]

-6-

így egyúttal BCNF-ben is van. BCNF: a BCNF feltétele. TELEPHELY_CÍME } fmunkakörök = { MUNKAKÖR } → { MUNKAKÖRI_FIZETÉS } 5. mivel a bal. lépés (A függőségek normalizálása) A normalizálás folyamatában tulajdonképpen egymásután vizsgáljuk a függőségeket. 4. Az fosztályok1 függőséget kiemelve az fdolgozó függőségből.) 3. és a baloldalán csak egyetlen attribútum áll.1. mivel jobboldalán az fmunkakör függőség. JUTALÉK } függőséget. továbbá a baloldalának egyetlen valódi részhalmaza se függjön egyetlen elsődleges.3. valamint az elsődleges kulcsok és az idegen kulcsok az alábbi módon írhatók fel: dolgozók〈 NÉV. 2NF: az fosztályok1 2NF-ben is van. lépés (Az eredmény függőségek összefoglalása) Alábbiakban összefoglaljuk a fenti normalizálási folyamat során kapott eredmény függőségeket: fdolgozó2 = { NÉV.és a jobboldalon is csak egyetlen attribútum áll. BCNF: mivel az fosztályok1 3NF-ben van. JUTALÉK } fosztályok1 = { OSZTÁLY } → { FŐNÖK. OSZTÁLY } → { MUNKAKÖR. egy adott függőség megítélése során azonban figyelembe kell venni az attribútumaira vonatkozó többi függőséget is (például az éppen vizsgált függőségnek egy másik nem belső függősége-e. 3.fmunkakörök = { MUNKAKÖR } → { MUNKAKÖRI_FIZETÉS } 3.2. stb. 3. vagyis az adattáblák halmaza). sem feltételezhető kapcsolat (azaz függőség) nincs. mivel nincs benne összetett attribútum. kapjuk az fdolgozó1 = { NÉV. lépés (az fdolgozó függőség vizsgálata) 1NF: az fdolgozó 1NF-ben van. mely már 3NF alakban van. OSZTÁLY } → { MUNKAKÖR. 3NF: az fosztályok1 3NF-ben is van. mivel a másodlagos attribútumok között sem megadott. mint belső függés található. mivel az fosztályok1 függőség értelmében az fdolgozó függőség másodlagos (a függőség jobboldalán álló) attribútumainak némelyike nem függ az elsődleges attribútumok (a baloldal) mindegyikétől. hogy a függőség 3NF-ben legyen. mivel nincs benne összetett attribútum. 2NF: az fdolgozó nincs 2NF-ben. JUTALÉK 〉 . mert az attribútumok megadott (vagy feltételezhető) tulajdonságaiból ilyen függések nem következnek. #01_SQL Bevezető Feladatgyűjtemény [26] -7- . lépés (az fmunkakörök függőség vizsgálata) Az fmunkakörök függőség már BCNF-ben is van (tehát 1NF-ben. lépés (az fosztályok1 függőség vizsgálata) 1NF: az fosztályok1 1NF-ben van. JUTALÉK } függőséget. OSZTÁLY } → { MUNKAKÖR. Ez utóbbi az fdolgozó2 függőség esetén azért teljesül. mely már nyilvánvalóan 2NF alakban van. kapjuk az fdolgozó2 = { NÉV. 3NF: az fdolgozó1 nincs 3NF-ben. Ezt kiemelve. lépés (Az eredmény adatmodell felírása) Az eredmény függőségek alapján az eredmény adatmodell (tehát az eredmény relációsémák. MUNKAKÖR. MUNKAKÖRI_FIZETÉS. vagy másodlagos attribútumtól. OSZTÁLY. mivel a másodlagos attribútumok mindegyike az elsődleges attribútumok mindegyikétől függ (hiszen a baloldalon csak egyetlen attribútum áll). 2NF-ben és 3NF-ben is).

és így nem BCNF alakú. ugyanis így egyszerre szerepelhet az adatbázisban a régi és az új cím. azaz ismétlődő csoportokat tartalmaznak) eleve alkalmatlanok arra. ahol a Kmunkakörök = { MUNKAKÖR } attribútum halmaz a munkakörök relációra vonatkozó elsődleges kulcsa. FŐNÖK. KIADÓ_CÍME 〉. hogy adattáblákkal reprezentáljuk. hogy ezt mindazon rekordon el kell végezni. hogy 2NF alakú (tehát 1NF alakú is). tehát módosítani szeretnénk e kiadó címét. és ez összhangban volt eredeti célkitűzésünkkel. akkor már önmagában kellemetlen. továbbá egyben azt is megvizsgáljuk. OSZTÁLY } attribútum halmaz a dolgozók relációra vonatkozó elsődleges kulcsa. A relációsémákban a szokásoknak megfelően aláhúztuk az elsődleges kulcsok attribútumait. hogy tévesztés miatt különböző címadatok kerülnek az adatbázisba. ahol a Kosztályok = { OSZTÁLY } attribútum halmaz az osztályok relációra vonatkozó elsődleges kulcsa munkakörök〈 MUNKAKÖR. melyről tudjuk. MUNKAKÖRI_FIZETÉS 〉 . Az alábbiak során tekintsük a korábban már bevezetett KATALÓGUS’〈 ISBN. ha ez a módosítási folyamat bármilyen okból (például egy áramkimaradás. vagy rendszerösszeomlás miatt) megszakad. hanem „kézzel” (tehát közvetlen adatátírással) történik. Tegyük fel. 3NF és BCNF alakra hozása érzékelhető redundancia-csökkenéssel járt (az 1NF még nem!). TELEPHELY_CÍME 〉 . ♣ Az [1] könyv II. hiszen az olyan relációsémák. hogy – mintegy a fejezet lezárásaként – áttekintsük e rendellenességeket (más szóval anomáliákat). illetve az Fmunkakörök = { MUNKAKÖR } attribútum halmazok pedig a dolgozók relációnak az osztályok. Ha az adatbázisunk modellje a fenti katalógus’ relációséma. melyek nincsenek 1NF alakban (tehát összetett attribútumokat. Módosítási anomália Módosítási anomáliának nevezzük azt a jelenséget. amelyben az adott kiadó szerepelt (ezt a redundancia okozza). az Fosztályok = { OSZTÁLY }. Ilymódon tehát minden eredmény függőséghez egyértelműen hozzárendeltünk egy relációsémát a függőség attribútumainak összességével. fogalmait. hogy valamelyik kiadó elköltözik. osztályok〈 OSZTÁLY. relációsémát. ADATBÁZIS-ANOMÁLIÁK♣ A fentiekben áttekintettük az adatbázis-tervezés alapvető lépéseit. fejezetéből átvéve -8- #01_SQL Bevezető Feladatgyűjtemény [26] . A „Normalizálás” alfejezet bevezetőjében azonban utaltunk arra is. Eljött az ideje annak. ÁR. hogy a normalizálással bizonyos rendellenes adatbázisműködéseket is ki szeretnénk zárni. KÖNYV_CÍME. Abban az esetben pedig. akkor még az is előfordulhat. Az adatbázismodell 2NF. részének 7. hogy az általunk bevezetett eszközök segítségével e rendellenességek kiküszöbölhetőkké váltak-e. amikor az adatbázis valamely adatának a megváltoztatása során történő hiba az adatbázis konzisztenciáját (azaz ellentmondásmentességét) veszélyezteti. Induljunk ki az 1NF alakból. de nem 3NF alakú. TÉMA.ahol a Kdolgozók = { NÉV. illetve a munkakörök relációra vonatkozó idegenkulcsai. KIADÓ. KIADÁSI_ÉV. Az viszont már az adatbázis konzisztenciáját veszélyezteti. ha ez a módosítás nem egy megfelelő SQL utasítással.

vagy hibásnak minősült adat törlése során információvesztés történik. 1994. További ajánlott irodalom az adatbázis-tervezéshez Halassy Béla: Az adatbázis-tervezés alapjai és titkai. 2000. Miután a kiadó független e kulcstól. így az adataival önmagában nem lehet elvégezni a bővítést. ilymódon ha észrevesszük a hibát. melynek kiadója csak ezzel a könyvvel szerepelt a kínálatban. 2002. amikor valamely adat bevitele azért bizonyul lehetetlennek. Nagy baj ez. így enélkül nem lehet adatot bevinni. illetve a tranzitív függések megszüntetésével. ha például egy kiadó címét rosszul írjuk (csak észrevesszük előbb-utóbb). Gondoljunk ismét a fenti katalógus’ relációsémára. Stevenson I.Könnyen belátható. mert rá vonatkozóan nincs kulcs. csak most nem elveszik a cím. hogy majd rendelni tudjanak tőlük (tegyük fel. ha ez a cím különbözőképpen szerepel. Nemzeti tankönyvkiadó.. melyeknek az ISBN számuk a kulcsadatuk. Feltehető ezekután a kérdés.: Adatbázis-kezelés az Oracle-rendszerben. J. A könyv és a kiadója két különböző objektum. Ezt követően szeretné beírni az adatbázisba ennek a kiadónak az adatait. 2005.: Oracle-tervezés. könnyen ki tudjuk javítani. D. Panem. Ám egy irredundáns adatbázisban ez nem okoz inkonzisztenciát. Békéssy András. IRODALOM [1] Kende M. hogy a könyvesboltból (melynek ez a katalógusa) kifogy egy olyan könyv. – Kotsis D. Tegyük fel. hogy fenti katalógus’ relációsémát alkalmazó könyvesbolt vezetője együttműködési szerződést ír alá valamelyik kiadóval. A külön történő tárolás egy belső függést számolt fel. Bővítési anomália Bővítési anomália következik be olyankor. D. hogy kitöröltük a könyvet a katalógusból. A belsőfüggések felszámolása. úgyhogy most már rendelni sem tudunk belőle. IDG. A problémát ezúttal is az okozza. hogy ehhez az adatbázishoz kapcsolódik egy rendeléskezelő program is). vagyis az adatbázis 3NF alakra hozása nyilvánvalóan ezt a problémát is megoldja. de a rekord kulcsa csak az egyik objektumnak kulcsa. Az előbbihez hasonló problémával kell szembenéznie. hanem már be se tudja írni.. Mi is okozta ezt a rendellenességet? Láthatóan az.Alapvetés. Ullman. Nem az a végzetes baj tehát. Tegyük fel. Márpedig az új kiadó adataihoz nem rendelhető ISBN szám. tehát különböző relációban (külön adattáblában) kell tárolni őket. Törlési anomália Törlési anomália fordul elő olyankor. hanem az. kitöröltük a kiadójának adatait is. Ennek az az oka. Ensor. tehát az adatbázis BCNF alakjában a módosítási anomália veszélye elhárul. #01_SQL Bevezető Feladatgyűjtemény [26] -9- . ez ellen nincs védelem. melyek mindegyike fontos az adatbázisban. Halassy Béla: Adatmodellezés. vagyis a részleges függések. mivel az által. Akadémiai Kiadó. hogy egy rekordban két különböző objektum adatait tároljuk. Ezt kijavítani egy nagy adatbázisban (mely erre az adatra nézve nem irredundáns) szinte lehetetlen. Demetrovics János: Adatbázis-szerkezetek. Panem. Widom J. hogy egy BCNF alakú adatbázisban a módosítás nem okozhat-e hibát? Természetesen okozhat! Hibás adatot bármikor be lehet vinni egy adatbázisba. hogy a redundancia. tehát ennek az anomáliának az elhárításához az adatbázis 3NF alakja szükséges. – Nagy I. 1998. Kossuth. hogy a katalógus’ relációsémájú adatbázis objektumai könyvek.: Adatbázis-rendszerek . 2002. amikor valamely fölöslegesnek. külön relációséma megalkotása. hogy a kiadó adatait együtt tároltuk a könyv adataival.

akiknek nevében az "R". azon belül pedig a foglalkozás szerint. és szeptember 30. A lista fejléce legyen ”Név”. ”Fizetés”. vagy az "A" betű szerepel. „Név”. Feladat Listázza azon dolgozók nevét jövedelmét és részlegét. és jövedelmük (fizetés+jutalék) 1000 és 2500 USD között van. részleg-azonosítóját.6.2. foglalkozását.1. nevét. „Belépési dátum”. hogy „nincs jutalék”.) listázza a salesman foglalkozású dolgozók azonosítóját. "00-2_Bevezetés az SQL-Plus-ba (Példatár). T1. foglalkozását. hathavi fizetését és hathavi jövedelmét.1. fejezet.7. T1. fizetését és jutalékát. 1. rendezzen a dolgozók neve szerint.4. Feladat Listázza 1981-től dolgozók nevét. 1. között léptek be a vállalathoz. ”Jövedelem”.nap. T1. Foglalkozás Az SQL használatának alapjai. az a szöveg jelenjen meg.5. jövedelmét és belépési évszámát elsődlegesen a belépési évszám szerint. Feladat Írassa ki azon dolgozók munkakörét és fizetését.pdf" file FELADATGYŰJTEMÉNY 1. Feladat Írassa ki a salesman és a clerk munkakörű azon dolgozók nevét. akik nem kapnak jutalékot.10 - . T1. A lista legyen rendezett a részleg szerint. Egyszerű lekérdezések Részletesebben lásd [2]: 3. Feladat Írja ki azon dolgozók nevét. akiknek jövedelme nincs az 1500-2500 USD tartományban. akiknek fizetése nincs az 1500-2500 USD tartományban. fizetését és belépési dátumát. továbbá a Jutalék oszlopban azoknál. T1. ”Munkakör”. nevét. március 1.8. Feladat Belépési dátum szerint (év. munkakörét. #01_SQL Bevezető Feladatgyűjtemény [26] .9. A lista fejléce legyen ”Név”. munkakörét. továbbá 1981. Feladat Készítsen listát az összes alkalmazottról úgy. hogy a lista fejléce: „Azonosító”. TOVÁBBI FELADATOK T1. akik 1981-ben léptek be a vállalathoz. „Jutalék”. jutalékát. fizetését. Feladat Írassa ki azon alkalmazottak azonosítóját. akiknek jutaléka meghaladja a fizetésük 70 %-át. másodlagosan a dolgozók neve szerint rendezve. melléklet.3. Feladat Írassa ki azon dolgozók nevét. foglalkozását. akik 1000 USD-nél többet keresnek.hónap. A lista legyen belépési dátum szerint rendezve. ”Munkakör”. „Foglalkozás”. T1. munkakörét és jövedelmét.

T1. Feladat A részlegazonosító szerint csoportosítva listázza azokat a dolgozókat. másodlagosan pedig a fizetés szerint csökkenően legyen rendezve. akiknek fizetése 2000 és 5500 USD közötti érték. Feladat Írassa ki minden jutalékkal rendelkező alkalmazott nevét. A keletkezett lista elsődlegesen a részlegazonosító szerint növekvően. főnökének azonosítóját.11 - . #01_SQL Bevezető Feladatgyűjtemény [26] . T1.11.10. A lista legyen a főnök azonosítója és az alkalmazottak neve szerint rendezett. jutalékát.

akiknek fizetése nincs az 1500-2500 USD tartományban. munkakörét és jövedelmét. ”Munkakör”. Eredmény Név ---------ADAMS JAMES MARTIN MILLER SMITH Munkakör Jövedelem --------.---------CLERK 1100 MANAGER 2850 ANALYST 3000 CLERK 950 MANAGER 2975 PRESIDENT 5000 SALESMAN 1250 CLERK 1300 ANALYST 3000 CLERK 800 SALESMAN 1250 11 sor kijelölve. job AS "Munkakör". ”Munkakör”. A lista fejléce legyen ”Név”. #01_SQL Bevezető Feladatgyűjtemény [26] .1. sal + NVL(comm. job AS "Munkakör". Megoldás SELECT ename AS "Név".---------CLERK 1100 CLERK 950 SALESMAN 2650 CLERK 1300 CLERK 800 5 sor kijelölve.0) BETWEEN 1500 AND 2500 ORDER BY "Név". Feladat Írassa ki a salesman és a clerk munkakörű azon dolgozók nevét. rendezzen a dolgozók neve szerint. 1. ”Jövedelem”. A lista fejléce legyen ”Név”. akiknek jövedelme nincs az 1500-2500 USD tartományban.12 - .MEGOLDÁSGYŰJTEMÉNY 1.2.0) AS "Jövedelem" FROM emp WHERE UPPER(job) IN (’SALESMAN’. Eredmény Név ---------ADAMS BLAKE FORD JAMES JONES KING MARTIN MILLER SCOTT SMITH WARD Munkakör Fizetés --------. Feladat Írassa ki azon dolgozók munkakörét és fizetését. Megoldás SELECT ename AS "Név". ”Fizetés”.’CLERK’) AND NOT sal + NVL(comm. sal AS "Fizetés" FROM emp WHERE NOT sal BETWEEN 1500 AND 2500 ORDER BY "Név".

a paritási csoportokban csökkenő átlagjövedelem szerint rendezve. TOVÁBBI FELADATOK T2.4.3.7. Feladat Írassa ki a hónap páros és páratlan sorszámú napjain belépett dolgozók átlagfizetését és átlagjövedelmét. napja). a belépésük dátumát. T2. Feladat Listázza 1981-től belépési évenként a legkisebb jövedelmeket. Feladat Listázza főnökönként a beosztottak összjövedelmét. 2. Feladat Írassa ki az első hat 1000 USD-os fizetésosztályban (0-999. Feladat Listázza részlegenként és munkakörönként a legalább 1000 USD-os átlagjövedelmeket. hogy a hónap. 1000-1999. 2. a paritási csoportokban csökkenő átlagjövedelem szerint rendezve. T2.) dolgozók számát valamilyen célszerű rendezésben. Foglalkozás Egytáblás csoportosító lekérdezések Részletesebben lásd [2]: 2.5.2. 2. 2. T2. Feladat Írassa ki alfabetikus sorrendben az azonos betűvel kezdődő nevű dolgozók számát. 2. fejezet FELADATGYŰJTEMÉNY 2.13 - .1. valamint azt. illetve a hét hányadik napján léptek be (például péntek a hét 5.8.9. stb. Feladat Listázza 1981-től éves csoportosításban a dolgozók nevét. Feladat Listázza ki a dolgozók nevét.2. Feladat Írassa ki a hét páros és páratlan sorszámú napjain belépett dolgozók átlagfizetését és átlagjövedelmét. #01_SQL Bevezető Feladatgyűjtemény [26] .10.11. Feladat Írassa ki munkakörönként a legkisebb és a legnagyobb fizetéseket valamilyen célszerű rendezésben. munkakörét és jövedelmét a dolgozók neve szerint rendezve. Feladat Írassa ki évenként a belépett dolgozók számát. 2.6.

'YYYY')) >= 1981 ORDER BY "Belépési év". A Smith maradt ki.14 - . Megjegyzés 1.---------SALESMAN 1900 MANAGER 2850 MANAGER 2450 ANALYST 3000 CLERK 950 MANAGER 2975 PRESIDENT 5000 SALESMAN 2650 SALESMAN 1500 SALESMAN 1750 CLERK 1300 CLERK 1100 ANALYST 3000 13 sor kijelölve. 2. job AS "Munkaköre".MEGOLDÁSGYŰJTEMÉNY 2. "Dolgozó Neve". Megoldás (EXTRACT függvénnyel) SELECT EXTRACT(YEAR FROM hiredate) AS "Belépési év". ő 1980-ban lépett be.1. Megoldás SELECT TO_NUMBER(TO_CHAR(hiredate. Feladat Listázza 1981-től éves csoportosításban a dolgozók nevét.'YYYY')) ORDER BY "Belépési év". munkakörét és jövedelmét a dolgozók neve szerint rendezve. AS AS AS AS "Belépési év".0) AS "Jövedelem" FROM emp WHERE TO_NUMBER(TO_CHAR(hiredate. "Munkaköre".---------SALESMAN 1900 MANAGER 2850 MANAGER 2450 ANALYST 3000 CLERK 950 MANAGER 2975 PRESIDENT 5000 #01_SQL Bevezető Feladatgyűjtemény [26] . Miben fog különbözni a fenti utasítás listája. Eredmény Belépési év ----------1981 1981 1981 1981 1981 1981 1981 Dolgozó Ne ---------ALLEN BLAKE CLARK FORD JAMES JONES KING Munkaköre Jövedelem --------. sal + NVL(comm.0) FROM emp WHERE TO_NUMBER(TO_CHAR(hiredate.'YYYY')) ename job sal + NVL(comm. "Jövedelem" >= 1981 Eredmény Belépési év ----------1981 1981 1981 1981 1981 1981 1981 1981 1981 1981 1982 1987 1987 Dolgozó Ne ---------ALLEN BLAKE CLARK FORD JAMES JONES KING MARTIN TURNER WARD MILLER ADAMS SCOTT Munkaköre Jövedelem --------. 1. "Dolgozó Neve". ename AS "Dolgozó Neve". ha nem alkalmazzuk a TO_NUMBER függvényt? 2. "Dolgozó Neve".

"Nap neve". AS AS AS AS AS "DolgozóNév".----------SZOMBAT 6 PÉNTEK 5 PÉNTEK 5 KEDD 2 #01_SQL Bevezető Feladatgyűjtemény [26] .---------. MONTH. AS AS AS AS AS "Név". DAY. a belépésük dátumát. 2. Megoldás SELECT ename hiredate EXTRACT(DAY FROM hiredate) TO_CHAR(hiredate.---------1980-12-17 1980 12 17 1981-02-20 1981 2 20 1981-02-22 1981 2 22 1981-04-02 1981 4 2 1981-09-28 1981 9 28 1981-05-01 1981 5 1 1981-06-09 1981 6 9 1987-04-19 1987 4 19 1981-11-17 1981 11 17 1981-09-08 1981 9 8 1987-05-23 1987 5 23 1981-12-03 1981 12 3 1981-12-03 1981 12 3 1982-01-23 1982 1 23 14 sor kijelölve. Példa SELECT ename hiredate EXTRACT(YEAR FROM hiredate) EXTRACT(MONTH FROM hiredate) EXTRACT(DAY FROM hiredate) FROM emp. MINUTE. "Dátum".---------. "Nap a héten" Eredmény DolgozóNév ---------ADAMS ALLEN BLAKE CLARK Dátum Nap a hónapban ---------.’DAY’) TO_NUMBER(TO_CHAR(hiredate.1981 1981 1981 1982 1987 1987 MARTIN TURNER WARD MILLER ADAMS SCOTT SALESMAN SALESMAN SALESMAN CLERK CLERK ANALYST 2650 1500 1750 1300 1100 3000 13 sor kijelölve. "Nap a hónapban". HOUR. valamint azt. "BeÉv". "Dátum".2.15 - .-------------1987-05-23 23 1981-02-20 20 1981-05-01 1 1981-06-09 9 Nap neve Nap a héten --------. illetve a hét hányadik napján léptek be (például péntek a hét 5. "BeHónap". "BeNap" Eredmény Név ---------SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER Dátum BeÉv BeHónap BeNap ---------. hogy a hónap.’D’)) FROM emp ORDER BY "DolgozóNév". napja). Megjegyzés Az EXTRACT függvény használata Az EXTRACT SQL függvény visszaadja a paraméterében a FROM után megadott dátumkifejezés YEAR. illetve SECOND numerikus típusú értékét. Feladat Listázza ki a dolgozók nevét.

'YYYY') AS "Belépés".'YYYY')) >= 1981 GROUP BY TO_CHAR(hiredate.FORD JAMES JONES KING MARTIN MILLER SCOTT SMITH TURNER WARD 1981-12-03 1981-12-03 1981-04-02 1981-11-17 1981-09-28 1982-01-23 1987-04-19 1980-12-17 1981-09-08 1981-02-22 3 3 2 17 28 23 19 17 8 22 CSÜTÖRTÖK CSÜTÖRTÖK CSÜTÖRTÖK KEDD HÉTFŐ SZOMBAT VASÁRNAP SZERDA KEDD VASÁRNAP 4 4 4 2 1 6 7 3 2 7 14 sor kijelölve.3.0)) AS "MinJöv" FROM emp GROUP BY TO_CHAR(hiredate. Megoldás (Előszűréssel) SELECT TO_CHAR(hiredate. Megoldás (Csoportszűréssel) SELECT TO_CHAR(hiredate. Feladat Listázza 1981-től belépési évenként a legkisebb jövedelmeket. vagy mindkét helyre betesszük a TO_NUMBER függvényt? 2. MIN(sal+NVL(comm. de vajon melyik a hatékonyabb? 3. AS "MinJöv" #01_SQL Bevezető Feladatgyűjtemény [26] . Megjegyzés Láthatjuk a két megoldás azonos eredményt adott.'YYYY')) >= 1981 ORDER BY "Belépés". Eredmény Belé MinJöv ---.16 - . 2. Megoldás (Csoportszűréssel és formázott kiíratással) COLUMN "Belépés" FORMAT A7 SELECT TO_CHAR(hiredate.'YYYY') HAVING TO_NUMBER(TO_CHAR(hiredate.---------1981 950 1982 1300 1987 1100 3 sor kijelölve.'YYYY') AS "Belépés".0)) AS "MinJöv" FROM emp WHERE TO_NUMBER(TO_CHAR(hiredate.'YYYY') ORDER BY "Belépés".'YYYY') MIN(sal+NVL(comm.0)) FROM emp AS "Belépés". MIN(sal+NVL(comm. ha a TO_CHAR függvény elé egyik. Eredmény Belé MinJöv ---. 1. Megjegyzés Mi történik.---------1981 950 1982 1300 1987 1100 3 sor kijelölve.

job HAVING AVG(sal + NVL(comm.-------------CLERK 1300 MANAGER 2450 PRESIDENT 5000 ANALYST 3000 MANAGER 2975 MANAGER 2850 SALESMAN 1950 7 sor kijelölve. Eredmény Főnök ÖsszJövedelem ---------.---------1981 950 1982 1300 1987 1100 3 sor kijelölve. 2.5.GROUP BY TO_CHAR(hiredate. columns törölve Megjegyzés A formázott kiíratásokkal a későbbiekben fogunk részletesebben foglalkozni.0)) AS "ÖsszJövedelem" FROM emp GROUP BY mgr ORDER BY mgr ASC. job AS "Munkakör". Megoldás SELECT mgr AS "Főnök". Megoldás SELECT deptno AS "Részleg".0)) AS "ÁtlagJövedelem" FROM emp GROUP BY deptno. 2. Feladat Listázza részlegenként és munkakörönként a legalább 1000 USD-os átlagjövedelmeket. CLEAR COLUMNS Eredmény Belépés MinJöv ------. SUM(sal + NVL(comm. "ÁtlagJövedelem" DESC. Feladat Listázza főnökönként a beosztottak összjövedelmét. "ÖsszJövedelem" DESC. 1. AVG(sal + NVL(comm.------------7566 6000 7698 8750 7782 1300 7788 1100 7839 8275 7902 800 #01_SQL Bevezető Feladatgyűjtemény [26] .4.'YYYY')) >= 1981 ORDER BY "Belépés".0)) >= 1000 ORDER BY deptno ASC.17 - . Eredmény Részleg ---------10 10 10 20 20 30 30 Munkakör ÁtlagJövedelem --------. job ASC.'YYYY') HAVING TO_NUMBER(TO_CHAR(hiredate.

------------7566 6000 7698 8750 7782 1300 7788 1100 7839 8275 7902 800 Nincs Főnök 5000 7 sor kijelölve.0)) AS "ÖsszJövedelem" FROM emp GROUP BY mgr ORDER BY mgr ASC.2999' #01_SQL Bevezető Feladatgyűjtemény [26] .'Nincs Főnök') AS "FőnökKód". CLEAR COLUMNS Eredmény Főnök ÖsszJövedelem -----------.1999' WHEN TRUNC(sal/1000) = 2 THEN '2000 . Megoldás COLUMN "Fizetés Kategória" FORMAT A17 SELECT CASE WHEN TRUNC(sal/1000) = 0 THEN ' 0 .999' WHEN TRUNC(sal/1000) = 1 THEN '1000 .) dolgozók számát valamilyen célszerű rendezésben. "ÖsszJövedelem" DESC. SUM(sal + NVL(comm. SUM(sal + NVL(comm.0)) AS "ÖsszJövedelem" FROM emp GROUP BY mgr ORDER BY mgr ASC.5000 7 sor kijelölve. columns törölve 3. columns törölve 2. Megoldás (CASE szerkezettel és formázott kiíratással) COLUMN "Főnök" FORMAT A12 SELECT CASE WHEN mgr IS NULL THEN 'Nincs Főnök' ELSE TO_CHAR(mgr) END AS "Főnök". Megoldás (Az NVL2 függvénnyel és formázott kiíratással) COLUMN "FőnökKód" FORMAT A12 SELECT NVL2(TO_CHAR(mgr). 1000-1999. stb. 2.6. "ÖsszJövedelem" DESC.18 - . Feladat Írassa ki az első hat 1000 USD-os fizetésosztályban (0-999.TO_CHAR(mgr).------------7566 6000 7698 8750 7782 1300 7788 1100 7839 8275 7902 800 Nincs Főnök 5000 7 sor kijelölve. CLEAR COLUMNS Eredmény FőnökKód ÖsszJövedelem -----------.

3999 2 2000 . columns törölve Megjegyzés A TRUNC függvény használata szám esetén szintaktika: TRUNC(n [.999 2 5 sor kijelölve. TRUNC(3600/1000.6 #01_SQL Bevezető Feladatgyűjtemény [26] .19 - .1999 6 0 . Példa SQL> SELECT TRUNC(3600/1000) 2 FROM dual. CLEAR COLUMNS Eredmény Fizetés Kategória Létszám ----------------. TRUNC(600/1000) --------------0 m2. Példa SQL> SELECT TRUNC(600/1000) 2 FROM dual. A függvény által visszadott érték egész szám.WHEN TRUNC(sal/1000) = 3 THEN '3000 . COUNT(*) AS "Létszám" FROM emp GROUP BY TRUNC(sal / 1000) ORDER BY "Fizetés Kategória" DESC. m]) ahol n. m1. illetve adott számú tizedesjegyet tartalmazó törtszám típusú.1) -----------------3. 1) 2 FROM dual. Példa SQL> SELECT TRUNC(3600/1000.5999 1 3000 .4999' WHEN TRUNC(sal/1000) = 5 THEN '5000 . illetve tizedesjegyek számát.---------5000 .5999' ELSE 'nincs tovább!' END AS "Fizetés Kategória". TRUNC(3600/1000) ---------------3 m3.3999' WHEN TRUNC(sal/1000) = 4 THEN '4000 .2999 3 1000 . illetve m egész számok megadják az eredményben engedélyezett egész.

---------1980 1 1981 10 1982 1 1987 2 4 sor kijelölve. CLEAR COLUMNS AS "Belépési év". 2 TRUNC(hiredate.1.20 - .'MM') 3 FROM dual. 2 TRUNC(sysdate. 1. Megoldás COLUMN "Belépési év" FORMAT A11 SELECT TO_CHAR(hiredate. SYSDATE TRUNC(SYSD ---------. mask) ahol mask a TO_CHAR függvényben használható formátummaszk. Példa SQL> SELECT emp. 2 TRUNC(sysdate. SYSDATE TRUNC(SYSD ---------. 'YYYY') ORDER BY "Belépési év". Feladat Írassa ki évenként a belépett dolgozók számát.'YYYY') AS "Belépési év".'YYYY'). AS "Létszám" 2.7. columns törölve Megjegyzés A TRUNC függvény használata dátum esetén szintaktika: TRUNC(n.'YYYY') 3 FROM emp AS "Belépés" #01_SQL Bevezető Feladatgyűjtemény [26] .'YYYY') ORDER BY "Belépési év".---------2006-02-19 2006-01-01 m2.*. és a visszadott érték dátum típusú. Példa SQL> SELECT sysdate. CLEAR COLUMNS Eredmény Belépési év Létszám ----------.2. m1.4) COUNT(*) FROM emp GROUP BY TRUNC(hiredate. Megoldás COLUMN "Belépési év" FORMAT A11 SELECT SUBSTR(TRUNC(hiredate.---------2006-02-19 2006-02-01 m3. COUNT(*) AS "Létszám" FROM emp GROUP BY TO_CHAR(hiredate. Példa SQL> SELECT sysdate.'YYYY') 3 FROM dual.

'YYYY-MM-DD').---------PRESIDENT 1981-11-17 5000 10 1981-01-01 MANAGER 7839 1981-05-01 2850 30 1981-01-01 MANAGER 7839 1981-06-09 2450 10 1981-01-01 MANAGER 7839 1981-04-02 2975 20 1981-01-01 SALESMAN 7698 1981-09-28 1250 1400 30 1981-01-01 SALESMAN 7698 1981-02-20 1600 300 30 1981-01-01 SALESMAN 7698 1981-09-08 1500 0 30 1981-01-01 CLERK 7698 1981-12-03 950 30 1981-01-01 SALESMAN 7698 1981-02-22 1250 500 30 1981-01-01 ANALYST 7566 1981-12-03 3000 20 1981-01-01 ANALYST 7566 1987-04-19 3000 20 1987-01-01 CLERK 7788 1987-05-23 1100 20 1987-01-01 CLERK 7782 1982-01-23 1300 10 1982-01-01 EMPNO ---------7839 7698 7782 7566 7654 7499 7844 7900 7521 7902 7788 7876 7934 13 sor kijelölve.1.---------.4 5 WHERE TRUNC(hiredate.---------. ő 1980-ban lépett be (lásd 2.21 - .---------. Feladat).---------. #01_SQL Bevezető Feladatgyűjtemény [26] .---------. ENAME ---------KING BLAKE CLARK JONES MARTIN ALLEN TURNER JAMES WARD FORD SCOTT ADAMS MILLER JOB MGR HIREDATE SAL COMM DEPTNO Belépés --------.példához A Smith maradt ki. Megjegyzés az m3.'YYYY') >= TO_DATE('1981-01-01'.

feladat) 3. az évek szerint növekvően rendezve. T3. (Lásd a 2. fejezet FELADATGYŰJTEMÉNY 3. Foglalkozás Többtáblás lekérdezések. valamint a nevük mellett megadva azt. Feladat Listázza 1981-től éves csoportosításban a dolgozók nevét. Feladat Listázza ki növekvő módon rendezve az azonos betűvel kezdődő nevű dolgozók nevét. T3. #01_SQL Bevezető Feladatgyűjtemény [26] . Feladat Listázza 1981-től belépési évenként a legkisebb fizetésű dolgozók nevét. Feladat Listázza ki a páros és a páratlan sorszámú napokon belépett dolgozók nevét.1.1. allekérdezések Részletesebben lásd [2]: 3. vagy páratlan napon lépett-e be.22 - . munkakörét. feladat) 3. valamint azt. (Lásd a 2. 3. munkakörét.3. Feladat Listázza 1981-től belépési évenként a legnagyobb fizetésű nem-főnök dolgozók adatait.3. Feladat Listázza ki munkakörönként a legkisebb fizetésű dolgozók nevét. fizetését.3.2.6. TOVÁBBI FELADATOK T3.7.4. munkakörét és fizetését a belépés éve szerint csökkenően rendezve. Feladat Listázza dolgozónként a fizetés és a legnagyobb fizetés közötti különbséget. hogy csoportjukban hányan vannak. hogy páros.5. főnökének nevét és a dolgozó belépési évszámát a dolgozók neve szerint rendezve. főnökének nevét és főnökének fizetését.

sal – b. a. AS "Fizetés". a.1. AS "Defektus" AS MaxFiz 3. Megoldás (Allekérdezés a WHERE utasításrészben – megoldás a MAX függvény nélkül) SELECT a. Eredmény (Mindhárom megoldás esetén) Név Fizetés Defektus ---------.23 - .MEGOLDÁSGYŰJTEMÉNY 3. Megoldás (Allekérdezés a FROM utasításrészben – In-Line nézet) AS "Név".---------ADAMS 1100 -3900 ALLEN 1600 -3400 BLAKE 2850 -2150 CLARK 2450 -2550 FORD 3000 -2000 JAMES 950 -4050 JONES 2975 -2025 KING 5000 0 MARTIN 1250 -3750 MILLER 1300 -3700 SCOTT 3000 -2000 SMITH 800 -4200 TURNER 1500 -3500 WARD 1250 -3750 14 sor kijelölve. Megoldás (Allekérdezés a szelekciós listában) SELECT ename sal sal – (SELECT MAX(sal) FROM emp) FROM emp ORDER BY "Név". SELECT ename sal sal – x. AS "Fizetés". Feladat Listázza dolgozónként a fizetést. 1.ename AS "Név".sal AS "Defektus" FROM emp a. valamint a fizetés és a legnagyobb fizetés közötti különbséget. #01_SQL Bevezető Feladatgyűjtemény [26] .---------. emp b WHERE b. AS "Defektus" 2.MaxFiz FROM emp.sal AS "Fizetés". AS "Név".sal >= ALL (SELECT sal FROM emp) ORDER BY "Név". (SELECT MAX(sal) FROM emp) x ORDER BY "Név".

Feladat Listázza 1981-től éves csoportosításban a dolgozók nevét. RPAD(TO_CHAR(d. 3.ename.hiredate). munkakörét.12) AS "Belépési éve". "Dolgozó Neve". emp f WHERE d.mgr = f. Megoldás (EXTRACT és NVL2 függvényekkel) SELECT RPAD(d. Megoldás (CASE szerkezettel) SELECT RPAD(d.'YYYY')) >= 1981 ORDER BY "Belépési éve".12) AS "Dolgozó Neve".job AS "Munkaköre".ename. 2. emp f WHERE d. "Főnöke" Eredmény (2.12) AS "Belépési éve".empno(+) AND TO_NUMBER(TO_CHAR(d.3.hiredate.mgr = f. CASE WHEN f. d.empno(+) AND TO_NUMBER(TO_CHAR(d. "Dolgozó Neve".1. RPAD(f.8) END AS "Főnöke" FROM emp d. feladat) 1.'Nincs Főnöke') FROM emp d.job AS "Munkaköre". "Belépési éve". "Dolgozó Neve". AS AS AS AS "Dolgozó Neve".ename.'YYYY'). Megoldás SELECT RPAD(d. emp f WHERE d.12) NVL2(f.'YYYY').ename.f.hiredate.empno(+) AND EXTRACT(YEAR FROM d.mgr = f. d.hiredate.12) AS "Dolgozó Neve". Eredmény Dolgozó Neve -----------ALLEN BLAKE CLARK FORD JAMES JONES KING MARTIN TURNER WARD MILLER ADAMS SCOTT Munkaköre --------SALESMAN MANAGER MANAGER ANALYST CLERK MANAGER PRESIDENT SALESMAN SALESMAN SALESMAN CLERK CLERK ANALYST Belépési éve -----------1981 1981 1981 1981 1981 1981 1981 1981 1981 1981 1982 1987 1987 Főnöke -------BLAKE KING KING JONES BLAKE KING BLAKE BLAKE BLAKE CLARK SCOTT JONES 13 sor kijelölve.24 - .'YYYY')) >= 1981 ORDER BY "Belépési éve".ename IS NULL THEN 'Nincs Főnöke' ELSE RPAD(f.ename.8) AS "Főnöke" FROM emp d. és 3. "Munkaköre".12) d.ename. megoldás esetén) Dolgozó Neve -----------ALLEN BLAKE CLARK Munkaköre --------SALESMAN MANAGER MANAGER Belépési éve -----------1981 1981 1981 Főnöke -----------BLAKE KING KING #01_SQL Bevezető Feladatgyűjtemény [26] .hiredate. RPAD(TO_CHAR(d.hiredate) >= 1981 ORDER BY "Belépési éve". főnökének nevét és a dolgozó belépési évszámát a dolgozók neve szerint rendezve.ename.2.job RPAD(EXTRACT(YEAR FROM d. (Lásd a 2.

(SELECT TO_CHAR(hiredate.'YYYY') AS "Belépés".3.3. (SELECT TRUNC(hiredate. Megjegyzés Az NVL2 függvény használata Az NVL2 SQL függvény az első paraméterének nem-NULL értéke esetén visszaadja a második paraméterben szereplő kifejezés értékét. AS "Név".) 3. MIN(sal) AS MinFiz FROM emp WHERE TO_NUMBER(TO_CHAR(hiredate.25 - .'YYYY') = Belépés AND sal = MinFiz ORDER BY "Belépés" DESC. MIN(sal) AS MinFiz FROM emp WHERE TRUNC(hiredate. CLEAR COLUMNS 2. ename AS "Név". CLEAR COLUMNS 3. sal AS "MinFiz" FROM emp. (Lásd a 2.'YYYY')) >= 1981 GROUP BY TO_CHAR(hiredate. munkakörét és fizetését a belépés éve szerint csökkenően rendezve. job AS "Munkakör". Megoldás (Analitikus függvénnyel.'YYYY')) WHERE TRUNC(hiredate. #01_SQL Bevezető Feladatgyűjtemény [26] .'YYYY')) WHERE TO_CHAR(hiredate. job AS "Munkakör". míg NULL értéke esetén a harmadik paraméterben szereplő kifejezés értékét. (Lásd a fenti példa. sal AS "MinFiz" FROM emp.'YYYY') AS Belépés.'YYYY') = Belépés AND sal = MinFiz ORDER BY "Belépés" DESC. Megoldás COLUMN "Belépés" Format A8 SELECT TO_CHAR(hiredate. feladat) 1. AS "Munkakör".'YYYY-MM-DD') GROUP BY TRUNC(hiredate.FORD JAMES JONES KING MARTIN TURNER WARD MILLER ADAMS SCOTT ANALYST CLERK MANAGER PRESIDENT SALESMAN SALESMAN SALESMAN CLERK CLERK ANALYST 1981 1981 1981 1981 1981 1981 1981 1982 1987 1987 JONES BLAKE KING Nincs Főnöke BLAKE BLAKE BLAKE CLARK SCOTT JONES 13 sor kijelölve. Kubatovics Ferenc megoldása) COLUMN "Belépés" Format A8 SELECT TO_CHAR(hiredate. Komáromi Zoltán megoldása) COLUMN "Belépés" Format A8 SELECT TO_CHAR(hiredate.'YYYY') ename job AS "Belépés".'YYYY') >= TO_DATE('1981-01-01'.'YYYY') AS "Belépés".'YYYY') AS Belépés. ename AS "Név". Megoldás (TRUNC függvénnyel. Feladat Listázza 1981-től belépési évenként a legkisebb fizetésű dolgozók nevét.

lépés A nem-főnök dolgozók listája (fontos a NULL-érték kezelése): SELECT empno AS azon. RANK() OVER (PARTITION BY TO_CHAR(hiredate. ha valamelyik évben több legkisebb fizetésű dolgozó is volna. az évek szerint növekvően rendezve. CLEAR COLUMNS Eredmény Belépés -------1987 1982 1981 Név ---------ADAMS MILLER JAMES Munkakör MinFiz --------. Megoldás 1.fejezet).1. A fenti megoldások akkor is jól működnének. 2.---------CLERK 1100 CLERK 1300 CLERK 950 columns törölve Megjegyzés 1.rész. 13.sal AS "MinFiz" FROM (SELECT emp. 'YYYY') ORDER BY sal) AS Sorszám FROM emp WHERE hiredate >= TO_DATE('1981-01-01'. mely nem része az e foglalkozáshoz tartozó tananyagnak (értelmezéséhez lásd [2]: 1.26 - . 3. A 3. 1. ename as nev FROM emp WHERE empno NOT IN (SELECT NVL(mgr. ename AS nev FROM emp WHERE empno NOT IN (SELECT mgr FROM emp WHERE mgr IS NOT NULL).0) FROM emp). Másként (egyszerűbben): SELECT empno as azon.4. 'YYYY-MM-DD')) WHERE Sorszám = 1 ORDER BY "Belépés" DESC. Feladat Listázza 1981-től belépési évenként a legnagyobb fizetésű nem-főnök dolgozók adatait. Eredmény AZON ---------7844 7521 7654 7499 7934 7369 7876 7900 NEV ---------TURNER WARD MARTIN ALLEN MILLER SMITH ADAMS JAMES #01_SQL Bevezető Feladatgyűjtemény [26] .*. megoldás olyan eszközt használ.

(SELECT MAX(sal) AS MaxFiz.Év AND sal = nemfőnök.'YYYY') = nemfőnök. 1. #01_SQL Bevezető Feladatgyűjtemény [26] . SET numwidth 10 Eredmény EMPNO ----7499 7934 7876 ENAME ---------ALLEN MILLER ADAMS JOB MGR HIREDATE SAL COMM DEPTNO MAXFIZ ÉV --------. lépés A nem-főnök dolgozók listája: SELECT empno FROM emp MINUS SELECT mgr FROM emp.---SALESMAN 7698 1981-02-20 1600 300 30 1600 1981 CLERK 7782 1982-01-23 1300 10 1300 1982 CLERK 7788 1987-05-23 1100 20 1100 1987 2.'YYYY')) >= 1981) nemfőnök WHERE TO_CHAR(hiredate.27 - . lépés Az előző lépésben megkapott adatokhoz illeszkedő dolgozók meghatározása: SET numwidth 5 SELECT * FROM emp.----. TO_CHAR(hiredate. TO_CHAR(hiredate.'YYYY') AS Év FROM emp WHERE empno NOT IN (SELECT mgr FROM emp WHERE mgr IS NOT NULL) GROUP BY TO_CHAR(hiredate.----.'YYYY') AS Év FROM emp WHERE empno NOT IN (SELECT mgr FROM emp WHERE mgr IS NOT NULL) GROUP BY TO_CHAR(hiredate. mert számokat „nem illik” karakteresen összehasonlítani! 1. lépés A nem-főnök dolgozók legnagyobb évenkénti fizetése az évek szerint növekvően rendezve 1981től: SELECT MAX(sal) AS MaxFiz.-----.----.MaxFiz ORDER BY év.8 sor kijelölve.-----.1. Megoldás (Halmazkivonással) 2.'YYYY') HAVING TO_NUMBER(TO_CHAR(hiredate.'YYYY') HAVING TO_NUMBER(TO_CHAR(hiredate.'YYYY')) >= 1981 ORDER BY Év.---------. Eredmény MAXFIZ ---------1600 1300 1100 ÉV ---1981 1982 1987 Megjegyzés A HAVING utasításrészben azért volt szükség a TO_NUMBER fügvény használatára.3.2.

-----CLERK 7902 1980-12-17 800 20 SALESMAN 7698 1981-02-20 1600 300 30 SALESMAN 7698 1981-02-22 1250 500 30 SALESMAN 7698 1981-09-28 1250 1400 30 SALESMAN 7698 1981-09-08 1500 0 30 CLERK 7788 1987-05-23 1100 20 CLERK 7698 1981-12-03 950 30 CLERK 7782 1982-01-23 1300 10 8 sor kijelölve.----.empno.* FROM emp.'YYYY') HAVING TO_NUMBER(TO_CHAR(hiredate.28 - . 2.'YYYY')) >= 1981 ORDER BY Év. lépés A legnagyobb évenkénti fizetések az évek szerint növekvően rendezve 1981-től: SELECT MAX(sal) AS MaxFiz.2. (SELECT empno FROM emp MINUS SELECT mgr FROM emp) al WHERE emp.---------.3. SET numwidth 10 Eredmény EMPNO ----7369 7499 7521 7654 7844 7876 7900 7934 ENAME ---------SMITH ALLEN WARD MARTIN TURNER ADAMS JAMES MILLER JOB MGR HIREDATE SAL COMM DEPTNO --------.'YYYY') AS Év FROM emp GROUP BY TO_CHAR(hiredate. lépés A nem-főnök dolgozók adatai: SET numwidth 5 SELECT emp. TO_CHAR(hiredate.----.empno = al. 2. Eredmény MAXFIZ ---------5000 1300 3000 ÉV ---1981 1982 1987 #01_SQL Bevezető Feladatgyűjtemény [26] .Eredmény EMPNO ---------7369 7499 7521 7654 7844 7876 7900 7934 8 sor kijelölve.----.

----.2. lépés Az előző lépésben megkapott adatokhoz illeszkedő dolgozók meghatározása: SET numwidth 5 SELECT * FROM emp. TO_CHAR(hiredate. lépésben meghatározott listához a 2.'YYYY') AS Év FROM (SELECT sal.empno) GROUP BY TO_CHAR(hiredate. SET numwidth 10 Eredmény EMPNO ----7499 7934 7876 ENAME ---------ALLEN MILLER ADAMS JOB MGR HIREDATE SAL COMM DEPTNO MAXFIZ ÉV --------.MaxFiz ORDER BY Év.'YYYY') AS Év FROM (SELECT sal. megoldásnál. ha valamelyik évben több legnagyobb fizetésű nem-főnök dolgozó is volna. #01_SQL Bevezető Feladatgyűjtemény [26] . 2.empno = al.5.'YYYY') HAVING TO_NUMBER(TO_CHAR(hiredate.'YYYY') = nemfőnök. (SELECT empno FROM emp MINUS SELECT mgr FROM emp) al WHERE emp. (SELECT empno FROM emp MINUS SELECT mgr FROM emp) al WHERE emp.---------. TO_CHAR(hiredate.----. lépés A nem-főnök dolgozók legnagyobb évenkénti fizetése az évek szerint növekvően rendezve 1981től (vagyis a 3.----.Év AND sal = nemfőnök.4. lista szerinti alaphalmaz illesztése): SELECT MAX(sal) AS MaxFiz.'YYYY') HAVING TO_NUMBER(TO_CHAR(hiredate. A 2. hiredate FROM emp.empno = al. megoldás nem csupán logikájában nehézkesebb az 1.empno) GROUP BY TO_CHAR(hiredate.---SALESMAN 7698 1981-02-20 1600 300 30 1600 1981 CLERK 7782 1982-01-23 1300 10 1300 1982 CLERK 7788 1987-05-23 1100 20 1100 1987 Megjegyzés 1. A fenti megoldások akkor is jól működnének. de kevésbé is hatékony a halmazkivonás rosszabb megvalósíthatósága miatt.29 - . Eredmény MAXFIZ ---------1600 1300 1100 ÉV ---1981 1982 1987 2.-----.'YYYY')) >= 1981) nemfőnök WHERE TO_CHAR(hiredate. (SELECT MAX(sal) AS MaxFiz. hiredate FROM emp.-----.'YYYY')) >= 1981 ORDER BY Év.

3.4. Feladat Listázza formázott módon a felhasználó által megadott évtől belépési évenként a legnagyobb fizetésű nem-főnök dolgozók adatait. munkakörét és fizetését a belépés éve szerint csökkenően rendezve.1. felhasználó által megadott munkakörű dolgozóinak nevét. (Lásd a 3.4. feladat) T4. feladat) 4.5. fejezet FELADATGYŰJTEMÉNY 4. Feladat Listázza a felhasználó által megadott dolgozó esetén a fizetése és a legnagyobb fizetés közötti különbséget. (Lásd a 3. Foglalkozás Interaktív környezet Részletesebben lásd [2]: 4. főnökének nevét és a dolgozó belépési évszámát a dolgozók neve szerint rendezve. feladat) TOVÁBBI FELADATOK T4.5. Feladat Listázza a felhasználó által megadott évtől belépési évenként a legkisebb fizetésű dolgozók nevét. (Lásd a 3. fizetését. az évek szerint növekvően rendezve. Feladat Listázza ki a felhasználó által megadott telephelyű részleg. munkakörét.30 - . (Lásd a T3.2.3.1. feladat) #01_SQL Bevezető Feladatgyűjtemény [26] . Feladat Listázza formázott módon a felhasználó által megadott évtől éves csoportosításban a dolgozók nevét.2. (Lásd a 3.4. főnökének nevét és főnökének fizetését. feladat) T4.

1.12) AS "Dolgozó Neve".hiredate. Megjegyzés Az adatbekérések csak program file-ból adhatók ki (pl. feladat) Megoldás ACCEPT Név CHAR FORMAT A8 PROMPT 'A dolgozó neve: ' SELECT ename AS "Név".'Nincs Főnöke') AS "Főnöke" FROM emp d.12) AS "Belépési éve".'YYYY')) >= &Év TO_NUMBER(TO_CHAR(d.---------SMITH 800 -4200 1 sor kijelölve.ename. sal . munkakörét. NVL2(f.hiredate. főnökének nevét és a dolgozó belépési évszámát a dolgozók neve szerint rendezve.31 - .'YYYY')) >= 1981 #01_SQL Bevezető Feladatgyűjtemény [26] . feladat) Megoldás 1.2. d.ename.empno(+) AND TO_NUMBER(TO_CHAR(d. (Lásd a 3. parancssorból már nem. (SELECT MAX(sal) AS MaxFiz FROM emp) x WHERE UPPER(ename) = UPPER('&Név'). sal AS "Fizetés".f. (Lásd a 3. abc.2. Eredmény Kezdő év: 1981 régi 7: új 7: TO_NUMBER(TO_CHAR(d. Eredmény A dolgozó SP2-0598: A dolgozó régi 7: új 7: neve: smithsmithsmith "smithsmithsmith" ütközik a(z) "A8" input formátummal neve: smith WHERE UPPER(ename) = UPPER('&Név') WHERE UPPER(ename) = UPPER('smith') Név Fizetés Defektus ---------.job AS "Munkaköre". emp f WHERE d.hiredate.'YYYY')) >= &Év ORDER BY "Belépési éve".ename.---------. Lépés (Formázatlan listázás) ACCEPT Év NUMBER PROMPT 'Kezdő év: ' SELECT RPAD(d. 4.'YYYY').sql).MEGOLDÁSGYŰJTEMÉNY 4. "Dolgozó Neve".hiredate.mgr = f. Feladat Listázza formázott módon a felhasználó által megadott évtől éves csoportosításban a dolgozók nevét. Feladat Listázza a felhasználó által megadott dolgozó esetén a fizetése és a legnagyobb fizetés közötti különbséget.1. RPAD(TO_CHAR(d.x.MaxFiz AS "Defektus" FROM emp.

d.12) AS "Dolgozó Neve".hiredate.ename.'YYYY')) >= &Év ORDER BY "Belépési éve".'YYYY') AS "Belépési éve".Dolgozó Neve -----------ALLEN BLAKE CLARK FORD JAMES JONES KING MARTIN TURNER WARD MILLER ADAMS SCOTT Munkaköre --------SALESMAN MANAGER MANAGER ANALYST CLERK MANAGER PRESIDENT SALESMAN SALESMAN SALESMAN CLERK CLERK ANALYST Belépési éve -----------1981 1981 1981 1981 1981 1981 1981 1981 1981 1981 1982 1987 1987 Főnöke -----------BLAKE KING KING JONES BLAKE KING Nincs Főnöke BLAKE BLAKE BLAKE CLARK SCOTT JONES 13 sor kijelölve.32 - . UNDEFINE Év CLEAR BREAKS CLEAR COLUMNS TTITLE OFF BTITLE OFF SET linesize 400 SET pagesize 40 SET verify ON SET feedback 6 #01_SQL Bevezető Feladatgyűjtemény [26] .ename. 2.job AS "Munkaköre". RPAD(' '.f. Lépés (Formázott listázás) SET SET SET SET feedback OFF verify OFF linesize 50 pagesize 23 TTITLE "LISTA|(éves csoportosításban)" BTITLE "Készült: 2006-ban" COLUMN "Dolgozó Neve" FORMAT A12 HEADING "Dolgozó|Neve" JUSTIFY LEFT COLUMN "Munkaköre" FORMAT A9 COLUMN "Belépési éve" FORMAT A10 HEADING "Belépési|éve" JUSTIFY CENTER COLUMN "Főnöke" FORMAT A13 BREAK ON "Belépési éve" ACCEPT Év NUMBER PROMPT 'Kezdő év: ' SELECT RPAD(d.empno(+) AND TO_NUMBER(TO_CHAR(d. "Dolgozó Neve". emp f WHERE d.hiredate.2) || TO_CHAR(d. NVL2(f.'Nincs Főnöke') AS "Főnöke" FROM emp d.ename.mgr = f.

26 LISTA (éves csoportosításban) lap 1 Dolgozó Neve -----------ALLEN BLAKE CLARK FORD JAMES JONES KING MARTIN TURNER WARD MILLER ADAMS SCOTT Belépési Munkaköre éve Főnöke --------.---------.------------SALESMAN 1981 BLAKE MANAGER KING MANAGER KING ANALYST JONES CLERK BLAKE MANAGER KING PRESIDENT Nincs Főnöke SALESMAN BLAKE SALESMAN BLAKE SALESMAN BLAKE CLERK 1982 CLARK CLERK 1987 SCOTT ANALYST JONES Készült: 2006-ban #01_SQL Bevezető Feladatgyűjtemény [26] .33 - .Eredmény Kezdő év: 1981 V. Febr.

Foglalkozás Adattáblák létrehozása. Feladat (UPDATE) Növelje meg az 1981-ben belépett dolgozók fizetését a következőképpen: 10%-kal azoknak. 5. Listázással ellenőrizze a megoldás helyességét. mivel visszavonni csak DML utasításokat lehet. akiknek nagyobb. ahol a legkevesebben dolgoznak. Feladat (INSERT) A vállalat felvesz a mai nappal (sysdate) egy új dolgozót. és 1%-kal azoknak. mivel érvényesítésük és visszavonásuk az adattáblák szerkezetét módosítja. Feladat (UPDATE) Növelje meg a hivatalnokok (clerk) fizetését 20%-al. főnöke közvetlenül az elnök. akiknek a fizetése az ugyanekkor belépett és azonos munkakörűek átlagfizetésénél kisebb. megszorítások Részletesebben lásd [2]: 5.2. FELADATGYŰJTEMÉNY Az alábbi feladatokban az eredeti emp tábláról először készítsünk egy másolatot dolgozó néven annak megőrzése érdekében! A feladatok szövege e dolgozó táblára vonatkozik. 5. #01_SQL Bevezető Feladatgyűjtemény [26] .5.3. Listázza a dolgozók adatait a fizetésemelés előtt és után. 5. fejezet KULCSSZAVAK DML utasítások: INSERT UPDATE DELETE SAVEPOINT ROLLBACK COMMIT DDL utasítások: CREATE TABLE DROP TABLE ALTER TABLE MODIFY ADD DROP RENAME RENAME TABLE FOREIGN KEY REFERENCES UNIQUE NULL NOT NULL CHECK Tranzakciók: Megszorítások: PRIMARY KEY Megjegyzés: A tranzakciók logikailag a DML utasításokhoz kötődnek. Neve és munkaköre választható. Azonosítója a legnagyobb azonosító értéknél eggyel nagyobb. valamint a munkaköri átlagfizetéseket egy tizedesre kerekítve.1. tranzakciók. Megjegyzés: A megszorítások logikailag a DDL utasításokhoz kötődnek.34 - . Listázza a lekérdezett attribútumokat valamint a dolgozókat a felvétel előtt és után is. vagy egyenlő. fizetése megfelel a részleg-átlagnak és jutalékot nem kap. abba a részlegbe. módosítása.

Feladat Azoknak a dolgozóknak. #01_SQL Bevezető Feladatgyűjtemény [26] . jutaléka e dolgozók minimális fizetésének harmada.4. jutalom nevű oszlopot. akik nem kapnak jutalékot. T5.6. a főnökök pedig a főnöki átlagjövedelmek 25%-át.5. A nevét és munkakörét válassza meg önállóan. Feladat (REFERENCES) Mutassa be az utólag hozzáadott hivatkozási megszorítást teljes és szűkített tábla esetén. akik 1981-ben. TOVÁBBI FELADATOK T5. belépési dátuma a három nappal ezelőtti dátum. Az azonosítója a már létező legkisebb azonosítónál kettővel kisebb legyen. T5. adjon jutalékot a következőképpen: akik 1980-ban léptek be.8.7. Feladat Növelje meg a munkakörönként legkisebb fizetésű dolgozó fizetését a munkaköri átlag és a saját fizetése felével. A főnöke legyen a legnagyobb kódú főnök. azok az összdolgozói átlagjutalék 1%-át kapják.5.35 - . azok 10%-ot. Feladat A vállalat egy új dolgozót vesz fel. T5. Feladat Adjon a dolgozó táblához egy új. akik pedig 1981 után léptek be a vállalathoz. azok a fizetésük 20%-át kapják. részlege pedig a főnökének részlege legyen. A jutalmat következőképpen kapják: a beosztottak a beosztottak átlagjövedelmének 10%-át. Fizetése a páros hónapokban belépett dolgozók átlagfizetése.

hogy az INIT1.-----CLERK 7698 1981-12-03 1140 30 CLERK 7902 1980-12-17 960 20 CLERK 7788 1987-05-23 1320 20 CLERK 7782 1982-01-23 1560 10 #01_SQL Bevezető Feladatgyűjtemény [26] . ORA-00942: a tábla vagy a nézet nem létezik A tábla létrejött. A munkamenet módosítva.----.---------. lépés (Az SQL*Plus környezet inicializálása) -. EMPNO ----7900 7369 7876 7934 ENAME ---------JAMES SMITH ADAMS MILLER JOB MGR HIREDATE SAL COMM DEPTNO --------. Megoldás 0.MEGOLDÁSGYŰJTEMÉNY Az alábbi feladatokban az eredeti emp tábláról először készítsünk egy másolatot dolgozó néven annak megőrzése érdekében! A feladatok szövege e dolgozó táblára vonatkozik.A dátum és megjelenítés inicializálása ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD'.Feltételezve.Az esetlegesen létező azonos nevű objektumok törlése DROP VIEW dolgozó.----. 5.----.36 - .---------.----. SELECT * FROM dolgozó WHERE LOWER(job) = 'clerk'. 4 sor módosítva. lépés DROP TABLE dolgozó.Az emp tábla inicializálása (ezúttal elhagyjuk) -. ORA-00942: a tábla vagy a nézet nem létezik ORA-00942: a tábla vagy a nézet nem létezik 1. SET numwidth 5 -.sql a BIN könyvtárban van -.----. EMPNO ----7900 7369 7876 7934 ENAME ---------JAMES SMITH ADAMS MILLER JOB MGR HIREDATE SAL COMM DEPTNO --------. Listázással ellenőrizze a megoldás helyességét. lépés UPDATE dolgozó SET sal = 1.----.2*sal WHERE LOWER(job) = 'clerk'. SELECT * FROM dolgozó WHERE LOWER(job) = 'clerk'.@INIT1 -.1. Feladat (UPDATE) Növelje meg a hivatalnokok (clerk) fizetését 20%-al. CREATE TABLE dolgozó AS SELECT * FROM emp. DROP TABLE dolgozó.-----CLERK 7698 1981-12-03 950 30 CLERK 7902 1980-12-17 800 20 CLERK 7788 1987-05-23 1100 20 CLERK 7782 1982-01-23 1300 10 2.

A dolgozó tábla helytakarékos lekérdezése SET numwidth 5 SELECT * FROM dolgozó.----.----. akiknek nagyobb. Listázza a dolgozók adatait a fizetésemelés előtt és után. Feladat (UPDATE) Növelje meg az 1981-ben belépett dolgozók fizetését a következőképpen: 10%-kal azoknak.1) AS MunkaÁtlag FROM dolgozó WHERE TO_CHAR(hiredate. #01_SQL Bevezető Feladatgyűjtemény [26] . -. 2.A dolgozó tábla létrehozása CREATE TABLE dolgozó AS SELECT * FROM emp.5. ROUND (AVG(sal). lépés (Az 1981-es munkaköri átlag listázása) SELECT job AS Munkakör. akiknek a fizetése az ugyanekkor belépett és azonos munkakörűek átlagfizetésénél kisebb. lépés (A dolgozó tábla létrehozása) -. Megoldás 1.37 - . valamint a munkaköri átlagfizetéseket egy tizedesre kerekítve.---------. SET numwidth 10 Eredmény A tábla létrejött. és 1%-kal azoknak. EMPNO ----7369 7499 7521 7566 7654 7698 7782 7788 7839 7844 7876 7900 7902 7934 ENAME ---------SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER JOB MGR HIREDATE SAL COMM DEPTNO --------.----.2.'YYYY') = '1981' GROUP BY job. vagy egyenlő.-----CLERK 7902 1980-12-17 800 20 SALESMAN 7698 1981-02-20 1600 300 30 SALESMAN 7698 1981-02-22 1250 500 30 MANAGER 7839 1981-04-02 2975 20 SALESMAN 7698 1981-09-28 1250 1400 30 MANAGER 7839 1981-05-01 2850 30 MANAGER 7839 1981-06-09 2450 10 ANALYST 7566 1987-04-19 3000 20 PRESIDENT 1981-11-17 5000 10 SALESMAN 7698 1981-09-08 1500 0 30 CLERK 7788 1987-05-23 1100 20 CLERK 7698 1981-12-03 950 30 ANALYST 7566 1981-12-03 3000 20 CLERK 7782 1982-01-23 1300 10 14 sor kijelölve.

lépés (Az átlag alatt bérezettek listája) SELECT empno. 3.'YYYY') = '1981'. lépés (Az 1981-es dolgozók listázása) SET numwidth 5 SELECT * FROM dolgozó WHERE TO_CHAR(hiredate.vagy kihasználva az automatikus konverziós lehetőségeket: SELECT job AS Munkakör. Eredmény EMPNO ----7782 7521 7654 ENAME ---------CLARK WARD MARTIN JOB SAL --------. #01_SQL Bevezető Feladatgyűjtemény [26] .----MANAGER 2450 SALESMAN 1250 SALESMAN 1250 3 sor kijelölve.3 PRESIDENT 5000 SALESMAN 1400 5 sor kijelölve. SET numwidth 10 Eredmény EMPNO ----7499 7521 7566 7654 7698 7782 7839 7844 7900 7902 ENAME ---------ALLEN WARD JONES MARTIN BLAKE CLARK KING TURNER JAMES FORD JOB MGR HIREDATE SAL COMM DEPTNO --------.---------. 4.1) AS MunkaÁtlag FROM dolgozó WHERE hiredate BETWEEN '1981/01/01' AND '1981-12-31' GROUP BY job. ROUND (AVG(sal). (SELECT job AS Munkakör.38 - . job.----.----. Eredmény MUNKAKÖR MUNKAÁTLAG --------.----.'YYYY') = '1981' AND Munkakör = job AND sal < MunkaÁtlag. sal FROM dolgozó. ename. ROUND (AVG(sal).1) AS MunkaÁtlag FROM dolgozó WHERE TO_CHAR(hiredate.-----SALESMAN 7698 1981-02-20 1600 300 30 SALESMAN 7698 1981-02-22 1250 500 30 MANAGER 7839 1981-04-02 2975 20 SALESMAN 7698 1981-09-28 1250 1400 30 MANAGER 7839 1981-05-01 2850 30 MANAGER 7839 1981-06-09 2450 10 PRESIDENT 1981-11-17 5000 10 SALESMAN 7698 1981-09-08 1500 0 30 CLERK 7698 1981-12-03 950 30 ANALYST 7566 1981-12-03 3000 20 10 sor kijelölve.---------ANALYST 3000 CLERK 950 MANAGER 2758.'YYYY') = '1981' GROUP BY job) WHERE TO_CHAR(hiredate.

5. (SELECT job AS Munkakör. SET numwidth 10 Eredmény EMPNO ----7499 7521 7566 7654 7698 7782 7839 7844 7900 7902 ENAME ---------ALLEN WARD JONES MARTIN BLAKE CLARK KING TURNER JAMES FORD JOB MGR HIREDATE SAL COMM DEPTNO --------. mert tudjuk kik ők.'YYYY') = '1981'. Eredmény EMPNO ---------7902 7900 7698 7566 7839 7844 7499 ENAME ---------FORD JAMES BLAKE JONES KING TURNER ALLEN JOB SAL --------. job. lépés (Az átlagon.----.1) AS MunkaÁtlag FROM dolgozó WHERE TO_CHAR(hiredate. ROUND (AVG(sal). vagy fölötte bérezettek listája) SELECT empno.-----SALESMAN 7698 1981-02-20 1600 300 30 SALESMAN 7698 1981-02-22 1375 500 30 MANAGER 7839 1981-04-02 2975 20 SALESMAN 7698 1981-09-28 1375 1400 30 MANAGER 7839 1981-05-01 2850 30 MANAGER 7839 1981-06-09 2695 10 PRESIDENT 1981-11-17 5000 10 SALESMAN 7698 1981-09-08 1500 0 30 CLERK 7698 1981-12-03 950 30 ANALYST 7566 1981-12-03 3000 20 #01_SQL Bevezető Feladatgyűjtemény [26] .'YYYY') = '1981' AND Munkakör = job AND sal >= MunkaÁtlag. 6.---------ANALYST 3000 CLERK 950 MANAGER 2850 MANAGER 2975 PRESIDENT 5000 SALESMAN 1500 SALESMAN 1600 7 sor kijelölve. Az azonosítás mindig az elsődleges kulccsal vagy egyedi kulccsal történhet. Ekkor a WHERE feltételben levő SELECT utasításnak csak egyetlen kimenő oszlopa lehet! UPDATE dolgozó SET sal = sal + 0.1 * sal WHERE empno IN (SELECT empno FROM dolgozó.----.39 - . ename.'YYYY') = '1981' GROUP BY job) WHERE TO_CHAR(hiredate.'YYYY') = '1981' GROUP BY job) WHERE TO_CHAR(hiredate.---------. lépés (Az átlag alattiak fizetésének növelése) Most már tudjuk módosítani. sal FROM dolgozó.'YYYY') = '1981' AND Munkakör = job AND sal < MunkaÁtlag). (SELECT job AS Munkakör. SET numwidth 5 SELECT * FROM dolgozó WHERE TO_CHAR(hiredate.----.1) AS MunkaÁtlag FROM dolgozó WHERE TO_CHAR(hiredate. ROUND(AVG(sal).

-----SALESMAN 7698 1981-02-20 1616 300 30 SALESMAN 7698 1981-02-22 1375 500 30 MANAGER 7839 1981-04-02 3005 20 SALESMAN 7698 1981-09-28 1375 1400 30 MANAGER 7839 1981-05-01 2879 30 MANAGER 7839 1981-06-09 2695 10 PRESIDENT 1981-11-17 5050 10 SALESMAN 7698 1981-09-08 1515 0 30 CLERK 7698 1981-12-03 959. ROUND(AVG(sal). SET numwidth 5 SELECT * FROM dolgozó WHERE TO_CHAR(hiredate. vagy fölötte bérezettek fizetésének növelése) UPDATE dolgozó SET sal = sal + 0.'YYYY') = '1981'.01 * sal WHERE empno IN (SELECT empno FROM dolgozó.----. SET numwidth 10 Eredmény (Ez egyben a feladat végeredménye is) EMPNO ----7499 7521 7566 7654 7698 7782 7839 7844 7900 7902 ENAME ---------ALLEN WARD JONES MARTIN BLAKE CLARK KING TURNER JAMES FORD JOB MGR HIREDATE SAL COMM DEPTNO --------. (SELECT job AS Munkakör.'YYYY') = '1981' AND Munkakör = job AND sal >= MunkaÁtlag).----.5 30 ANALYST 7566 1981-12-03 3030 20 10 sor kijelölve.'YYYY') = '1981' GROUP BY job) WHERE TO_CHAR(hiredate.10 sor kijelölve.---------. lépés (Az átlagon.1) AS MunkaÁtlag FROM dolgozó WHERE TO_CHAR(hiredate.40 - . 7.----. #01_SQL Bevezető Feladatgyűjtemény [26] .

------10 3 20 5 30 6 2. Feladat (INSERT) A vállalat felvesz a mai nappal (sysdate) egy új dolgozót.A dolgozó tábla helytakarékos lekérdezése SET numwidth 5 SELECT * FROM dolgozó. COUNT(*) AS Létszám FROM dolgozó GROUP BY deptno.B. Eredmény RÉSZLEG LÉTSZÁM ------. Megoldás 1.----.---------. abba a részlegbe.5.A dolgozó tábla létrehozása CREATE TABLE dolgozó AS SELECT * FROM emp. ahol a legkevesebben dolgoznak.3. lépés (A részlegenkénti létszám meghatározása) SELECT deptno AS Részleg. lépés (A legkisebb létszámú részleg létszámának meghatározása) SELECT MIN(Létszám) AS Legkisebb FROM (SELECT COUNT(*) AS Létszám FROM dolgozó GROUP BY deptno).--------.---------.----. SET numwidth 10 Eredmény A tábla létrejött.41 - . Listázza a lekérdezett attribútumokat valamint a dolgozókat a felvétel előtt és után is. főnöke közvetlenül az elnök. Azonosítója a legnagyobb azonosító értéknél eggyel nagyobb.-----7369 SMITH CLERK 7902 1980-12-17 800 20 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30 7521 WARD SALESMAN 7698 1981-02-22 1250 500 30 7566 JONES MANAGER 7839 1981-04-02 2975 20 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30 7698 BLAKE MANAGER 7839 1981-05-01 2850 30 7782 CLARK MANAGER 7839 1981-06-09 2450 10 7788 SCOTT ANALYST 7566 1987-04-19 3000 20 7839 KING PRESIDENT 1981-11-17 5000 10 7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30 7876 ADAMS CLERK 7788 1987-05-23 1100 20 7900 JAMES CLERK 7698 1981-12-03 950 30 7902 FORD ANALYST 7566 1981-12-03 3000 20 7934 MILLER CLERK 7782 1982-01-23 1300 10 14 sor kijelölve.----. lépés (A dolgozó tábla létrehozása) -. -. EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----. lépés 2. 2.A. #01_SQL Bevezető Feladatgyűjtemény [26] . Neve és munkaköre választható. fizetése megfelel a részleg-átlagnak és jutalékot nem kap.

Lépés (A legkisebb létszámú részleg átlagának meghatározása kerekítve) SELECT ROUND(AVG(sal)) AS átlag FROM dolgozó GROUP BY deptno HAVING deptno = (SELECT Részleg FROM (SELECT deptno AS Részleg. Lépés (A legnagyobb azonosító meghatározása) SELECT MAX(empno) FROM dolgozó. (SELECT MIN(Létszám) AS Legkisebb FROM (SELECT COUNT(*) AS Létszám FROM dolgozó GROUP BY deptno)) WHERE Létszám = Legkisebb. Eredmény DEPTNO ---------10 vagy másképpen SELECT deptno AS részleg FROM dolgozó GROUP BY deptno HAVING COUNT(*) = (SELECT MIN(db) FROM (SELECT deptno AS részleg. (SELECT MIN(Létszám) AS Legkisebb FROM (SELECT COUNT(*) AS Létszám FROM dolgozó GROUP BY deptno)) WHERE Létszám = Legkisebb). lépés (A legkisebb létszámú részleg meghatározása) SELECT Részleg FROM (SELECT deptno AS Részleg. COUNT(*) AS Létszám FROM dolgozó GROUP BY deptno).Eredmény LEGKISEBB --------3 2.C. COUNT(*) AS db FROM dolgozó GROUP BY deptno)).42 - . COUNT(*) AS Létszám FROM dolgozó GROUP BY deptno). #01_SQL Bevezető Feladatgyűjtemény [26] . Eredmény MAX(empno) ---------7934 4. Eredmény RÉSZLEG ---------10 3.

SELECT * FROM dolgozó. Eredmény 1 sor EMPNO ----7369 7499 7521 létrejött. NULL. ENAME ---------SMITH ALLEN WARD JOB MGR HIREDATE SAL COMM DEPTNO --------.43 - . sysdate. (SELECT ROUND(AVG(sal)) AS átlag FROM dolgozó GROUP BY deptno HAVING deptno = (SELECT Részleg FROM (SELECT deptno AS Részleg. (SELECT empno FROM dolgozó WHERE UPPER(job) = 'PRESIDENT').----.----. 'Tanácsadó'.----. COUNT(*) AS Létszám FROM dolgozó GROUP BY deptno). Eredmény EMPNO ---------7839 Megoldás INSERT INTO dolgozó VALUES ( (SELECT MAX(empno) FROM dolgozó) +1.Eredmény ÁTLAG ---------2917 5. (SELECT MIN(Létszám) AS Legkisebb FROM (SELECT COUNT(*) AS Létszám FROM dolgozó GROUP BY deptno)) WHERE Létszám = Legkisebb)). COUNT(*) AS Létszám FROM dolgozó GROUP BY deptno).---------.-----CLERK 7902 1980-12-17 800 20 SALESMAN 7698 1981-02-20 1600 300 30 SALESMAN 7698 1981-02-22 1250 500 30 #01_SQL Bevezető Feladatgyűjtemény [26] . 'TÖHÖTÖM'. (SELECT MIN(Létszám) AS Legkisebb FROM (SELECT COUNT(*) AS Létszám FROM dolgozó GROUP BY deptno)) WHERE Létszám = Legkisebb) ). (SELECT Részleg FROM (SELECT deptno AS Részleg. Lépés (Az elnök kódjának meghatározása) SELECT empno FROM dolgozó WHERE UPPER(job) = 'PRESIDENT'.

44 - .7566 7654 7698 7782 7788 7839 7844 7876 7900 7902 7934 7935 JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER TÖHÖTÖM MANAGER SALESMAN MANAGER MANAGER ANALYST PRESIDENT SALESMAN CLERK CLERK ANALYST CLERK Tanácsadó 7839 7698 7839 7839 7566 7698 7788 7698 7566 7782 7839 1981-04-02 1981-09-28 1981-05-01 1981-06-09 1987-04-19 1981-11-17 1981-09-08 1987-05-23 1981-12-03 1981-12-03 1982-01-23 2006-02-21 2975 1250 2850 2450 3000 5000 1500 1100 950 3000 1300 2917 1400 0 20 30 30 10 20 10 30 20 30 20 10 10 15 sor kijelölve. #01_SQL Bevezető Feladatgyűjtemény [26] . ROLLBACK.

1.sql --------------------------------------------------------------------------.45 - .-----. Feladat (REFERENCES) Mutassa be az utólag hozzáadott hivatkozási megszorítást teljes és szűkített tábla esetén.30. SET numwidth 10 Eredmény Utólagosan hozzáadott hivatkozási megszorítás hatásának bemutatása DROP TABLE dolgozó * Hiba a(z) 1. ALTER TABLE dolgozó ADD CONSTRAINT c_mgr FOREIGN KEY (mgr) REFERENCES dolgozó (empno). >> Hivatkozási megszorítás nélkül: EMPNO -----7698 7782 7566 ENAME ---------BLAKE CLARK JONES JOB MGR HIREDATE SAL COMM DEPTNO --------. PROMPT -----------------------------PROMPT >> Hivatkozási megszorítással: ALTER TABLE dolgozó ADD CONSTRAINT c_empno PRIMARY KEY (empno). PROMPT >> Egy sikeres főnök-törlés: DELETE FROM dolgozó WHERE UPPER(ename) = 'BLAKE'.-----MANAGER 7839 1981-05-01 2850 30 MANAGER 7839 1981-06-09 2450 10 MANAGER 7839 1981-04-02 2975 20 >> Egy sikeres főnök-törlés: 1 sor törölve. sorban: ORA-00942: a tábla vagy a nézet nem létezik A tábla létrejött.Utólagosan hozzáadott hivatkozási megszorítás hatásának bemutatása --------------------------------------------------------------------------.Hivatkozási_Megszorítás-1. ROLLBACK.-----. Megoldás -.---------. SET numwidth 6 PROMPT >> Hivatkozási megszorítás nélkül: SELECT * FROM dolgozó WHERE UPPER(job) = 'MANAGER'.5. SELECT * FROM dolgozó WHERE UPPER(job) = 'MANAGER'. -------------------------------------------------------------------------PROMPT Utólagosan hozzáadott hivatkozási megszorítás hatásának bemutatása DROP TABLE dolgozó. SELECT * FROM dolgozó WHERE UPPER(job) = 'MANAGER'.10. CREATE TABLE dolgozó AS SELECT * FROM emp.Utolsó javítás dátuma: 2005. SELECT * FROM dolgozó WHERE UPPER(job) = 'MANAGER'.4.-----. #01_SQL Bevezető Feladatgyűjtemény [26] . PROMPT >> Egy sikertelen főnök-törlés: DELETE FROM dolgozó WHERE UPPER(ename) = 'BLAKE'.

-----MANAGER 7839 1981-05-01 2850 30 MANAGER 7839 1981-06-09 2450 10 MANAGER 7839 1981-04-02 2975 20 ---------------------------->> Hivatkozási megszorítással: A tábla módosítva.-----.-----.46 - . A tábla módosítva.---------.EMPNO -----7782 7566 ENAME ---------CLARK JONES JOB MGR HIREDATE SAL COMM DEPTNO --------.-----.-----.-----MANAGER 7839 1981-05-01 2850 30 MANAGER 7839 1981-06-09 2450 10 MANAGER 7839 1981-04-02 2975 20 #01_SQL Bevezető Feladatgyűjtemény [26] .-----. EMPNO -----7698 7782 7566 ENAME ---------BLAKE CLARK JONES JOB MGR HIREDATE SAL COMM DEPTNO --------. sorban: ORA-02292: integritás megszorítás (SCOTT.---------.-----. >> Egy sikertelen főnök-törlés: DELETE FROM dolgozó * Hiba a(z) 1.-----.-----.---------.gyermek rekord található meg EMPNO -----7698 7782 7566 ENAME ---------BLAKE CLARK JONES JOB MGR HIREDATE SAL COMM DEPTNO --------.-----.C_MGR) megsértés .-----MANAGER 7839 1981-06-09 2450 10 MANAGER 7839 1981-04-02 2975 20 A visszaállítás befejeződött.

job.'YYYY') BETWEEN '1980' AND '1985') AND (f. Megoldás -. ALTER TABLE dolgozó ADD CONSTRAINT c_mgr FOREIGN KEY (mgr) REFERENCES dolgozó (empno).'YYYY') BETWEEN '1980' AND '1985') (f.mgr IN (SELECT empno FROM dolgozónézet) THEN d. -------------------------------------------------------------------------PROMPT Utólagosan hozzáadott hivatkozási megszorítás hatásának bemutatása PROMPT szűkített tábla esetén SET numwidth 6 PROMPT A szűkített dolgozótáblában csak azok lehetnek főnökök.mgr ELSE NULL END AS mgr. emp f WHERE (TO_CHAR(d. SELECT * FROM dolgozó. SELECT * FROM dolgozó.sal > 2400) d.2. PROMPT -----------------------------PROMPT >> Hivatkozási megszorítással ALTER TABLE dolgozó ADD CONSTRAINT c_empno PRIMARY KEY (empno). #01_SQL Bevezető Feladatgyűjtemény [26] .hiredate. AND AND DROP TABLE dolgozó. PROMPT akik dolgozók is. CREATE TABLE dolgozó AS SELECT d. ROLLBACK. CASE WHEN d.sql --------------------------------------------------------------------------.Utólagosan hozzáadott hivatkozási megszorítás hatásának bemutatása -.Utolsó javítás dátuma: 2005.47 - . SET numwidth 10 DROP VIEW dolgozónézet. PROMPT >> Hivatkozási megszorítás nélkül PROMPT >> egy sikeres főnök-törlés: DELETE FROM dolgozó WHERE UPPER(ename) = 'BLAKE'. d. SELECT * FROM dolgozónézet.deptno FROM emp d.mgr = f.empno.10.empno FROM emp d. SELECT * FROM dolgozó.hiredate. DROP TABLE dolgozó.ename.hiredate. PROMPT >> egy sikertelen főnök-törlés: DELETE FROM dolgozó WHERE UPPER(ename) = 'BLAKE'.sal. emp f WHERE (TO_CHAR(d. d. d.30. d. SELECT * FROM dolgozó. d.szűkített tábla esetén --------------------------------------------------------------------------.comm.Hivatkozási_Megszorítás-2.sal > 2400) AND d. CREATE OR REPLACE VIEW dolgozónézet AS SELECT d. d.empno.empno.mgr = f.

A tábla eldobva.-----. #01_SQL Bevezető Feladatgyűjtemény [26] .-----. A tábla létrejött. akik dolgozók is. EMPNO -----7698 7782 7566 7654 7499 7844 7900 7521 7902 7369 7934 ENAME ---------BLAKE CLARK JONES MARTIN ALLEN TURNER JAMES WARD FORD SMITH MILLER JOB MGR HIREDATE SAL COMM DEPTNO --------.---------. A nézet létrejött. >> Hivatkozási megszorítás nélkül >> egy sikeres főnök-törlés: 1 sor törölve.---------. EMPNO -----7698 7782 7566 7654 7499 7844 7900 7521 7902 7369 7934 11 sor kijelölve.-----.-----MANAGER 1981-05-01 2850 30 MANAGER 1981-06-09 2450 10 MANAGER 1981-04-02 2975 20 SALESMAN 7698 1981-09-28 1250 1400 30 SALESMAN 7698 1981-02-20 1600 300 30 SALESMAN 7698 1981-09-08 1500 0 30 CLERK 7698 1981-12-03 950 30 SALESMAN 7698 1981-02-22 1250 500 30 ANALYST 7566 1981-12-03 3000 20 CLERK 7902 1980-12-17 800 20 CLERK 7782 1982-01-23 1300 10 11 sor kijelölve.-----. EMPNO -----7782 7566 7654 7499 7844 7900 7521 7902 7369 7934 ENAME ---------CLARK JONES MARTIN ALLEN TURNER JAMES WARD FORD SMITH MILLER JOB MGR HIREDATE SAL COMM DEPTNO --------.-----.Eredmény Utólagosan hozzáadott hivatkozási megszorítás hatásának bemutatása szűkített tábla esetén A szűkített dolgozótáblában csak azok lehetnek főnökök.48 - .-----.-----MANAGER 1981-06-09 2450 10 MANAGER 1981-04-02 2975 20 SALESMAN 7698 1981-09-28 1250 1400 30 SALESMAN 7698 1981-02-20 1600 300 30 SALESMAN 7698 1981-09-08 1500 0 30 CLERK 7698 1981-12-03 950 30 SALESMAN 7698 1981-02-22 1250 500 30 ANALYST 7566 1981-12-03 3000 20 CLERK 7902 1980-12-17 800 20 CLERK 7782 1982-01-23 1300 10 10 sor kijelölve.

-----.C_MGR) megsértés .-----.A visszaállítás befejeződött.-----MANAGER 1981-05-01 2850 30 MANAGER 1981-06-09 2450 10 MANAGER 1981-04-02 2975 20 SALESMAN 7698 1981-09-28 1250 1400 30 SALESMAN 7698 1981-02-20 1600 300 30 SALESMAN 7698 1981-09-08 1500 0 30 CLERK 7698 1981-12-03 950 30 SALESMAN 7698 1981-02-22 1250 500 30 ANALYST 7566 1981-12-03 3000 20 CLERK 7902 1980-12-17 800 20 CLERK 7782 1982-01-23 1300 10 11 sor kijelölve.gyermek rekord található meg EMPNO -----7698 7782 7566 7654 7499 7844 7900 7521 7902 7369 7934 ENAME ---------BLAKE CLARK JONES MARTIN ALLEN TURNER JAMES WARD FORD SMITH MILLER JOB MGR HIREDATE SAL COMM DEPTNO --------. sorban: ORA-02292: integritás megszorítás (SCOTT.---------.-----. #01_SQL Bevezető Feladatgyűjtemény [26] . A nézet eldobva. EMPNO -----7698 7782 7566 7654 7499 7844 7900 7521 7902 7369 7934 ENAME ---------BLAKE CLARK JONES MARTIN ALLEN TURNER JAMES WARD FORD SMITH MILLER JOB MGR HIREDATE SAL COMM DEPTNO --------.-----.-----. ---------------------------->> Hivatkozási megszorítással A tábla módosítva. >> egy sikertelen főnök-törlés: DELETE FROM dolgozó * Hiba a(z) 1.49 - .-----.---------. A tábla eldobva. A tábla módosítva.-----MANAGER 1981-05-01 2850 30 MANAGER 1981-06-09 2450 10 MANAGER 1981-04-02 2975 20 SALESMAN 7698 1981-09-28 1250 1400 30 SALESMAN 7698 1981-02-20 1600 300 30 SALESMAN 7698 1981-09-08 1500 0 30 CLERK 7698 1981-12-03 950 30 SALESMAN 7698 1981-02-22 1250 500 30 ANALYST 7566 1981-12-03 3000 20 CLERK 7902 1980-12-17 800 20 CLERK 7782 1982-01-23 1300 10 11 sor kijelölve.

ROWNUM Részletesebben lásd [2]: 6.3.50 - . részlege és főnöke legyen azonos a Martin-éval. Feladat (Egyszerű alkalmazás a ROWNUM és a nézettáblák használatára) Listázza az ábécé szerinti első három dolgozó nevét. akkor a fizetések ne változzanak. Feladat (Összetettebb alkalmazás a ROWNUM használatára) Listázza a három legkisebb átlagfizetésű munkakör dolgozóit úgy. 6. Ha ilyen nem létezik. TOVÁBBI FELADATOK T6. ha létezik második legnagyobb fizetésű dolgozó. akkor annak (vagy azoknak) a fizetését növelje meg annyival. fejezet FELADATGYŰJTEMÉNY 6.6. Listázza a megadott munkakör dolgozóit a fizetésük szerint csökkenő. amely a második legnagyobb létszámú részleg dolgozóinak jutalmat ad. Rendezze a listát a jövedelemkülönbség szerint csökkenően.1. Feladat Írjon szkript programot. 6. amely bővíti a táblát egy olyan új kereskedővel (salesman). hogy sorszámozza a munkaköröket az átlagfizetések alapján növekvő módon. Feladat (Sorrendfüggő módosítás) A felhasználó által megadott munkakörben. Feladat Növelje meg minden munkakörben a második legkisebb fizetésű dolgozó fizetését (feltéve. jutaléka a kereskedők átlagjutaléka. T6. #01_SQL Bevezető Feladatgyűjtemény [26] . ahol a jutalom az 1981-től belépett összes dolgozó második legnagyobb és második legkisebb fizetéskülönbségének 20%-a.7. Feladat (Mintanézet) Írja ki munkakörönként a legkisebb és a legnagyobb jövedelmet és e jövedelemmel rendelkező dolgozók nevét. a nevük szerint pedig növekvő sorrendben a fenti módosítás előtt és után. fizetése legyen a kereskedői fizetések közül a harmadik legkisebb. akinek azonosítója a létező legnagyobb azonosító 5-tel növelt értéke. Foglalkozás Nézettáblák.2. Feladat Írjon szkript programot. valamint a két jövedelemérték különbségét.4. hogy az legyen a legnagyobb. 6. T6.6. hogy ilyen létezik!) a munkakör legkisebb és legnagyobb fizetésének felével.5. felső-N analízis. munkakörét és fizetését az ábécé szerint rendezve.

job. Lépés (A Megoldás: az ábécé szerinti első három dolgozó listája) SELECT ename. job. Lépés (Az emp tábla tárolás szerinti első három sorának listája) SELECT ename.MEGOLDÁSGYŰJTEMÉNY 6.1. sal FROM (SELECT * FROM emp ORDER BY ename) WHERE ROWNUM <= 3. akkor nem a kívánt rekordok rendezését kapjuk. amint azt az alábbi példában láthatjuk: SELECT ename.---------SALESMAN 1600 CLERK 800 SALESMAN 1250 #01_SQL Bevezető Feladatgyűjtemény [26] . 1. sal FROM (SELECT * FROM emp) WHERE ROWNUM <= 3 ORDER BY ename. vagy egyszerűbben: SELECT ename. munkakörét és fizetését az ábécé szerint rendezve. Megoldás Az alábbiakban az egyes lépések által reprezentált néhány mintapéldán bemutatjuk a felső-N analízist lehetővé tevő ROWNUM rendszerváltozó és a nézettáblák legegyszerűbb használatát. job. sal FROM emp WHERE ROWNUM <= 3 ORDER BY ename. Feladat (Egyszerű alkalmazás a ROWNUM és a nézettáblák használatára) Listázza az ábécé szerinti első három dolgozó nevét. job. ENAME ---------ADAMS ALLEN BLAKE JOB SAL --------. ENAME ---------ALLEN SMITH WARD JOB SAL --------.51 - . sal FROM emp WHERE ROWNUM <= 3.---------CLERK 800 SALESMAN 1600 SALESMAN 1250 2. Ha – hibásan – a külső lekérdezésbe helyezzük. ENAME ---------SMITH ALLEN WARD JOB SAL --------.---------CLERK 1100 SALESMAN 1600 MANAGER 2850 Megjegyzés Az ORDER BY rendező utasításrész csak a belső lekérdezésben állhat.

SORSZÁM ---------1 2 3 NÉV ---------ADAMS ALLEN BLAKE MUNKAKÖR FIZETÉS --------. sal fizetés FROM rDolgozó WHERE ROWNUM <= 3. ename név. job munkakör. job. Lépés (A Szép Megoldás: az ábécé szerinti első három dolgozó sorszámozott listája nézettáblával. Lépés (Másik Megoldás: az ábécé szerinti első három dolgozó listája nézettáblával) SELECT ename. másodlagos oszlopnevekkel) SELECT ROWNUM sorszám.---------CLERK 1100 SALESMAN 1600 MANAGER 2850 #01_SQL Bevezető Feladatgyűjtemény [26] .52 - .---------CLERK 1100 SALESMAN 1600 MANAGER 2850 5.3. Lépés (Az ábécé szerint rendezett emp tábla nézettáblája: rDolgozó) CREATE OR REPLACE VIEW rDolgozó AS SELECT * FROM emp ORDER BY ename. sal FROM rDolgozó WHERE ROWNUM <= 3. 4. ENAME ---------ADAMS ALLEN BLAKE JOB SAL --------. A nézet létrejött.

----------------------------------------------------PROMPT >> A1 << SELECT job. hogy sorszámozza a munkaköröket az átlagfizetések alapján növekvő módon. PROMPT >> A3 << SELECT ename. PROMPT >> A4 << SELECT job. ROWNUM AS sorszám FROM (SELECT job.2.A ROWNUM és a nézettábla használatának bemutatása -----------------------------------------------------. Feladat (Összetettebb alkalmazás a ROWNUM használatára) Listázza a három legkisebb átlagfizetésű munkakör dolgozóit úgy. (SELECT job. Megoldás -.sql -----------------------------------------------------. (SELECT job.6. átlag FROM emp e. sal. e.job ORDER BY átlag. e. Az alábbi megoldások az eredeti emp táblát használják! 1. sal. átlag.job. ROUND(AVG(sal)) FROM emp GROUP BY job ORDER BY átlag) al WHERE e. átlag FROM emp e.job = al. AS átlag PROMPT >> A2 << SELECT ename.Rownum_01. PROMPT >> A5 << #01_SQL Bevezető Feladatgyűjtemény [26] AS átlag AS átlag AS átlag .job.30.10. ROUND(AVG(sal)) FROM emp GROUP BY job ORDER BY átlag) WHERE ROWNUM <= 3.53 - . ROUND(AVG(sal)) FROM emp GROUP BY job) al WHERE e.job.Utolsó javítás dátuma: 2005. ROUND(AVG(sal)) FROM emp GROUP BY job ORDER BY átlag.job = al.

sorszám FROM emp e. AS átlag AS átlag #01_SQL Bevezető Feladatgyűjtemény [26] .job = al. ROWNUM AS sorszám FROM (SELECT job.job = al. átlag. SELECT ename. mk_átlag al WHERE e.job ORDER BY sorszám. ROUND(AVG(sal)) FROM emp GROUP BY job ORDER BY átlag) WHERE ROWNUM <= 3) al WHERE e.job.SELECT ename. sorszám FROM emp e. e.job. e. DROP VIEW mk_átlag. ROUND(AVG(sal)) FROM emp GROUP BY job ORDER BY átlag) WHERE ROWNUM <= 3. átlag. ROWNUM AS sorszám FROM (SELECT job.54 - .job ORDER BY sorszám. sal. átlag. átlag. SELECT * FROM mk_átlag. PROMPT >> A6 << CREATE OR REPLACE VIEW mk_átlag AS SELECT job. sal. (SELECT job.

AS átlag AS átlag AS átlag PROMPT >> A5 << SELECT ename. PROMPT >> A4 << SELECT job. (SELECT job.job = al. sal. ROWNUM AS sorszám FROM (SELECT job.Utolsó javítás dátuma: 2006. #01_SQL Bevezető Feladatgyűjtemény [26] . ROUND(AVG(sal)) FROM emp GROUP BY job ORDER BY átlag. ----------------------------------------------------PROMPT >> A1 << SELECT job. e. sal. átlag FROM emp e.job. Megoldás -. AS átlag PROMPT >> A2 << SELECT ename. átlag FROM emp e. PROMPT >> A3 << SELECT ename.03.55 - .job.job.job. sorszám FROM emp e. átlag. e. átlag. ROUND(AVG(sal)) FROM emp GROUP BY job ORDER BY átlag) al WHERE e. (SELECT job. sal. átlag. e.job ORDER BY átlag.A ROWNUM és a nézettábla használatának bemutatása -----------------------------------------------------. ROUND(AVG(sal)) FROM emp GROUP BY job) al WHERE e. ROUND(AVG(sal)) FROM emp GROUP BY job ORDER BY átlag) WHERE ROWNUM <= 3.Rownum_02.12. (SELECT job.sql -----------------------------------------------------.2. ROWNUM AS sorszám FROM (SELECT job.job = al.

ROUND(AVG(sal)) FROM emp GROUP BY job ORDER BY átlag) WHERE ROWNUM <= 3) al WHERE e.job = al. AS átlag PROMPT >> A6 << CREATE OR REPLACE VIEW Munkakör_Átlag(Munkakör. Átlag) AS SELECT Sorszám.Munkakör ORDER BY sorszám. SELECT * FROM Munkakör_Sorszám.Átlag ORDER BY sorszám. átlag. DROP VIEW Munkakör_Sorszám.job = m.56 - . e. SELECT * FROM Átlag_Sorszám.Átlag FROM Munkakör_Átlag. sal. PROMPT >> A9<< SELECT ename. DROP VIEW Munkakör_Átlag. SELECT * FROM Munkakör_Átlag. átlag FROM (SELECT DISTINCT Átlag FROM Munkakör_Átlag ORDER BY Átlag) WHERE ROWNUM <= 3.job ORDER BY sorszám. Munkakör. Munkakör_Sorszám m WHERE e.Átlag = Átlag_Sorszám. PROMPT >> A7 << CREATE OR REPLACE VIEW Átlag_Sorszám(Sorszám. Munkakör_Átlag. Munkakör. Átlag) AS SELECT ROWNUM. PROMPT >> A8<< CREATE OR REPLACE VIEW Munkakör_Sorszám(Sorszám. DROP VIEW Átlag_Sorszám. ROUND(AVG(sal)) FROM emp GROUP BY job. sorszám FROM emp e. #01_SQL Bevezető Feladatgyűjtemény [26] . Átlag_Sorszám WHERE Munkakör_Átlag. Átlag) AS SELECT job.job.

illetve lefuttatni az [1] használata esetén az INIT1.3. E vizsgálat érdekében tegyük azonossá a CLERK és a SALESMAN munkakörűek átlagfizetését. Könnyen belátható.---------. Lépés Tekintsük ezután a Rownum_01. melyekben az átlagfizetés azonos.---------CLERK 1400 SALESMAN 1400 MANAGER 2758 ANALYST 3000 PRESIDENT 5000 5 sor kijelölve. valamint az előbbi adatmódosító utasításban az emp tábla helyére mindenütt a dolgozó tábla neve írandó. ha van két olyan munkakör. illetve a [2] használata esetén az INIT2. hogy a CLERK és a SALESMAN munkakörűek átlagfizetése azonos legyen. hogy ez elérhető például az ADAMS fizetésének a 2548 USD értékre való beállításával. így látszólag azonos hatásúak. A két megoldás vizsgálata és összehasonlítása Probléma felvetés A fenti két szkript program az emp táblára azonos eredményt ad.sql . >> A2 << ENAME ---------FORD SCOTT JAMES SMITH MILLER ADAMS BLAKE CLARK JOB SAL ÁTLAG --------. akkor viszont ne felejtsük el a vizsgálat végén kiadni a ROLLBACK utasítást.57 - .sql futásának eredményét: >> A1 << JOB ÁTLAG --------.---------ANALYST 3000 3000 ANALYST 3000 3000 CLERK 950 1400 CLERK 800 1400 CLERK 1300 1400 CLERK 2548 1400 MANAGER 2850 2758 MANAGER 2450 2758 #01_SQL Bevezető Feladatgyűjtemény [26] . Felvethető azonban.sql szkript programokban. és a Rownum_02.1. hogy miként viselkednek akkor.sql szkript programokat az emp tábla visszaállítása érdekében! 3.0. akkor a Rownum_01.sql. Ha azonban az eredeti emp tábláben dolgozunk (mi most ezt fogjuk tenni!). Ennek érdekében adjuk ki az alábbi SQL utasítást: 3. UPDATE emp SET sal = 2548 WHERE UPPER(ename) = 'ADAMS'. Lépés Az ADAMS fizetésének módosítása annak érdekében. utasítással létrehozott dolgozó táblában végezzük az adatmódosítást. Megjegyzés Ha az emp táblából a CREATE TABLE dolgozó AS SELECT * FROM emp.

>> A6 << A nézet létrejött. >> A3 << ENAME ---------JAMES SMITH MILLER ALLEN WARD MARTIN ADAMS TURNER BLAKE JONES CLARK FORD SCOTT KING JOB SAL ÁTLAG --------. #01_SQL Bevezető Feladatgyűjtemény [26] . JOB ÁTLAG SORSZÁM --------.58 - .---------CLERK 950 1400 CLERK 800 1400 CLERK 1300 1400 SALESMAN 1600 1400 SALESMAN 1250 1400 SALESMAN 1250 1400 CLERK 2548 1400 SALESMAN 1500 1400 MANAGER 2850 2758 MANAGER 2975 2758 MANAGER 2450 2758 ANALYST 3000 3000 ANALYST 3000 3000 PRESIDENT 5000 5000 14 sor kijelölve. >> A5 << ENAME ---------JAMES SMITH MILLER ADAMS MARTIN WARD TURNER ALLEN BLAKE CLARK JONES JOB SAL ÁTLAG SORSZÁM --------.---------.---------CLERK 1400 1 SALESMAN 1400 2 MANAGER 2758 3 3 sor kijelölve.---------.---------.JONES KING MARTIN ALLEN WARD TURNER MANAGER PRESIDENT SALESMAN SALESMAN SALESMAN SALESMAN 2975 5000 1250 1600 1250 1500 2758 5000 1400 1400 1400 1400 14 sor kijelölve.---------. >> A4 << JOB ÁTLAG SORSZÁM --------.---------.---------CLERK 950 1400 1 CLERK 800 1400 1 CLERK 1300 1400 1 CLERK 2548 1400 1 SALESMAN 1250 1400 2 SALESMAN 1250 1400 2 SALESMAN 1500 1400 2 SALESMAN 1600 1400 2 MANAGER 2850 2758 3 MANAGER 2450 2758 3 MANAGER 2975 2758 3 11 sor kijelölve.---------CLERK 1400 1 SALESMAN 1400 2 MANAGER 2758 3 3 sor kijelölve.

>> A2 << ENAME ---------FORD SCOTT JAMES SMITH MILLER ADAMS BLAKE CLARK JONES KING MARTIN ALLEN WARD TURNER JOB SAL ÁTLAG --------. 3.---------.59 - .---------CLERK 950 1400 CLERK 800 1400 CLERK 1300 1400 SALESMAN 1600 1400 SALESMAN 1250 1400 SALESMAN 1250 1400 CLERK 2548 1400 #01_SQL Bevezető Feladatgyűjtemény [26] .---------ANALYST 3000 3000 ANALYST 3000 3000 CLERK 950 1400 CLERK 800 1400 CLERK 1300 1400 CLERK 2548 1400 MANAGER 2850 2758 MANAGER 2450 2758 MANAGER 2975 2758 PRESIDENT 5000 5000 SALESMAN 1250 1400 SALESMAN 1600 1400 SALESMAN 1250 1400 SALESMAN 1500 1400 14 sor kijelölve.---------.---------CLERK 1400 SALESMAN 1400 MANAGER 2758 ANALYST 3000 PRESIDENT 5000 5 sor kijelölve.---------CLERK 950 1400 1 CLERK 800 1400 1 CLERK 1300 1400 1 CLERK 2548 1400 1 SALESMAN 1250 1400 2 SALESMAN 1250 1400 2 SALESMAN 1500 1400 2 SALESMAN 1600 1400 2 MANAGER 2850 2758 3 MANAGER 2450 2758 3 MANAGER 2975 2758 3 11 sor kijelölve. >> A3 << ENAME ---------JAMES SMITH MILLER ALLEN WARD MARTIN ADAMS JOB SAL ÁTLAG --------.2.ENAME ---------JAMES SMITH MILLER ADAMS MARTIN WARD TURNER ALLEN BLAKE CLARK JONES JOB SAL ÁTLAG SORSZÁM --------.sql futásának eredményét: >> A1 << JOB ÁTLAG --------. Lépés Tekintsük ezután a Rownum_02.---------.---------. A nézet eldobva.

---------ANALYST 3000 CLERK 1400 MANAGER 2758 PRESIDENT 5000 SALESMAN 1400 5 sor kijelölve. >> A6 << A nézet létrejött.---------.---------.---------1 CLERK 1400 1 SALESMAN 1400 #01_SQL Bevezető Feladatgyűjtemény [26] .60 - . >> A4 << JOB ÁTLAG SORSZÁM --------. >> A8<< A nézet létrejött.---------1 1400 2 2758 3 3000 3 sor kijelölve.---------.---------CLERK 950 1400 1 CLERK 800 1400 1 CLERK 1300 1400 1 CLERK 2548 1400 1 SALESMAN 1250 1400 2 SALESMAN 1250 1400 2 SALESMAN 1500 1400 2 SALESMAN 1600 1400 2 MANAGER 2850 2758 3 MANAGER 2450 2758 3 MANAGER 2975 2758 3 11 sor kijelölve.---------CLERK 1400 1 SALESMAN 1400 2 MANAGER 2758 3 3 sor kijelölve. MUNKAKÖR ÁTLAG --------. >> A5 << ENAME ---------JAMES SMITH MILLER ADAMS MARTIN WARD TURNER ALLEN BLAKE CLARK JONES JOB SAL ÁTLAG SORSZÁM --------.--------. SORSZÁM ÁTLAG ---------. >> A7 << A nézet létrejött.TURNER BLAKE JONES CLARK FORD SCOTT KING SALESMAN MANAGER MANAGER MANAGER ANALYST ANALYST PRESIDENT 1500 2850 2975 2450 3000 3000 5000 1400 2758 2758 2758 3000 3000 5000 14 sor kijelölve. SORSZÁM MUNKAKÖR ÁTLAG ---------.

melyek csupán egyetlen oszlopot tartalmaznak. hogy az eredeti emp tábla visszaállítható az [1] használata esetén az INIT1. tehát ez a helyes megoldás.---------. >> A9<< ENAME ---------JAMES SMITH MILLER ALLEN MARTIN ADAMS WARD TURNER BLAKE JONES CLARK FORD SCOTT 2758 3000 JOB SAL ÁTLAG SORSZÁM --------. a [2] használata esetén az INIT2. A nézet eldobva. és annak is minden értéke különböző. Lépés Összehasonlítás.2 MANAGER 3 ANALYST 4 sor kijelölve. A második megoldás már azonos sorszámmal látja el a logikailag (átlagfizetésben) azonos munkaköröket.sql) szkript programban a (DISTINCT kulsszó által biztosított módon) a különböző munkaköri átlagfizetéseket (a munkakörtől függetlenül) sorszámoztuk. hogy a ROWNUM segítségével csak akkor kapunk helyes sorszámozást. illetve a ROLLBACK utasítás segítségével.---------CLERK 950 1400 1 CLERK 800 1400 1 CLERK 1300 1400 1 SALESMAN 1600 1400 1 SALESMAN 1250 1400 1 CLERK 2548 1400 1 SALESMAN 1250 1400 1 SALESMAN 1500 1400 1 MANAGER 2850 2758 2 MANAGER 2975 2758 2 MANAGER 2450 2758 2 ANALYST 3000 3000 3 ANALYST 3000 3000 3 13 sor kijelölve.---------.sql szkript program lefuttatásával. 3. A lényeges különbség a két megoldás között az. (Ismét megjegyezzük. hogy a helyes (tehát a Rownum_02. Ez a feladat szempontjából nem logikus. A nézet eldobva. ha a ROWNUM sorszámozó eljárást olyan szelekciós listákra alkalmazzuk. és a következő lépésben a munkaköröket ezeken a (sorszámozott) átlagfizetéseken keresztül (közvetett módon) sorszámoztuk.61 - . értékelés Láthatóan az első megoldás esetén az azonos átlagfizetésű munkakörök különböző sorszámot kaptak. #01_SQL Bevezető Feladatgyűjtemény [26] .sql.3.) Tanulság A fentiek lényeges tanulsága az. A nézet eldobva.

(SELECT MIN(sal+NVL(comm.0) = al. valamint a két jövedelemérték különbségét. Lépés (Munkakörönként a legkisebb jövedelműek) SELECT ename AS kisnev.3.legkisebb_jöv .--------FORD 3000 ANALYST SCOTT 3000 ANALYST SMITH 800 CLERK CLARK 2450 MANAGER KING 5000 PRESIDENT TURNER 1500 SALESMAN 6 sor kijelölve.------------.legkisebb_jöv. legkisebb_jöv. munkak FROM emp. job AS munkak FROM emp GROUP BY job) al WHERE emp. job AS munkak FROM emp GROUP BY job) al WHERE emp. Eredmény KISNEV LEGKISEBB_JÖV MUNKAK ---------. SELECT * FROM Kicsi. 2.0)) AS legkisebb_jöv.job = al. munkak FROM emp. Feladat (Mintanézet) Írja ki munkakörönként a legkisebb és a legnagyobb jövedelmet és e jövedelemmel rendelkező dolgozók nevét. KISNEV LEGKISEBB_JÖV MUNKAK ---------.0)) AS legkisebb_jöv. (SELECT MIN(sal+NVL(comm.62 - .--------FORD 3000 ANALYST SCOTT 3000 ANALYST SMITH 800 CLERK CLARK 2450 MANAGER KING 5000 PRESIDENT TURNER 1500 SALESMAN 6 sor kijelölve.job = al.munkak AND sal+NVL(comm. Lépés (Hozzuk létre az előzők szerint a legnagyobb jövedelműek nézetét) #01_SQL Bevezető Feladatgyűjtemény [26] .------------. Rendezze a listát a jövedelemkülönbség szerint csökkenően. Lépés (Az iménti lekérdezésből hozzunk létre nézetet) CREATE OR REPLACE VIEW Kicsi AS SELECT ename AS kisnev.6.munkak AND sal+NVL(comm. 3. legkisebb_jöv. Eredmény A nézet létrejött. Megoldás 1.0) = al.

CREATE OR REPLACE VIEW Nagy AS SELECT ename.---------. Lépés (A teljes megoldás) SELECT ename AS nagynév.legkisebb_jöv AS jöv_különbség FROM Nagy JOIN Kicsi ON (munkakör = munkak) ORDER BY jöv_különbség DESC. job AS munkakör FROM emp GROUP BY job) al WHERE emp.0)) AS legnagyobb. Eredmény ENAME LEGNAGYOBB MUNKAKÖR ---------.0) = al. 4.munkakör AND sal+NVL(comm.---------. legnagyobb . Eredmény NAGYNÉV LEGNAGYOBB MUNKAKÖR KISNEV LEGKISEBB_JÖV JÖV_KÜLÖNBSÉG ---------. #01_SQL Bevezető Feladatgyűjtemény [26] . legnagyobb.--------. SELECT * FROM nagy.------------. kisnev.legnagyobb. legkisebb_jöv. legnagyobb.---------. munkakör FROM emp.------------MARTIN 2650 SALESMAN TURNER 1500 1150 JONES 2975 MANAGER CLARK 2450 525 MILLER 1300 CLERK SMITH 800 500 FORD 3000 ANALYST FORD 3000 0 SCOTT 3000 ANALYST FORD 3000 0 KING 5000 PRESIDENT KING 5000 0 FORD 3000 ANALYST SCOTT 3000 0 SCOTT 3000 ANALYST SCOTT 3000 0 8 sor kijelölve.job = al.--------FORD 3000 ANALYST SCOTT 3000 ANALYST MILLER 1300 CLERK JONES 2975 MANAGER KING 5000 PRESIDENT MARTIN 2650 SALESMAN 6 sor kijelölve. munkakör. (SELECT MAX(sal+NVL(comm.63 - .

ename ASC. CREATE OR REPLACE VIEW Különbség(érték) AS SELECT (SELECT fizetés FROM Sorrend WHERE sorszám = 1) (SELECT fizetés FROM Sorrend WHERE sorszám = 2) FROM dual. SET numwidth 10 DROP VIEW Sorrend. SELECT * FROM dolgozó WHERE UPPER(job) = UPPER('&munkakör') ORDER BY sal DESC. SELECT * FROM Sorrend.6. UPDATE dolgozó SET sal = (SELECT CASE WHEN (SELECT COUNT(*) FROM Sorrend) = 1 THEN sal ELSE (SELECT fizetés FROM Sorrend WHERE sorszám = 2) + (SELECT érték FROM Különbség) + 1 END AS sal FROM dual) WHERE UPPER(job) = UPPER('&munkakör') AND sal = (SELECT fizetés FROM Sorrend WHERE sorszám = 2). akkor annak (vagy azoknak) a fizetését növelje meg annyival. #01_SQL Bevezető Feladatgyűjtemény [26] . CREATE TABLE dolgozó AS SELECT * FROM emp. ename ASC. ha létezik második legnagyobb fizetésű dolgozó. Ha ilyen nem létezik. sorszám) AS SELECT fizetés.64 - . Megoldás SET numwidth 5 ACCEPT munkakör PROMPT "Munkakör: " DROP TABLE dolgozó.4. Listázza a megadott munkakör dolgozóit a fizetésük szerint csökkenő. akkor a fizetések ne változzanak. SELECT * FROM dolgozó WHERE UPPER(job) = UPPER('&munkakör') ORDER BY sal DESC. hogy az legyen a legnagyobb. ROWNUM FROM (SELECT DISTINCT sal AS fizetés FROM dolgozó WHERE UPPER(job) = UPPER('&munkakör') ORDER BY fizetés DESC) WHERE ROWNUM <= 2. Feladat (Sorrendfüggő módosítás) A felhasználó által megadott munkakörben. CREATE OR REPLACE VIEW Sorrend(fizetés. a nevük szerint pedig növekvő sorrendben a fenti módosítás előtt és után.

-----SALESMAN 7698 81-SZE-08 1601 0 30 SALESMAN 7698 81-FEB-20 1600 300 30 SALESMAN 7698 81-SZE-28 1250 1400 30 SALESMAN 7698 81-FEB-22 1250 500 30 A nézet eldobva.----.----. régi 7: új 7: WHERE UPPER(job) = UPPER('&munkakör') WHERE UPPER(job) = UPPER('salesman') A nézet létrejött.--------. Próbafuttatás eredménye Munkakör: analyst DROP TABLE dolgozó * Hiba a(z) 1.65 - .--------.----. régi 3: WHERE UPPER(job) = UPPER('&munkakör') új 3: WHERE UPPER(job) = UPPER('salesman') EMPNO ----7499 7844 7654 7521 ENAME ---------ALLEN TURNER MARTIN WARD JOB MGR HIREDATE SAL COMM DEPTNO --------. Próbafuttatás eredménye Munkakör: salesman A tábla eldobva. 1. sorban: ORA-00942: a tábla vagy a nézet nem létezik A tábla létrejött.DROP VIEW Különbség. régi 3: WHERE UPPER(job) = UPPER('&munkakör') új 3: WHERE UPPER(job) = UPPER('salesman') EMPNO ----7844 7499 7654 7521 ENAME ---------TURNER ALLEN MARTIN WARD JOB MGR HIREDATE SAL COMM DEPTNO --------. DROP TABLE dolgozó.------1600 1 1500 2 A nézet létrejött.----.-----SALESMAN 7698 81-FEB-20 1600 300 30 SALESMAN 7698 81-SZE-08 1500 0 30 SALESMAN 7698 81-SZE-28 1250 1400 30 SALESMAN 7698 81-FEB-22 1250 500 30 régi 11: WHERE UPPER(job) = UPPER('&munkakör') AND új 11: WHERE UPPER(job) = UPPER('salesman') AND 1 sor módosítva. A nézet eldobva. FIZETÉS SORSZÁM ------. 2.----. A tábla eldobva. #01_SQL Bevezető Feladatgyűjtemény [26] .----. A tábla létrejött. régi 7: új 7: WHERE UPPER(job) = UPPER('&munkakör') WHERE UPPER(job) = UPPER('analyst') A nézet létrejött.

#01_SQL Bevezető Feladatgyűjtemény [26] .--------.----.----.FIZETÉS SORSZÁM ------.-----ANALYST 7566 81-DEC-03 3000 20 ANALYST 7566 87-ÁPR-19 3000 20 A nézet eldobva.----. A tábla eldobva.------3000 1 A nézet létrejött.----.----.--------. régi 3: WHERE UPPER(job) = UPPER('&munkakör') új 3: WHERE UPPER(job) = UPPER('analyst') EMPNO ----7902 7788 ENAME ---------FORD SCOTT JOB MGR HIREDATE SAL COMM DEPTNO --------.66 - . régi 3: WHERE UPPER(job) = UPPER('&munkakör') új 3: WHERE UPPER(job) = UPPER('analyst') EMPNO ----7902 7788 ENAME ---------FORD SCOTT JOB MGR HIREDATE SAL COMM DEPTNO --------.-----ANALYST 7566 81-DEC-03 3000 20 ANALYST 7566 87-ÁPR-19 3000 20 régi 11: WHERE UPPER(job) = UPPER('&munkakör') AND új 11: WHERE UPPER(job) = UPPER('analyst') AND 0 sor módosítva.----. A nézet eldobva.

E táblák létrehozása előtt győződjön meg róla. akik 1980 és 1985 között léptek be. a többiek pedig 800 USD-t. A4. a nevük szerint pedig növekvő sorrendben a fenti módosítás előtt és után. és lábléccel. Kisérelje meg egy főnök törlését. akkor a fizetések ne változzanak. akkor annak (vagy azoknak) a fizetését növelje meg éppen annyival. Feladat Listázza formázva (fej-.hu címre. a részlegének nevét. a jutalmat is tartalmazó összjövedelmét. hogy a hivatkozott oszlop az empno legyen. és töltse fel ezt olymódon. A5. Ha ilyen nem létezik. Feladat Bővítse a dolgozó táblát egy jutalom oszloppal. törölje azt. SasPál_1kurzus_A. Feladat Konzisztens módon hozzon létre egy dolgozó nevű táblát az emp tábla azon dolgozóiból. fejezet FELADATGYŰJTEMÉNY A. Az utasításokat struktúrált módon írja. hogy az legyen a legnagyobb. hogy akinek nagyobb a jövedelme. Feladat Egy szkript programban végezzen megszorítás hozzáadást. mint részlegének átlagjövedelme. a főnökének nevét és a főnök telephelyének nevét. Feladatsor Az alábbi feladatokat megoldó programokat és azok futási eredményeit. A listázás után állítsa vissza az eredeti állapotot. majd egy részleg nevű táblát a dept táblából. ellenőrző listáit a főkönyvtár hallgató nevű könyvtárában az Ön nevét tartalmazó Word dokumentumba (pl. ellenőrzést és visszaállítást (ROLLBACK) az alábbi módon: Lássa el hivatkozási megszorítással a dolgozó táblában az mgr oszlopot olymódon. Feladat A felhasználó által megadott munkakörben.) a dolgozók nevét. majd visszaállítás után annak hatását. majd törölje ezt a főnököt a beosztottai előzetes törlése után. A1. elsődlegesen a főnök neve szerint növekvően. és a tankönyvek használhatók. és ha igen.67 - . Ha egy dolgozónak nincs főnöke. ha létezik második legnagyobb fizetésű dolgozó. Foglalkozás SQL összefoglaló feladatsorok Részletesebben lásd [2]: 7. és ezeket is dokumentálja. A3. Segítségként csak az Oracle Help funkciója. Listázással ellenőrizze e műveletek végrehajtását. stb. az 400 USD jutalmat kapjon.7. hogy az adott néven nem létezik-e már másik objektum (user_catalog). Listázza a megadott munkakör dolgozóit a fizetésük szerint csökkenő. akkor a főnök-adatok helyére írja ki: "nincs főnöke". majd ezt zip formátumba tömörítve küldje el egy e-mail-hez csatolva a doboz123@freemail. A részmegoldásokat próbafuttatásokkal ellenőrizze. A megoldások során rendszeresen alkalmazzon nézettáblákat! A2.doc) tárolja. #01_SQL Bevezető Feladatgyűjtemény [26] . munkakörét. másodlagosan az összjövedelem szerint csökkenően rendezve. és a főnökük fizetése 2400 USD-nél több. A további feladatok e táblákra vonatkoznak.

doc) tárolja. és ha igen. törölje azt. Kiséreljen meg egy megfelelő és egy nem megfelelő rekordot felvinni. majd ezt zip formátumba tömörítve küldje el egy e-mail-hez csatolva a doboz123@freemail. #01_SQL Bevezető Feladatgyűjtemény [26] . valamint telephelyét elsődlegesen a főnök neve szerint növekvően. hogy akinek valamelyik közvetlen beosztottja az ő jövedelmének felénél többet keres. ellenőrzést és visszaállítást (ROLLBACK) az alábbi módon: Egy MANAGER munkakörű dolgozó csak 2000 és 3000 USD tartománybeli fizetést kaphat. ellenőrző listáit a főkönyvtár hallgató nevű könyvtárában az Ön nevét tartalmazó Word dokumentumba (pl. Feladat Listázza formázva (fej-. A további feladatok e táblákra vonatkoznak. A megoldások során rendszeresen alkalmazzon nézettáblákat! B2. Segítségként csak az Oracle Help funkciója.68 - . majd egy részleg nevű táblát a dept táblából. majd visszavonás után annak hatását. másodlagosan az összjövedelem szerint csökkenő módon rendezve. Az utasításokat struktúrált módon írja. Feladatsor Az alábbi feladatokat megoldó programokat és azok futási eredményeit. és töltse fel ezt olymódon. hogy az adott néven nem létezik-e már másik objektum (user_catalog). munkakörét. E táblák létrehozása előtt győződjön meg róla. Feladat Egy szkript programban végezzen megszorítás hozzáadást. Listázással ellenőrizze e műveletek végrehajtását. a jutalmat is tartalmazó összjövedelmét és a főnökének nevét. az 1000 USD jutalmat kapjon. B3. Feladat Konzisztens módon hozzon létre egy dolgozó nevű táblát az emp tábla azon dolgozóiból.B. Ha egy dolgozónak nincs főnöke. és a tankönyvek használhatók.) a dolgozók nevét. B1. stb. akiknek minden közvetlen beosztottja 1000 USD-nél magasabb jövedelemmel rendelkezik. Feladat Bővítse a dolgozó táblát egy jutalom oszloppal.hu címre. a részlegének nevét. SasPál_1kurzus_B. A részmegoldásokat próbafuttatásokkal ellenőrizze. és lábléccel. és ezeket is dokumentálja. B4. a többiek pedig 600 USD-t. akkor a főnök nevének helyére írja ki: "=nincs főnöke=".

és annak telephelyét elsődlegesen a részleg neve szerint növekvően. C3. és ha van főnökük. Feladat Konzisztens módon hozzon létre egy dolgozó nevű táblát az emp tábla azon dolgozóiból. Feladat Listázza formázva (fej-.május 1.hu címre. majd ezt zip formátumba tömörítve küldje el egy e-mail-hez csatolva a doboz123@freemail. a többiek pedig a fizetésük 10 %-át. SasPál_1kurzus_C. #01_SQL Bevezető Feladatgyűjtemény [26] . a jutalmat is tartalmazó összjövedelmét. akkor a főnök adatainak helyére írja ki: "nincs főnök". ellenőrzést és visszaállítást (ROLLBACK) az alábbi módon: A 2000 USD-nél nagyobb fizetésű dolgozók nem kaphatnak jutalékot. Az utasításokat struktúrált módon írja. Ha egy dolgozónak nincs főnöke. a főnökének nevét. A részmegoldásokat próbafuttatásokkal ellenőrizze. akik 1980. Listázással ellenőrizze e műveletek végrehajtását. akkor az legfeljebb 4000 USD-t keres. másodlagosan a összjövedelem szerint csökkenő módon rendezve. Feladat Egy szkript programban végezzen megszorítás hozzáadást. között léptek be. A további feladatok e táblákra vonatkoznak. akkor a legkisebbnek megfelelő jutalmat kapja. A megoldások során rendszeresen alkalmazzon nézettáblákat! C2. C1. részlegének nevét. munkakörét. ellenőrző listáit a főkönyvtár hallgató nevű könyvtárában az Ön nevét tartalmazó Word dokumentumba (pl.) a dolgozók nevét. Kiséreljen meg egy megfelelő és egy nem megfelelő rekordot felvinni. Segítségként csak az Oracle Help funkciója. és 1987. és töltse fel ezt a következő módon: A három legkisebb fizetésű dolgozó kapja meg egyszeri jutalomként a fizetésének 20 %-át. továbbá egy részleg nevű táblát a dept táblából.69 - . C4. és ezeket is dokumentálja.doc) tárolja. a három legnagyobb fizetésű a fizetésének 5 %-át. és a tankönyvek használhatók. majd visszaállítás után annak hatását. Feladatsor Az alábbi feladatokat megoldó programokat és azok futási eredményeit. E táblák létrehozása előtt vizsgálja meg. Ha valamelyik dolgozóra több feltétel is teljesül.C. stb. Feladat Bővítse a dolgozó táblát egy jutalom oszloppal. hogy az adott néven létezik-e már másik objektum (user_catalog). törölje azt. és ha igen. és lábléccel.február 1.

DROP VIEW dolgozó. Feladat Konzisztens módon hozzon létre egy dolgozó nevű táblát az emp tábla azon dolgozóiból. lépés (Az emp tábla és a megjelenítés inicializálása) -. #01_SQL Bevezető Feladatgyűjtemény [26] .----------BONUS TABLE SALGRADE TABLE BIN$cf3RznwPTY+EvudRGHkQpA==$0 TABLE BIN$LyCk51gPQeGFtY6Vzpoqeg==$0 TABLE BIN$jbjmAQQlSP687PyXQeaGdA==$0 TABLE BIN$rFi9sCIrRUeZCwogOPc5ng==$0 TABLE BIN$HRjtpgeGS7+61D7GZeNSSQ==$0 TABLE BIN$0ySrJpEOQHSFkvoBFw6ReQ==$0 TABLE BIN$QUd8b6c8T7SJiG7sviD5MA==$0 TABLE BIN$wZ9aIlWzRSC4P2K5pQ3eKg==$0 TABLE DOLGOZÓ VIEW BIN$N+QGkUEwTGOeKajQfjBuVA==$0 TABLE BIN$R3gv3phyTYqHZ32rQOfM5Q==$0 TABLE BIN$dtyJYaRQQ4OXGTMY44AILQ==$0 TABLE BIN$+8fzRwI0TN+2frz59c9RxQ==$0 TABLE BIN$+O5j8FZGSmSddxZD0RkLQg==$0 TABLE BIN$Hl6MRiGSRA6TUyMVFn5z9g==$0 TABLE BIN$opEaC97PRMGFNZAr6GxRsw==$0 TABLE EMP TABLE BIN$HLIO/j11SWqL0BHKSp4V+w==$0 TABLE DEPT TABLE BIN$KWlSQ3NGQaiZkLDahyGHwQ==$0 TABLE BIN$7cWjDm8CRnugRC8rQ77uUw==$0 TABLE RÉSZLEG TABLE 24 sor kijelölve. Feladatsor A1. és a főnökük fizetése 2400 USD-nél több. törölje azt.1. DROP TABLE részleg. akik 1980 és 1985 között léptek be.sql a BIN könyvtárban van ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD'. hogy az adott néven nem létezik-e már másik objektum (user_catalog). A további feladatok e táblákra vonatkoznak.70 - . E táblák létrehozása előtt győződjön meg róla. lépés (Az esetlegesen létező azonos nevű objektumok törlése) SELECT * FROM user_catalog.Feltételezve. TABLE_NAME TABLE_TYPE -----------------------------. SET numwidth 5 A munkamenet módosítva. 0. A megoldások során rendszeresen alkalmazzon nézettáblákat! Megoldás 0. majd egy részleg nevű táblát a dept táblából. hogy az INIT1. és ha igen. A tábla eldobva.MEGOLDÁSGYŰJTEMÉNY A.@INIT1 -. A nézet eldobva.2.

Az engedélyezés sikeresen befejeződött.* FROM emp d.'YYYY')) BETWEEN 1980 AND 1985 d.3. f. emp f WHERE TO_NUMBER(TO_CHAR(d. f.---------.sal AS FőnökFiz FROM emp d. CASE WHEN mgr IN (SELECT empno FROM dolgozónézet) THEN mgr #01_SQL Bevezető Feladatgyűjtemény [26] . ám a fenti lista alapján létrehozható adattábla ezt még nem biztosítja. ename.'YYYY')) BETWEEN 1980 AND 1985 d. -. job. SELECT * FROM dolgozónézet. CREATE TABLE dolgozó AS SELECT empno.ename AS Főnök. hiszen a KING főnökként szerepel. lépés (A dolgozó tábla létrehozása) -.0.sal > 2400. akik dolgozók is.-------MANAGER 7839 1981-05-01 2850 30 KING 5000 MANAGER 7839 1981-06-09 2450 10 KING 5000 MANAGER 7839 1981-04-02 2975 20 KING 5000 SALESMAN 7698 1981-09-28 1250 1400 30 BLAKE 2850 SALESMAN 7698 1981-02-20 1600 300 30 BLAKE 2850 SALESMAN 7698 1981-09-08 1500 0 30 BLAKE 2850 CLERK 7698 1981-12-03 950 30 BLAKE 2850 SALESMAN 7698 1981-02-22 1250 500 30 BLAKE 2850 ANALYST 7566 1981-12-03 3000 20 JONES 2975 CLERK 7902 1980-12-17 800 20 FORD 3000 CLERK 7782 1982-01-23 1300 10 CLARK 2450 11 sor kijelölve. lépés (Jogosultságot adunk a Scott felhasználónak nézettábla létrehozására) CONNECT sys/gazda AS SYSDBA Kapcsolódva.71 - .sal > 2400.A megfelelő dolgozók nézettáblája: CREATE OR REPLACE VIEW dolgozónézet AS SELECT d.empno f. Az ehhez szükséges vizsgálat érdekében létrehozzuk az alábbi dolgozónézet nézettáblát. GRANT CREATE VIEW TO scott. EMPNO ----7698 7782 7566 7654 7499 7844 7900 7521 7902 7369 7934 ENAME ---------BLAKE CLARK JONES MARTIN ALLEN TURNER JAMES WARD FORD SMITH MILLER AND AND JOB MGR HIREDATE SAL COMM DEPTNO FŐNÖK FŐNÖKFIZ --------.A megfelelő dolgozók listája az eredeti táblában: SELECT d.-----. holott az adott kiválasztásban nincs a dolgozók között.mgr = f.---------. emp f WHERE TO_NUMBER(TO_CHAR(d.A megfelelelő dolgozók konzisztens adattáblája: DROP TABLE dolgozó. Ez inkonzisztenciát (adatellentmondást) okozna! A dolgozó adattábla konzisztenciáját azáltal biztosíthatjuk.mgr = f.empno f.hiredate.----.hiredate.----. hogy mindazon dolgozók mgr kódját NULL értékkel helyettesítjük. Megjegyzés A származtatott dolgozó táblában csak azok lehetnek főnökök.*. 1.----. akiknek főnökük a származtatott adattáblába nem került be. AND AND -. CONNECT scott/tiger Kapcsolódva.

---------.----.ELSE NULL END AS mgr.---------.----. hiredate. A tábla létrejött. A tábla létrejött. lépés (A részleg tábla létrehozása) DROP TABLE részleg. sal.----.----.-----MANAGER 7839 1981-05-01 2850 30 MANAGER 7839 1981-06-09 2450 10 MANAGER 7839 1981-04-02 2975 20 SALESMAN 7698 1981-09-28 1250 1400 30 SALESMAN 7698 1981-02-20 1600 300 30 SALESMAN 7698 1981-09-08 1500 0 30 CLERK 7698 1981-12-03 950 30 SALESMAN 7698 1981-02-22 1250 500 30 ANALYST 7566 1981-12-03 3000 20 CLERK 7902 1980-12-17 800 20 CLERK 7782 1982-01-23 1300 10 11 sor kijelölve. EMPNO ----7698 7782 7566 7654 7499 7844 7900 7521 7902 7369 7934 ENAME ---------BLAKE CLARK JONES MARTIN ALLEN TURNER JAMES WARD FORD SMITH MILLER JOB MGR HIREDATE SAL COMM DEPTNO --------. CREATE TABLE részleg AS SELECT * FROM dept. SELECT * FROM részleg. SELECT * FROM dolgozó. A nézet eldobva. DEPTNO -----10 20 30 40 DNAME -------------ACCOUNTING RESEARCH SALES OPERATIONS LOC ------------NEW YORK DALLAS CHICAGO BOSTON #01_SQL Bevezető Feladatgyűjtemény [26] .-----MANAGER 1981-05-01 2850 30 MANAGER 1981-06-09 2450 10 MANAGER 1981-04-02 2975 20 SALESMAN 7698 1981-09-28 1250 1400 30 SALESMAN 7698 1981-02-20 1600 300 30 SALESMAN 7698 1981-09-08 1500 0 30 CLERK 7698 1981-12-03 950 30 SALESMAN 7698 1981-02-22 1250 500 30 ANALYST 7566 1981-12-03 3000 20 CLERK 7902 1980-12-17 800 20 CLERK 7782 1982-01-23 1300 10 11 sor kijelölve. EMPNO ----7698 7782 7566 7654 7499 7844 7900 7521 7902 7369 7934 ENAME ---------BLAKE CLARK JONES MARTIN ALLEN TURNER JAMES WARD FORD SMITH MILLER JOB MGR HIREDATE SAL COMM DEPTNO --------.72 - . A tábla eldobva. A tábla eldobva. deptno FROM dolgozónézet. A nézet létrejött. DROP VIEW dolgozónézet.----.----. 2. comm.

12) OszlopNeve. A tábla módosítva. hogy a hivatkozott oszlop az empno legyen. search_condition FROM user_constraints WHERE LOWER(table_name) = 'dolgozó'. user_constraints. TablaNeve ASC.6) Tipus.A2. constraint_name. ha az általa hivatkozott empno oszlop elsődleges kulcs. constraint_type. SUBSTR(LOWER(user_constraints.constraint_type. SUBSTR(user_constraints. #01_SQL Bevezető Feladatgyűjtemény [26] .table_name) IN ('dolgozó'.1. majd visszaállítás után annak hatását. Listázással ellenőrizze e műveletek végrehajtását. Kisérelje meg egy főnök törlését.constraint_name.owner). ezért először ezt kell beállítani.1.1. ellenőrzést és visszaállítást (ROLLBACK) az alábbi módon: Lássa el hivatkozási megszorítással a dolgozó táblában az mgr oszlopot olymódon.10) Tulajdonos.column_name. RPAD(user_constraints.search_condition Leiras FROM user_constraints. A tábla módosítva. -.'részleg')) ORDER BY Tulajdonos ASC.table_name). majd törölje ezt a főnököt a beosztottai előzetes törlése után. CLEAR BREAKS CLEAR COLUMNS Tulajdonos TáblaNév OszlopNév ---------.constraint_name = user_cons_columns.20) Megszoritas.A dolgozó és a részleg táblák megszorításai: BREAK ON Tulajdonos ON TablaNeve COLUMN Tulajdonos FORMAT A10 HEADING "|Tulajdonos" COLUMN TablaNeve FORMAT A10 HEADING "|TáblaNév" COLUMN OszlopNeve FORMAT A12 HEADING "|OszlopNév" COLUMN Megszoritas FORMAT A17 HEADING "Megszorítás|Neve" COLUMN Tipus FORMAT A6 HEADING "|Tipusa" COLUMN Leiras FORMAT A22 HEADING "|Leírása" SELECT SUBSTR(LOWER(user_constraints.---------.-----------scott dolgozó DEPTNO EMPNO részleg DEPTNO breaks törölve columns törölve Megszorítás Neve ----------------SYS_C005641 SYS_C005640 SYS_C005642 Tipusa -----C C C Leírása ---------------------"DEPTNO" IS NOT NULL "EMPNO" IS NOT NULL "DEPTNO" IS NOT NULL Megjegyzés Mivel definíció szerint az mgr oszlophoz csak akkor rendelhető hivatkozási megszorítás.73 - .10) TablaNeve. Feladat Egy szkript programban végezzen megszorítás hozzáadást.constraint_name) AND (LOWER(user_constraints. OszlopNeve ASC. RPAD(user_cons_columns. Megoldás -. TABLE dolgozó CONSTRAINT hivatkozó FOREIGN KEY (mgr) REFERENCES dolgozó (empno).Ekkor a dolgozó tábla megszorításai: COLUMN table_name FORMAT A11 COLUMN constraint_name FORMAT A16 COLUMN constraint_type FORMAT A20 COLUMN search_condition FORMAT A20 SELECT table_name. ALTER ADD ALTER ADD TABLE dolgozó CONSTRAINT kulcs PRIMARY KEY (empno). user_cons_columns WHERE (user_constraints.

sorban: ORA-02292: integritás megszorítás (SCOTT. SELECT * FROM dolgozó.--------.---------.74 - . EMPNO ENAME JOB MGR ----.-----MANAGER 1981-06-09 2450 10 MANAGER 1981-04-02 2975 20 ANALYST 7566 1981-12-03 3000 20 CLERK 7902 1980-12-17 800 20 CLERK 7782 1982-01-23 1300 10 -.ename FROM dolgozó d. -.----.ename) = 'BLAKE').---------------. SELECT * FROM dolgozó.HIVATKOZÓ) megsértés . HIREDATE SAL COMM DEPTNO ---------.mgr = f.Állítsuk vissza a törlés előtti állapotot: ROLLBACK.Először a Blake közvetlen beosztottjait töröljük ki: DELETE FROM dolgozó WHERE ename IN (SELECT d.----.-----1981-05-01 2850 30 1981-06-09 2450 10 1981-04-02 2975 20 1981-09-28 1250 1400 30 1981-02-20 1600 300 30 1981-09-08 1500 0 30 1981-12-03 950 30 1981-02-22 1250 500 30 1981-12-03 3000 20 1980-12-17 800 20 1982-01-23 1300 10 #01_SQL Bevezető Feladatgyűjtemény [26] . A visszaállítás befejeződött.----.----. 1 sor törölve.----. EMPNO ----7782 7566 7902 7369 7934 ENAME ---------CLARK JONES FORD SMITH MILLER JOB MGR HIREDATE SAL COMM DEPTNO --------. dolgozó f WHERE d. Kísérlet (Sikeres törlés) -. 5 sor törölve.---------.Ezután már kitörölhető maga a Blake is: DELETE FROM dolgozó WHERE UPPER(ename) = 'BLAKE'.empno AND UPPER(f.-------------------.-------------------DOLGOZÓ HIVATKOZÓ R DOLGOZÓ KULCS P DOLGOZÓ SYS_C005521 C "DEPTNO" IS NOT NULL DOLGOZÓ SYS_C005520 C "EMPNO" IS NOT NULL columns törölve Ellenőrzés 1. Kísérlet (Sikertelen törlés) DELETE FROM dolgozó WHERE UPPER(ename) = 'BLAKE'. DELETE FROM dolgozó * Hiba a(z) 1.gyermek rekord található meg 2.CLEAR COLUMNS TABLE_NAME CONSTRAINT_NAME CONSTRAINT_TYPE SEARCH_CONDITION ----------.----7698 BLAKE MANAGER 7782 CLARK MANAGER 7566 JONES MANAGER 7654 MARTIN SALESMAN 7698 7499 ALLEN SALESMAN 7698 7844 TURNER SALESMAN 7698 7900 JAMES CLERK 7698 7521 WARD SALESMAN 7698 7902 FORD ANALYST 7566 7369 SMITH CLERK 7902 7934 MILLER CLERK 7782 11 sor kijelölve.

-. DEPTNO RÁTLAG -----. az 400 USD jutalmat kapjon. hogy akinek nagyobb a jövedelme.deptno). SELECT * FROM NagyJövedelműek.0) > (SELECT rátlag FROM rÁtlagJövedelem r WHERE e.vagy másként: CREATE OR REPLACE VIEW NagyJövedelműek(empno) AS SELECT empno FROM dolgozó e WHERE sal+NVL(comm.0) > r.-----10 1875 20 2258 30 1933 -. Feladat Bővítse a dolgozó táblát egy jutalom oszloppal. mint részlegének átlagjövedelme.Azok listája. EMPNO ----7782 7902 7566 7654 7698 -.rátlag.deptno = r. akinek jövedelmük nagyobb a részlegük átlagánál: CREATE OR REPLACE VIEW NagyJövedelműek(empno) AS SELECT empno FROM dolgozó e. Megoldás ALTER TABLE dolgozó ADD jutalom NUMBER. SELECT * FROM NagyJövedelműek. A nézet létrejött. és töltse fel ezt olymódon. A tábla módosítva.Az egyes részlegek átlagjövedelme: CREATE OR REPLACE VIEW rÁtlagJövedelem(deptno.deptno = r.rÁtlag) AS SELECT deptno.0))) FROM dolgozó GROUP BY deptno. A nézet létrejött.75 - . ROUND(AVG(sal+NVL(comm. a többiek pedig 800 USD-t. A nézet létrejött. SELECT * FROM rÁtlagJövedelem.deptno AND sal+NVL(comm. EMPNO ----7698 7782 7566 7654 7902 #01_SQL Bevezető Feladatgyűjtemény [26] . rÁtlagJövedelem r WHERE e.A3.

------MANAGER 1981-05-01 2850 30 400 MANAGER 1981-06-09 2450 10 400 MANAGER 1981-04-02 2975 20 400 SALESMAN 7698 1981-09-28 1250 1400 30 400 SALESMAN 7698 1981-02-20 1600 300 30 800 SALESMAN 7698 1981-09-08 1500 0 30 800 CLERK 7698 1981-12-03 950 30 800 SALESMAN 7698 1981-02-22 1250 500 30 800 ANALYST 7566 1981-12-03 3000 20 400 CLERK 7902 1980-12-17 800 20 800 CLERK 7782 1982-01-23 1300 10 800 11 sor kijelölve.0) > r. rÁtlagJövedelem r WHERE e.Legyen e dolgozók jutalom értéke 400 USD... A nézet eldobva.vagy másként (nézettábla használattal): UPDATE dolgozó SET jutalom = 400 WHERE empno IN (SELECT empno FROM NagyJövedelműek). -.deptno AND sal+NVL(comm.76 - .Megjegyzés A két lista tartalma azonos. EMPNO ----7698 7782 7566 7654 7499 7844 7900 7521 7902 7369 7934 ENAME ---------BLAKE CLARK JONES MARTIN ALLEN TURNER JAMES WARD FORD SMITH MILLER JOB MGR HIREDATE SAL COMM DEPTNO JUTALOM --------.---------.----. DROP VIEW NagyJövedelműek. a többieké pedig 800 USD: UPDATE dolgozó SET jutalom = 800 WHERE jutalom IS NULL. 5 sor módosítva.----. UPDATE dolgozó SET jutalom = 400 WHERE empno IN (SELECT empno FROM dolgozó e.----.Töröljük a fölöslegessé vált nézettáblákat: DROP VIEW rÁtlagJövedelem.deptno = r... #01_SQL Bevezető Feladatgyűjtemény [26] . SELECT * FROM dolgozó.-----.. A nézet eldobva. 6 sor módosítva. -. . még ha a sorrend (a különböző lekérdezés miatt) különböző is.rátlag). -. Adatmódosítás -.

és lábléccel.) a dolgozók nevét. másodlagosan az összjövedelem szerint csökkenően rendezve. akkor a főnök-adatok helyére írja ki: "nincs főnöke".A4. Osszes DESC.77 - . stb.mgr = f. munkakörét.0)+d.comm.--------------.dname AS d.'nincs főnöke') AS FROM dolgozó d.deptno = dr. Megoldás SET SET SET SET SET verify OFF numwidth 5 pagesize 21 linesize 85 feedback OFF BREAK ON Munkakor ON DolgozoReszleg TTITLE 'Dolgozók adatainak|nyilvántartása' BTITLE 'Budapesti Műszaki Főiskola' COLUMN DolgozoNeve HEADING 'A dolgozó|neve' COLUMN Munkakor HEADING 'A dolgozó|munkaköre' COLUMN DolgozoReszleg HEADING 'A dolgozó|részlege' COLUMN Osszes HEADING 'A dolgozó|összjövedelme' COLUMN FonokNeve HEADING 'A főnök|neve' COLUMN FonokTelep HEADING 'A főnök|telephelye' SELECT d.deptno(+) ORDER BY FonokNeve ASC. Feladat Listázza formázva (fej-. a főnökének nevét és a főnök telephelyének nevét.job AS dr. Osszes. a részlegének nevét. FonokTelep lap 1 CLERK A dolgozó A dolgozó A főnök A főnök részlege összjövedelme neve telephelye -----------. részleg dr. SET verify ON SET numwidth 10 SET pagesize 40 SET linesize 400 SET feedback ON TTITLE OFF BTITLE OFF CLEAR BREAKS CLEAR COLUMNS Szo Nov. részleg fr WHERE d.loc.jutalom AS NVL(f.empno(+) AND d.deptno = fr.ename AS d. 19 Dolgozók adatainak nyilvántartása A dolgozó neve --------------MARTIN ALLEN WARD TURNER JAMES MILLER SMITH A dolgozó munkaköre ---------SALESMAN FORMAT A15 FORMAT A10 FORMAT A12 JUSTIFY RIGHT FORMAT A15 FORMAT A12 DolgozoNeve.sal+NVL(d. a jutalmat is tartalmazó összjövedelmét.'nincs főnöke') AS NVL(fr.------------. dolgozó f.ename. FonokNeve. elsődlegesen a főnök neve szerint növekvően.-----------SALES 3050 BLAKE CHICAGO 2700 BLAKE CHICAGO 2550 BLAKE CHICAGO 2300 BLAKE CHICAGO SALES 1750 BLAKE CHICAGO ACCOUNTING 2100 CLARK NEW YORK RESEARCH 1600 FORD DALLAS #01_SQL Bevezető Feladatgyűjtemény [26] . Ha egy dolgozónak nincs főnöke.deptno AND f. DolgozoReszleg. Munkakor.

FORD JONES BLAKE CLARK ANALYST MANAGER RESEARCH RESEARCH SALES ACCOUNTING 3400 3375 3250 2850 JONES nincs főnöke nincs főnöke nincs főnöke DALLAS nincs főnöke nincs főnöke nincs főnöke Budapesti Műszaki Főiskola #01_SQL Bevezető Feladatgyűjtemény [26] .78 - .

ha létezik második legnagyobb fizetésű dolgozó.aaa. akkor annak (vagy azoknak) a fizetését növelje meg éppen annyival. SELECT * FROM dolgozó WHERE UPPER(job) = UPPER('&munkakör') ORDER BY sal DESC. ROLLBACK. SELECT * FROM dolgozó WHERE UPPER(job) = UPPER('&munkakör') ORDER BY sal DESC.79 - . Megoldás (A feladat megoldásának szkript programja – aaa. Ha ilyen nem létezik. A listázás után állítsa vissza az eredeti állapotot. a nevük szerint pedig növekvő sorrendben a fenti módosítás előtt és után. Listázza a megadott munkakör dolgozóit a fizetésük szerint csökkenő.A5. sorszám) AS SELECT fizetés. hogy az legyen a legnagyobb.sql ACCEPT munkakör PROMPT "Munkakör: " CREATE OR REPLACE VIEW Sorrend(fizetés. UPDATE dolgozó SET sal = (SELECT CASE WHEN (SELECT COUNT(*) FROM sorrend) = 1 THEN sal ELSE (SELECT fizetés FROM Sorrend WHERE sorszám = 2) + (SELECT érték FROM Különbség) + 1 END AS sal FROM dual) WHERE UPPER(job) = UPPER('&munkakör') AND sal = (SELECT fizetés FROM Sorrend WHERE sorszám = 2). ROWNUM FROM (SELECT DISTINCT sal AS fizetés FROM dolgozó WHERE UPPER(job) = UPPER('&munkakör') ORDER BY fizetés DESC) WHERE ROWNUM <= 2. akkor a fizetések ne változzanak. ename ASC.sql) . #01_SQL Bevezető Feladatgyűjtemény [26] . CREATE OR REPLACE VIEW Különbség(érték) AS SELECT (SELECT fizetés FROM Sorrend WHERE sorszám = 1) (SELECT fizetés FROM Sorrend WHERE sorszám = 2) FROM dual. ename ASC. SELECT * FROM Sorrend. Feladat A felhasználó által megadott munkakörben.

----. Eredmény SQL> @aaa Munkakör: analyst régi 7: WHERE UPPER(job) = UPPER('&munkakör') új 7: WHERE UPPER(job) = UPPER('analyst') A nézet létrejött.----.----.--------.---------.-----.1. FIZETÉS SORSZÁM ------.----.----.---------. Eredmény SQL> @aaa Munkakör: salesman régi 7: WHERE UPPER(job) = UPPER('&munkakör') új 7: WHERE UPPER(job) = UPPER('salesman') A nézet létrejött. régi 3: WHERE UPPER(job) = UPPER('&munkakör') új 3: WHERE UPPER(job) = UPPER('analyst') EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO JUTALOM ----. régi 3: WHERE UPPER(job) = UPPER('&munkakör') új 3: WHERE UPPER(job) = UPPER('salesman') EMPNO ----7499 7844 7654 7521 ENAME ---------ALLEN TURNER MARTIN WARD JOB MGR HIREDATE SAL COMM DEPTNO JUTALOM --------. 2.---------.------1600 1 1500 2 2 sor kijelölve.------SALESMAN 7698 1981-02-20 1600 300 30 800 SALESMAN 7698 1981-09-08 1500 0 30 800 SALESMAN 7698 1981-09-28 1250 1400 30 400 SALESMAN 7698 1981-02-22 1250 500 30 800 régi 11: WHERE UPPER(job) = UPPER('&munkakör') AND új 11: WHERE UPPER(job) = UPPER('salesman') AND 1 sor módosítva.------3000 1 1 sor kijelölve.-----.-----. A nézet létrejött.----.------SALESMAN 7698 1981-09-08 1601 0 30 800 SALESMAN 7698 1981-02-20 1600 300 30 800 SALESMAN 7698 1981-09-28 1250 1400 30 400 SALESMAN 7698 1981-02-22 1250 500 30 800 A visszaállítás befejeződött.80 - . régi 3: WHERE UPPER(job) = UPPER('&munkakör') új 3: WHERE UPPER(job) = UPPER('salesman') EMPNO ----7844 7499 7654 7521 ENAME ---------TURNER ALLEN MARTIN WARD JOB MGR HIREDATE SAL COMM DEPTNO JUTALOM --------.------7902 FORD ANALYST 7566 1981-12-03 3000 20 400 #01_SQL Bevezető Feladatgyűjtemény [26] .----.----. A nézet létrejött. FIZETÉS SORSZÁM ------.---------.----.

----. DROP TABLE dolgozó.---------.--------.81 - .------7902 FORD ANALYST 7566 1981-12-03 3000 20 400 1 sor kijelölve. #01_SQL Bevezető Feladatgyűjtemény [26] . eldobva.---------. eldobva.----. DROP TABLE részleg.1 sor kijelölve. DROP VIEW Különbség. régi 11: WHERE UPPER(job) = UPPER('&munkakör') AND új 11: WHERE UPPER(job) = UPPER('analyst') AND 0 sor módosítva. SET numwidth 10 A A A A nézet nézet tábla tábla eldobva. régi 3: WHERE UPPER(job) = UPPER('&munkakör') új 3: WHERE UPPER(job) = UPPER('analyst') EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO JUTALOM ----. táblákat és állítsuk vissza az alapértelmezett megjelenítést: UNDEFINE munkakör DROP VIEW Sorrend.----. A visszaállítás befejeződött. eldobva. nézettáblákat.-----. Végül töröljük a létrehozott változókat.

sem nézetként). CREATE TABLE dolgozó AS SELECT * FROM emp WHERE empno IN (SELECT mgr FROM emp GROUP BY mgr HAVING MIN(sal+NVL(comm.2. SELECT * FROM dolgozó.0)) > 1000). Feladatsor B1. lépés (Az emp tábla és a megjelenítés inicializálása) -.B. akiknek minden közvetlen beosztottja 1000 USD-nél magasabb jövedelemmel rendelkezik. lépés (Esetlegesen létező azonos nevű objektumok törlése) SELECT * FROM user_catalog WHERE UPPER(TABLE_NAME) NOT LIKE '%BIN%'. hogy az adott néven nem létezik-e már másik objektum (user_catalog). A megoldások során alkalmazzon nézettáblákat! Megoldás 0. Feladat Konzisztens módon hozzon létre egy dolgozó nevű táblát az emp tábla azon dolgozóiból. E táblák létrehozása előtt győződjön meg róla. tehát nincs további teendő.Feltételezve.1. #01_SQL Bevezető Feladatgyűjtemény [26] .@INIT1 -. hogy az INIT1. SET numwidth 5 A munkamenet módosítva.0)) > 1000). 1. lépés (A dolgozó tábla létrehozása) 1-A megoldás -. A további feladatok e táblákra vonatkoznak.A megfelelő dolgozók listája: SELECT * FROM emp WHERE empno IN (SELECT mgr FROM emp GROUP BY mgr HAVING MIN(sal+NVL(comm.Ennek alapján hozzuk létre a dolgozó táblát: DROP TABLE dolgozó. és ha igen. 0. -. törölje azt. TABLE_NAME -----------------------------BONUS SALGRADE EMP DEPT TABLE_TYPE ----------TABLE TABLE TABLE TABLE Nem szerepel a dolgozó és a részleg objektum (sem táblaként.82 - .sql a BIN könyvtárban van ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD'. majd egy részleg nevű táblát a dept táblából.

----.-----MANAGER 7839 1981-04-02 2975 20 MANAGER 7839 1981-06-09 2450 10 ANALYST 7566 1987-04-19 3000 20 PRESIDENT 1981-11-17 5000 10 #01_SQL Bevezető Feladatgyűjtemény [26] .EMPNO ----7566 7782 7788 7839 ENAME ---------JONES CLARK SCOTT KING JOB MGR HIREDATE SAL COMM DEPTNO --------.83 - .---------.----.----.

----. -. -.----. SELECT * FROM dolgozó.-----MANAGER 7839 1981-04-02 2975 20 MANAGER 7839 1981-06-09 2450 10 ANALYST 7566 1987-04-19 3000 20 PRESIDENT 1981-11-17 5000 10 Töröljük a fölöslegessé vált nézettáblákat: DROP VIEW JóFőnökök.akinek a jövedelme kisebb 1000 USD-nél (ezek nem felelnek meg a feltételnek): SELECT mgr FROM emp WHERE sal+NVL(comm.Azon főnökök azonosítói. A nézet eldobva.0) <= 1000. -. #01_SQL Bevezető Feladatgyűjtemény [26] . EMPNO ----7566 7782 7788 7839 ENAME ---------JONES CLARK SCOTT KING JOB MGR HIREDATE SAL COMM DEPTNO --------. -.0) <= 1000). akiknek van olyan beosztottjuk.Ezeket ki kell hagyni az összes főnök közül: SELECT DISTINCT mgr FROM emp WHERE mgr IS NOT NULL AND mgr NOT IN (SELECT mgr FROM emp WHERE sal+NVL(comm. -. SELECT * FROM JóFőnökök.0) <= 1000).Hozzuk létre a dolgozó táblát: DROP TABLE dolgozó.---------.84 - .1-B megoldás -.A főnökök azonosítói: SELECT DISTINCT mgr FROM emp WHERE MGR IS NOT NULL. CREATE TABLE dolgozó AS SELECT * FROM emp WHERE empno IN (SELECT mgr FROM JóFőnökök).Ebből készítsünk egy nézettáblát: CREATE OR REPLACE VIEW JóFőnökök AS SELECT DISTINCT mgr FROM emp WHERE mgr IS NOT NULL AND mgr NOT IN (SELECT mgr FROM emp WHERE sal+NVL(comm.----.

-.fazon MINUS SELECT empno FROM emp WHERE sal+NVL(comm. akiknek minden beosztottjuk 1000 USD-nél magasabb jövedelemmel -.empno.-----MANAGER 7839 1981-04-02 2975 20 MANAGER 7839 1981-06-09 2450 10 ANALYST 7566 1987-04-19 3000 20 PRESIDENT 1981-11-17 5000 10 -. -.empno.ename FROM emp d.Hozzuk létre a dolgozó táblát: DROP TABLE dolgozó.----.dazon FROM KözvetlenBeosztottak k WHERE f. -.empno AND d.Azon dolgozók nézettáblája. emp f WHERE d. akiknek van beosztottjuk (a főnökök): CREATE OR REPLACE VIEW Főnökök(fazon) AS SELECT DISTINCT mgr FROM emp WHERE mgr IS NOT NULL. dazon. d.0) > 1000.Töröljük a fölöslegessé vált nézettáblákat: DROP VIEW Főnökök. DROP VIEW KözvetlenBeosztottak.---------.0) > 1000). -.----.Azon dolgozók listája.fazon = k. dnév) AS SELECT f. #01_SQL Bevezető Feladatgyűjtemény [26] . CREATE TABLE dolgozó AS SELECT * FROM emp WHERE empno IN (SELECT mgr FROM JóFőnökök). SELECT * FROM KözvetlenBeosztottak. f.mgr = f. fnév. SELECT * FROM JóFőnökök.rendelkezik (vagyis a közvetlen beosztottak halmaza a részhalmaza az 1000 USD-nél magasabb -.----. SELECT * FROM dolgozó.ename. EMPNO ----7566 7782 7788 7839 ENAME ---------JONES CLARK SCOTT KING JOB MGR HIREDATE SAL COMM DEPTNO --------. d.A főnökök közvetlen beosztottainak nézettáblája: CREATE OR REPLACE VIEW KözvetlenBeosztottak(fazon.85 - . algebrailag felírva: A ≠ ∅ esetén A \ B = ∅ ⇒ A ⊄ B): CREATE OR REPLACE VIEW JóFőnökök AS SELECT fazon AS mgr FROM Főnökök f WHERE NOT EXISTS (SELECT k.jövedelemmel rendelkezőknek. akik 1000 USD-nél magasabb jövedelemmel rendelkeznek: SELECT empno FROM emp WHERE sal+NVL(comm.Azon főnökök nézettáblája.mgr IS NOT NULL. SELECT * FROM Főnökök.1-C megoldás -.

A tábla eldobva. A nézet eldobva.86 - . A tábla létrejött. CREATE TABLE részleg AS SELECT * FROM dept. A nézet eldobva. lépés (A részleg tábla létrehozása) DROP TABLE részleg. A nézet eldobva. 2. SELECT * FROM részleg. DEPTNO -----10 20 30 40 DNAME -------------ACCOUNTING RESEARCH SALES OPERATIONS LOC ------------NEW YORK DALLAS CHICAGO BOSTON #01_SQL Bevezető Feladatgyűjtemény [26] .DROP VIEW JóFőnökök.

'JULISKA'. CLEAR COLUMNS TABLE_NAME CONSTRAINT_NAME CONSTRAINT_TYPE SEARCH_CONDITION ---------.A dolgozó és a részleg táblák megszorításai: -.20).--------------.7788.NULL.---------------.20). search_condition FROM user_constraints WHERE LOWER(table_name) IN ('dolgozó'.A kívánt megszorítás hozzáadása: ALTER TABLE dolgozó ADD CONSTRAINT kulcsfiz CHECK ((sal BETWEEN 2000 AND 3000 AND UPPER(job) = 'MANAGER') OR (UPPER(job) != 'MANAGER')). search_condition FROM user_constraints WHERE LOWER(table_name) = 'dolgozó'.Ekkor a dolgozó tábla megszorításai: COLUMN table_name FORMAT A10 COLUMN constraint_name FORMAT A15 COLUMN constraint_type FORMAT A16 COLUMN search_condition FORMAT A40 SELECT table_name.B2. constraint_type.NULL.'MANAGER'.---------------. Feladat Egy szkript programban végezzen megszorítás hozzáadást. ellenőrzést és visszaállítást (ROLLBACK) az alábbi módon: Egy MANAGER munkakörű dolgozó csak 2000 és 3000 USD tartománybeli fizetést kaphat. Kiséreljen meg egy megfelelő és egy nem megfelelő rekordot felvinni. majd visszavonás után annak hatását.7788.'MANAGER'.3400.'2005-11-01'. INSERT INTO dolgozó VALUES(7876.2500.'STUDENT'.'részleg'). constraint_name.1200.---------------------------------------DOLGOZÓ SYS_C005539 C "DEPTNO" IS NOT NULL DOLGOZÓ SYS_C005538 C "EMPNO" IS NOT NULL DOLGOZÓ KULCSFIZ C (sal BETWEEN 2000 AND 3000 AND UPPER( job) = ' columns törölve Ellenőrzés: INSERT INTO dolgozó VALUES(6666. Megoldás COLUMN table_name FORMAT A11 COLUMN constraint_name FORMAT A15 COLUMN constraint_type FORMAT A16 COLUMN search_condition FORMAT A21 SELECT table_name.'JANCSI'.7788.20). constraint_name. Listázással ellenőrizze e műveletek végrehajtását. -.'2005-10-30'.87 - . constraint_type. A tábla módosítva. #01_SQL Bevezető Feladatgyűjtemény [26] .--------------------RÉSZLEG SYS_C005540 C "DEPTNO" IS NOT NULL DOLGOZÓ SYS_C005538 C "EMPNO" IS NOT NULL DOLGOZÓ SYS_C005539 C "DEPTNO" IS NOT NULL columns törölve -. INSERT INTO dolgozó VALUES(9999. CLEAR COLUMNS TABLE_NAME CONSTRAINT_NAME CONSTRAINT_TYPE SEARCH_CONDITION ----------.NULL.'BOSZORKA'.'2005-11-01'.--------------.

Visszaállítás: ROLLBACK.KULCSFIZ) megsértése 1 sor létrejött. EMPNO ----7566 7782 7788 7839 7876 9999 ENAME ---------JONES CLARK SCOTT KING JANCSI JULISKA JOB MGR HIREDATE SAL COMM DEPTNO --------. 1 sor létrejött. INSERT INTO dolgozó * Hiba a(z) 1.----.SELECT * FROM dolgozó.-----MANAGER 7839 1981-04-02 2975 20 MANAGER 7839 1981-06-09 2450 10 ANALYST 7566 1987-04-19 3000 20 PRESIDENT 1981-11-17 5000 10 MANAGER 7788 2005-11-01 2500 20 STUDENT 7788 2005-11-01 1200 20 -.----.----.----. sorban: ORA-02290: ellenőrző megszorítás (SCOTT. EMPNO ----7566 7782 7788 7839 ENAME ---------JONES CLARK SCOTT KING JOB MGR HIREDATE SAL COMM DEPTNO --------.88 - .---------.---------.----.----.-----MANAGER 7839 1981-04-02 2975 20 MANAGER 7839 1981-06-09 2450 10 ANALYST 7566 1987-04-19 3000 20 PRESIDENT 1981-11-17 5000 10 #01_SQL Bevezető Feladatgyűjtemény [26] . SELECT * FROM dolgozó. A visszaállítás befejeződött.

----. SELECT * FROM dolgozó.-----. Feladat Bővítse a dolgozó táblát egy jutalom oszloppal.mgr = f. 2 sor módosítva.empno FROM dolgozó d.----. 1. hogy akinek valamelyik közvetlen beosztottja az ő jövedelmének felénél többet keres. Módosítás: UPDATE dolgozó SET jutalom = 600 WHERE jutalom IS NULL.sal+NVL(d. az 1000 USD jutalmat kapjon.0))/2 d.---------. AND 2. EMPNO ----7566 7782 7788 7839 ENAME ---------JONES CLARK SCOTT KING JOB MGR HIREDATE SAL COMM DEPTNO JUTALOM --------.comm.empno). a többiek pedig 600 USD-t.89 - . és töltse fel ezt olymódon.comm. Módosítás: UPDATE dolgozó SET jutalom = 1000 WHERE empno IN (SELECT f.B3. Megoldás -.------MANAGER 7839 1981-04-02 2975 20 1000 MANAGER 7839 1981-06-09 2450 10 600 ANALYST 7566 1987-04-19 3000 20 600 PRESIDENT 1981-11-17 5000 10 1000 #01_SQL Bevezető Feladatgyűjtemény [26] .sal+NVL(f. dolgozó f WHERE d.----. A tábla módosítva.Tábla bővítése jutalom oszloppal: ALTER TABLE dolgozó ADD jutalom NUMBER(4). 2 sor módosítva.0) > (f.

Ha egy dolgozónak nincs főnöke. Nov.------------.) a dolgozók nevét.deptno = fr.0)+d. részleg fr WHERE d.jutalom AS NVL(f. 06 Dolgozók adatainak nyilvántartása A dolgozó neve --------------SCOTT JONES CLARK KING A dolgozó munkaköre ---------ANALYST MANAGER MANAGER PRESIDENT A dolgozó A dolgozó A főnök A főnök részlege összjövedelme neve telephelye -----------. részleg dr. dolgozó f. SET verify ON SET pagesize 40 SET linesize 400 SET feedback ON TTITLE OFF BTITLE OFF -.sal+NVL(d.CLEAR BREAKS CLEAR COLUMNS FORMAT A15 FORMAT A10 FORMAT A12 JUSTIFY RIGHT FORMAT A15 FORMAT A12 DolgozoNeve.deptno = dr. FonokTelep Eredmény V. a jutalmat is tartalmazó összjövedelmét és a főnökének nevét.loc AS FROM dolgozó d. Megoldás SET SET SET SET verify OFF pagesize 15 linesize 83 feedback OFF -. Munkakor. FonokNeve. OsszJov. Feladat Listázza formázva (fej-. akkor a főnök nevének helyére írja ki: "=nincs főnöke=".dname AS d.B4.ename AS d. a részlegének nevét.deptno(+) ORDER BY FonokNeve ASC. ReszlegNev.BREAK ON FonokNeve ON FonokTelep TTITLE 'Dolgozók adatainak|nyilvántartása' BTITLE 'Budapesti Műszaki Főiskola' COLUMN DolgozoNeve HEADING 'A dolgozó|neve' COLUMN Munkakor HEADING 'A dolgozó|munkaköre' COLUMN ReszlegNev HEADING 'A dolgozó|részlege' COLUMN OsszJov HEADING 'A dolgozó|összjövedelme' COLUMN FonokNeve HEADING 'A főnök|neve' COLUMN FonokTelep HEADING 'A főnök|telephelye' SELECT d.empno(+) AND d. és lábléccel.deptno AND f. stb.ename.job AS dr.mgr = f.comm.-----------RESEARCH 4000 JONES DALLAS RESEARCH 3975 KING NEW YORK ACCOUNTING 3050 KING NEW YORK ACCOUNTING 5600 =nincs főnöke= Budapesti Műszaki Főiskola lap 1 #01_SQL Bevezető Feladatgyűjtemény [26] .'=nincs főnöke=') AS fr. valamint telephelyét elsődlegesen a főnök neve szerint növekvően. OsszJov DESC.--------------.90 - . másodlagosan az összjövedelem szerint csökkenő módon rendezve. munkakörét.

columns törölve #01_SQL Bevezető Feladatgyűjtemény [26] .91 - .

akkor az legfeljebb 4000 USD-t keres.C.------------------.február 1. 0. 1250 1400 30 7499 ALLEN SALESMAN 7698 1981.Az első feltételt kielégítő dolgozók nézettáblája: CREATE OR REPLACE VIEW Dolgozók1 AS SELECT empno. A további feladatok e táblákra vonatkoznak.február 22.----. A nézet létrejött. 1600 300 30 7844 TURNER SALESMAN 7698 1981.@INIT1 -.92 - . sal. akik 1980. TO_CHAR(hiredate.december 17.--------.szeptember 28. mgr.május 1. 3000 20 7934 MILLER CLERK 7782 1982. és ha igen. 3000 20 7369 SMITH CLERK 7902 1980. 1500 0 30 7900 JAMES CLERK 7698 1981. 1300 10 #01_SQL Bevezető Feladatgyűjtemény [26] .február 20. EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----.január 23.szeptember 08. hogy az INIT1. 1250 500 30 7902 FORD ANALYST 7566 1981.-----7839 KING PRESIDENT 1981. 1.május 01. törölje azt.április 19. lépés (Az emp tábla és a megjelenítés inicializálása) -. hogy az adott néven létezik-e már másik objektum (user_catalog).1. és ha van főnökük. job.month DD.december 03. Feladat Konzisztens módon hozzon létre egy dolgozó nevű táblát az emp tábla azon dolgozóiból.Feltételezve. ename. SELECT * FROM Dolgozók1. 800 20 7788 SCOTT ANALYST 7566 1987.június 09.december 03.november 17. továbbá egy részleg nevű táblát a dept táblából. között léptek be.----. 2450 10 7566 JONES MANAGER 7839 1981. comm. és 1987. deptno FROM emp WHERE hiredate BETWEEN '1980-02-01' AND '1987-05-01'. sem nézetként). Feladatsor C1. TABLE_NAME -----------------------------BONUS DEPT EMP SALGRADE TABLE_TYPE ----------TABLE TABLE TABLE TABLE Nem szerepel a dolgozó és a részleg objektum (sem táblaként.----. tehát nincs további teendő. lépés (A dolgozó tábla létrehozása) -. E táblák létrehozása előtt vizsgálja meg. 950 30 7521 WARD SALESMAN 7698 1981. 2850 30 7782 CLARK MANAGER 7839 1981. lépés (Esetlegesen létező azonos nevű objektumok törlése) SELECT * FROM user_catalog WHERE UPPER(TABLE_NAME) NOT LIKE '%BIN%'. A megoldások során rendszeresen alkalmazzon nézettáblákat! Megoldás 0. SET numwidth 5 A munkamenet módosítva.') AS hiredate. 'YYYY. 5000 10 7698 BLAKE MANAGER 7839 1981.---------.sql a BIN könyvtárban van ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD'.április 02. 2975 20 7654 MARTIN SALESMAN 7698 1981.2.

január 23. SELECT * FROM dolgozó.-----SALESMAN 7698 1981.13 sor kijelölve.0) < 4000 AND d.------------------.A megfelelő főnökök nézettáblája: CREATE OR REPLACE VIEW JóFőnök(főnökazon) AS SELECT f.----. FŐNÖKAZON --------7698 7698 7698 7698 7698 7566 7902 7566 7788 7782 10 sor kijelölve. #01_SQL Bevezető Feladatgyűjtemény [26] . 800 20 ANALYST 7566 1987. 1250 500 30 ANALYST 7566 1981. hiredate.A megfelelelő dolgozók konzisztens adattáblája: DROP TABLE dolgozó.----.93 - . 1500 0 30 CLERK 7698 1981. A tábla eldobva. 1300 10 -. ename. sal.szeptember 08.február 20. A nézet létrejött. SELECT * FROM JóFőnök. -.február 22. deptno FROM DolgozóNézet. 950 30 SALESMAN 7698 1981.szeptember 28.A mindkét feltételt kielégítő dolgozók nézettáblája: CREATE OR REPLACE VIEW DolgozóNézet AS SELECT * FROM Dolgozók1 WHERE mgr IN (SELECT főnökazon FROM JóFőnök). SELECT * FROM DolgozóNézet. job.december 03. 3000 20 CLERK 7782 1982. 1250 1400 30 SALESMAN 7698 1981. 1600 300 30 SALESMAN 7698 1981. CREATE TABLE dolgozó AS SELECT empno. emp f WHERE f.mgr = f. EMPNO ----7654 7499 7844 7900 7521 7902 7369 7788 7934 9 sor ENAME ---------MARTIN ALLEN TURNER JAMES WARD FORD SMITH SCOTT MILLER kijelölve.december 17.----.április 19. CASE WHEN mgr IN (SELECT empno FROM DolgozóNézet) THEN mgr ELSE NULL END AS mgr.empno.comm. comm.empno FROM emp d. JOB MGR HIREDATE SAL COMM DEPTNO --------.sal+NVL(f. 3000 20 CLERK 7902 1980. A tábla létrejött. -.december 03.

szeptember 28.------------------. JOB MGR HIREDATE SAL COMM DEPTNO --------.szeptember 08.február 22.december 03. 1600 300 30 SALESMAN 1981.április 19. 3000 20 ANALYST 1981.A feleslegessé vált nézettáblák törlése: DROP VIEW Dolgozók1. A nézet eldobva. 950 30 SALESMAN 1981. A nézet eldobva. 1250 1400 30 ANALYST 1987. SELECT * FROM részleg. A nézet eldobva. A tábla létrejött.december 17. DROP VIEW DolgozóNézet. DEPTNO -----10 20 30 40 DNAME -------------ACCOUNTING RESEARCH SALES OPERATIONS LOC ------------NEW YORK DALLAS CHICAGO BOSTON #01_SQL Bevezető Feladatgyűjtemény [26] .94 - .február 20.január 23. lépés (A részleg tábla létrehozása) DROP TABLE részleg. 1500 0 30 SALESMAN 1981. 1250 500 30 CLERK 1981.-----SALESMAN 1981. 2. DROP VIEW JóFőnök.----. A tábla eldobva. CREATE TABLE részleg AS SELECT * FROM dept.----. 800 20 CLERK 1982. 3000 20 CLERK 7902 1980.----. 1300 10 -.december 03.EMPNO ----7521 7900 7844 7499 7654 7788 7902 7369 7934 9 sor ENAME ---------WARD JAMES TURNER ALLEN MARTIN SCOTT FORD SMITH MILLER kijelölve.

1250 500 30 7900 JAMES CLERK 1981.7788. 3000 20 7902 FORD ANALYST 1981.MSZ1) megsértése 1 sor létrejött.szeptember 28. 950 30 SALESMAN 1981. INSERT INTO dolgozó VALUES(1010.----. ellenőrzést és visszaállítást (ROLLBACK) az alábbi módon: A 2000 USD-nél nagyobb fizetésű dolgozók nem kaphatnak jutalékot.szeptember 08.december 03. Feladat Egy szkript programban végezzen megszorítás hozzáadást. EMPNO ----7521 7900 7844 7499 7654 7788 7902 7369 7934 9 sor ENAME ---------WARD JAMES TURNER ALLEN MARTIN SCOTT FORD SMITH MILLER kijelölve.'MANAGER'. INSERT INTO dolgozó * Hiba a(z) 1. A tábla módosítva.december 17.----.január 23. 1500 0 30 SALESMAN 1981.december 03.szeptember 28.------------------. 3000 20 ANALYST 1981.április 19. EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----.'2005-10-30'.'POTYKA1'. 1250 1400 30 ANALYST 1987.-----7521 WARD SALESMAN 1981.20). 3000 20 7369 SMITH CLERK 7902 1980. 1600 300 30 SALESMAN 1981.----.'STUDENT'.december 03.február 20.december 03.C2. majd visszaállítás után annak hatását.január 23. 1600 300 30 7654 MARTIN SALESMAN 1981. SELECT * FROM dolgozó.7788. 950 30 7844 TURNER SALESMAN 1981. 1300 10 1010 POTYKA2 STUDENT 7788 2005-10-30 1200 555 20 10 sor kijelölve. 1250 1400 30 7788 SCOTT ANALYST 1987.február 22.'2005-10-30'. 3000 20 CLERK 7902 1980. sorban: ORA-02290: ellenőrző megszorítás (SCOTT. Megoldás ALTER TABLE dolgozó ADD CONSTRAINT msz1 CHECK(comm IS NULL AND sal > 2000 sal <= 2000).95 - . 1250 500 30 CLERK 1981. 1500 0 30 7499 ALLEN SALESMAN 1981. SELECT * FROM dolgozó. ROLLBACK.----. Kiséreljen meg egy megfelelő és egy nem megfelelő rekordot felvinni.---------.----. JOB MGR HIREDATE SAL COMM DEPTNO --------.'POTYKA2'.20).február 20. 800 20 7934 MILLER CLERK 1982.szeptember 08. Listázással ellenőrizze e műveletek végrehajtását.április 19.február 22.1200.555.-----SALESMAN 1981. 1300 10 #01_SQL Bevezető Feladatgyűjtemény [26] . 800 20 CLERK 1982.----.222.december 17.3400.------------------. OR INSERT INTO dolgozó VALUES(2020. A visszaállítás befejeződött.--------.

Ha valamelyik dolgozóra több feltétel is teljesül. EMPNO SORSZÁM FIZETÉS ----.A növekvő fizetés-sorrend nézettáblája (a kis fizetések elöl): CREATE OR REPLACE VIEW SorrendKICSI AS SELECT sal AS fizetés. SELECT * FROM Sorrendazonosító1.------. a három legnagyobb fizetésű a fizetésének 5 %-át.fizetés = dolgozó.A növekvő fizetés-sorrendhez tartozó dolgozók azonosítói (a kis fizetésűek elöl): CREATE OR REPLACE VIEW Sorrendazonosító1 AS SELECT empno. akkor a legkisebbnek megfelelő jutalmat kapja. ROWNUM AS sorszám FROM (SELECT DISTINCT sal FROM dolgozó ORDER BY sal ASC). Feladat Bővítse a dolgozó táblát egy jutalom oszloppal. A nézet létrejött.------800 1 950 2 1250 3 1300 4 1500 5 1600 6 3000 7 7 sor kijelölve. -. SELECT * FROM SorrendKICSI. sorszám.Módosítás-1 (A kisfizetésűek jutalmazása) -.A kisfizetésűek jutalmazása: UPDATE dolgozó #01_SQL Bevezető Feladatgyűjtemény [26] . Megoldás ALTER TABLE dolgozó ADD jutalom NUMBER(4).sal. SorrendKICSI WHERE sal IN (SELECT sal FROM SorrendKICSI) AND SorrendKICSI. A nézet létrejött. a többiek pedig a fizetésük 10 %-át. A tábla módosítva. FIZETÉS SORSZÁM ------.------7369 1 800 7900 2 950 7654 3 1250 7521 3 1250 7934 4 1300 7844 5 1500 7499 6 1600 7902 7 3000 7788 7 3000 9 sor kijelölve.96 - . és töltse fel ezt a következő módon: A három legkisebb fizetésű dolgozó kapja meg egyszeri jutalomként a fizetésének 20 %-át. -. fizetés FROM dolgozó. -.C3.

SELECT * FROM Sorrendazonosító2. 1250 500 30 250 CLERK 1981. SELECT * FROM SorrendNagy. 1250 1400 30 250 ANALYST 1987. 950 30 190 SALESMAN 1981. FIZETÉS SORSZÁM ------. sorszám.sal.fizetés = dolgozó.------SALESMAN 1981.----.------3000 1 1600 2 1500 3 1300 4 1250 5 950 6 800 7 7 sor kijelölve.97 - .------------------. ROWNUM AS sorszám FROM (SELECT DISTINCT sal FROM dolgozó ORDER BY sal DESC). 4 sor módosítva.2 WHERE empno IN (SELECT empno FROM Sorrendazonosító1 WHERE sorszám <= 3).szeptember 28.Módosítás-2 (A nagyfizetésűek jutalmazása) -. JOB MGR HIREDATE SAL COMM DEPTNO JUTALOM --------. SELECT * FROM dolgozó.szeptember 08.december 03. 1500 0 30 SALESMAN 1981.SET jutalom = sal * 0. A nézet létrejött. A nézet létrejött.------7902 1 3000 7788 1 3000 7499 2 1600 7844 3 1500 7934 4 1300 7654 5 1250 7521 5 1250 7900 6 950 7369 7 800 #01_SQL Bevezető Feladatgyűjtemény [26] . SorrendNagy WHERE sal IN (SELECT sal FROM SorrendNagy) AND SorrendNagy.----.A csökkenő fizetés-sorrend nézettáblája (a nagy fizetések elöl): CREATE OR REPLACE VIEW SorrendNagy AS SELECT sal AS fizetés.február 22. fizetés FROM dolgozó.december 17. 1300 10 -. 3000 20 ANALYST 1981. 800 20 160 CLERK 1982. EMPNO SORSZÁM FIZETÉS ----.február 20. -. EMPNO ----7521 7900 7844 7499 7654 7788 7902 7369 7934 9 sor ENAME ---------WARD JAMES TURNER ALLEN MARTIN SCOTT FORD SMITH MILLER kijelölve.-----.december 03.A csökkenő fizetés-sorrendhez tartozó dolgozók azonosítói (a nagy fizetésűek elöl): CREATE OR REPLACE VIEW Sorrendazonosító2 AS SELECT empno.január 23.----.------. 3000 20 CLERK 7902 1980.április 19. 1600 300 30 SALESMAN 1981.

SELECT * FROM dolgozó.------------------.05 WHERE empno IN ((SELECT empno FROM sorrendazonosító2 WHERE sorszám <= 3) MINUS (SELECT empno FROM sorrendazonosító1 WHERE sorszám <= 3)). 1 sor módosítva.szeptember 28.----.Módosítás-3 (A többiek jutalmazása) UPDATE dolgozó SET jutalom = sal * 0.szeptember 08.98 - . JOB MGR HIREDATE SAL COMM DEPTNO JUTALOM --------.április 19. 800 20 160 CLERK 1982. 3000 20 150 ANALYST 1981.december 03.február 20.9 sor kijelölve. 1300 10 -. 1250 500 30 250 CLERK 1981.------------------.december 17. 950 30 190 SALESMAN 1981.----.-----. 1250 1400 30 250 ANALYST 1987. 800 20 160 CLERK 1982. 1600 300 30 80 SALESMAN 1981.szeptember 28. 1500 0 30 75 SALESMAN 1981. 1600 300 30 80 SALESMAN 1981. 4 sor módosítva.december 03.szeptember 08.------SALESMAN 1981.december 03.----.----.január 23. 1500 0 30 75 SALESMAN 1981. 3000 20 150 ANALYST 1981. EMPNO ----7521 7900 7844 7499 7654 7788 7902 7369 7934 9 sor ENAME ---------WARD JAMES TURNER ALLEN MARTIN SCOTT FORD SMITH MILLER kijelölve.január 23.1 WHERE jutalom IS NULL.-----. SELECT * FROM dolgozó.február 22.december 17. EMPNO ----7521 7900 7844 7499 7654 7788 7902 7369 7934 9 sor ENAME ---------WARD JAMES TURNER ALLEN MARTIN SCOTT FORD SMITH MILLER kijelölve. 1250 1400 30 250 ANALYST 1987.április 19. JOB MGR HIREDATE SAL COMM DEPTNO JUTALOM --------. 1250 500 30 250 CLERK 1981. -.február 20. 3000 20 150 CLERK 7902 1980.----. 950 30 190 SALESMAN 1981.február 22.------SALESMAN 1981.A nagyfizetésűek jutalmazása: UPDATE dolgozó SET jutalom = sal * 0.december 03.----. 1300 10 130 #01_SQL Bevezető Feladatgyűjtemény [26] . 3000 20 150 CLERK 7902 1980.

hogy "nincs főnök". és annak telephelyét elsődlegesen a részleg neve szerint növekvően. d.sal+NVL(d. Ha egy dolgozónak nincs főnöke. OsszJov DESC. NVL(f.------------.deptno = dr.'nincs főnök') AS FonokNeve.dname AS ReszlegNev. részleg7 dr. munkakörét. és lábléccel.--------------. részleg7 fr WHERE d.empno(+) AND d. stb. 20 Dolgozók adatainak nyilvántartása A dolgozó neve --------------SMITH SCOTT FORD MARTIN WARD ALLEN TURNER MILLER JAMES A dolgozó munkaköre ---------CLERK ANALYST ANALYST SALESMAN SALESMAN SALESMAN SALESMAN CLERK CLERK A dolgozó A dolgozó A főnök A főnök részlege összjövedelme neve telephelye -----------. részlegének nevét. d. SET verify ON SET pagesize 40 SET linesize 400 SET feedback ON TTITLE OFF BTITLE OFF CLEAR BREAKS CLEAR COLUMNS V.) a dolgozók nevét. akkor a főnök adatainak helyére írja ki.job AS Munkakor. dr. a főnökének nevét. Feladat Listázza formázva (fej-.99 - .ename AS DolgozoNeve.C4. dolgozó f.loc.deptno AND f.ename.deptno = fr. NVL(fr.-----------RESEARCH 960 FORD DALLAS 3150 nincs főnök nincs főnök 3150 nincs főnök nincs főnök SALES 2900 nincs főnök nincs főnök 2000 nincs főnök nincs főnök 1980 nincs főnök nincs főnök 1575 nincs főnök nincs főnök ACCOUNTING 1430 nincs főnök nincs főnök SALES 1140 nincs főnök nincs főnök Budapesti Műszaki Főiskola lap 1 #01_SQL Bevezető Feladatgyűjtemény [26] .comm.jutalom AS OsszJov.0)+d.deptno(+) ORDER BY FonokNeve ASC. Megoldás SET SET SET SET verify OFF pagesize 19 linesize 82 feedback OFF BREAK ON ReszlegNev TTITLE 'Dolgozók adatainak|nyilvántartása' BTITLE 'Budapesti Műszaki Főiskola' COLUMN DolgozoNeve HEADING 'A dolgozó|neve' COLUMN Munkakor HEADING 'A dolgozó|munkaköre' COLUMN ReszlegNev HEADING 'A dolgozó|részlege' COLUMN OsszJov HEADING 'A dolgozó|összjövedelme' COLUMN FonokNeve HEADING 'A főnök|neve' COLUMN FonokTelep HEADING 'A főnök|telephelye' FORMAT A15 FORMAT A10 FORMAT A12 JUSTIFY RIGHT FORMAT A15 FORMAT A12 SELECT d. a jutalmat is tartalmazó összjövedelmét. másodlagosan a összjövedelem szerint csökkenő módon rendezve. Nov.'nincs főnök') AS FonokTelep FROM dolgozó d.mgr = f.

hogy azok utólagos objektumkezelési jogokkal való kiegészítésére NE legyen szükség. Foglalkozás Adatbázis-adminisztrátori ismeretek.1. Jogosultságkezelés Részletesebben lásd [2]: 11.100 - .8. fejezet FELADATGYŰJTEMÉNY 8. hogy egy "Melós" létrehozhasson adattáblát. Feladat Biztosítsa. Mindezt olymódon valósítsa meg szerepkörök felhasználásával. ám egy "Főnök" csak lekérdezhesse azt. #01_SQL Bevezető Feladatgyűjtemény [26] .

hogy egy "Melós" létrehozhasson adattáblát. és PROMPT a FőnökJog hozzárendelése: CREATE USER FőnökArnold IDENTIFIED BY nagypénz.sql PROMPT Kapcsolódás Rendszergazdaként: CONNECT sys/rendszergazda AS SYSDBA PROMPT Nagytakarítás: DROP USER MelósLajos CASCADE.Adminisztrátor. PROMPT Egy Főnök (FőnökArnold) felhasználó létrehozása. #01_SQL Bevezető Feladatgyűjtemény [26] . PROMPT A MelósJog szerepkör létrehozása: CREATE ROLE MelósJog. Megoldás -. GRANT MelósJog TO MelósLajos. DROP TABLESPACE Raktár.MEGOLDÁSGYŰJTEMÉNY 8. DROP USER FőnökArnold. Mindezt olymódon valósítsa meg szerepkörök felhasználásával. CREATE TABLE TO MelósJog. GRANT CREATE SESSION. hogy azok utólagos objektumkezelési jogokkal való kiegészítésére NE legyen szükség. Feladat Biztosítsa.DROP TABLE leltár. DROP ROLE FőnökJog. PROMPT A FőnökJog szerepkör létrehozása: CREATE ROLE FőnökJog. DROP ROLE MelósJog. ám egy "Főnök" csak lekérdezhesse azt.1.dat' SIZE 10 M REUSE.101 - . PROMPT Táblaterület létrehozása: CREATE TABLESPACE Raktár DATAFILE 'C:\#Raktár. SELECT ANY TABLE TO FőnökJog. PROMPT Egy Melós (MelósLajos) felhasználó létrehozása. GRANT CREATE SESSION. GRANT FőnökJog TO FőnökArnold. -. és PROMPT a MelósJog hozzárendelése: CREATE USER MelósLajos IDENTIFIED BY kispénz DEFAULT TABLESPACE Raktár TEMPORARY TABLESPACE temp QUOTA UNLIMITED ON Raktár.

A szerepkör eldobva.PROMPT Kapcsolódás MelósLajosként: CONNECT MelósLajos/kispénz.GRANT SELECT -ON leltár -TO FőnökJog. A MelósJog szerepkör létrehozása: A szerepkör létrejött. A szerepkör eldobva. feltöltése adattal és lekérdezése: TABLE leltár (név VARCHAR(8).leltár.PROMPT a leltár tábla "LEKÉRDEZÉS" objektumkezelési jogával: -. -. INTO leltár VALUES('spakni'. A felhasználó eldobva. kapcsolódás Melósként PROMPT 2. a leltár tábla lekérdezése PROMPT 3. 87). -. PROMPT CREATE INSERT INSERT INSERT SELECT A leltár tábla létrehozása.GRANT ALL -ON leltár -TO MelósJog. DROP TABLE MelósLajos.102 - . A táblaterület eldobva. és a MelósJog hozzárendelése: A felhasználó létrejött.PROMPT a leltár tábla "MINDEN" objektumkezelési jogával: -. a leltár tábla törlése CONNECT MelósLajos/kispénz. DROP TABLE MelósLajos.120). SELECT * FROM MelósLajos. INTO leltár VALUES('vödör'.PROMPT A FőnökJog szerepkör utólagos kiegészítése -. Az engedélyezés sikeresen befejeződött. SELECT * FROM MelósLajos. #01_SQL Bevezető Feladatgyűjtemény [26] . Az engedélyezés sikeresen befejeződött. kapcsolódás Főnökként PROMPT 2. Táblaterület létrehozása: A táblaterület létrejött. A FőnökJog szerepkör létrehozása: A szerepkör létrejött.15). a leltár tábla lekérdezése PROMPT 3. PROMPT A Főnök jogainak ellenőrzése: PROMPT 1. * FROM leltár.PROMPT A MelósJog szerepkör utólagos kiegészítése -.leltár. PROMPT A Melós jogainak ellenőrzése: PROMPT 1. a leltár tábla törlésének kisérlete CONNECT FőnökArnold/nagypénz. INTO leltár VALUES('pajszer'. Nagytakarítás: A felhasználó eldobva. Eredmény SQL> @Adminisztrátor.leltár.leltár. Egy Melós (MelósLajos) felhasználó létrehozása.sql Kapcsolódás Rendszergazdaként: Kapcsolódva. költség NUMBER).

Az engedélyezés sikeresen befejeződött. Egy Főnök (FőnökArnold) felhasználó létrehozása, és a FőnökJog hozzárendelése: A felhasználó létrejött. Az engedélyezés sikeresen befejeződött. Kapcsolódás MelósLajosként: Kapcsolódva. A leltár tábla létrehozása, feltöltése adattal és lekérdezése: A tábla létrejött. 1 sor létrejött. 1 sor létrejött. 1 sor létrejött. NÉV KÖLTSÉG -------- ---------spakni 15 pajszer 120 vödör 87 3 sor kijelölve. A Főnök jogainak ellenőrzése: 1. kapcsolódás Főnökként 2. a leltár tábla lekérdezése 3. a leltár tábla törlésének kisérlete Kapcsolódva. NÉV KÖLTSÉG -------- ---------spakni 15 pajszer 120 vödör 87 3 sor kijelölve. DROP TABLE MelósLajos.leltár * Hiba a(z) 1. sorban: ORA-01031: nincs megfelelő jogosultsága A Melós jogainak ellenőrzése: 1. kapcsolódás Melósként 2. a leltár tábla lekérdezése 3. a leltár tábla törlése Kapcsolódva. NÉV KÖLTSÉG -------- ---------spakni 15 pajszer 120 vödör 87 3 sor kijelölve. A tábla eldobva.

#01_SQL Bevezető Feladatgyűjtemény [26]

- 103 -

1. Melléklet

Árnyék-objektumok

M1. Példa Az alábbiakban az azonos nevű nézettáblák és adattáblák használatának konfliktusát mutatjuk be. Megoldás 1. lépés (Egy egyszerű nézettábla létrehozása)
CREATE OR REPLACE VIEW dolgozó AS SELECT * FROM emp;
A nézet létrejött.

2. lépés (Egy adattábla törlésének kisérlete)
DROP TABLE dolgozó;
DROP TABLE dolgozó * Hiba a(z) 1. sorban: ORA-00942: a tábla vagy a nézet nem létezik

3. lépés (Egy egyszerű adattábla létrehozásának kisérlete)
CREATE TABLE dolgozó AS SELECT * FROM emp;
CREATE TABLE dolgozó * Hiba a(z) 1. sorban: ORA-00955: ez a név egy létező objektum neve

Megjegyzés Ha az 1. lépésről nem tudunk, akkor a 2. lépésbeli tábla-törlési kisérlet hibaüzenetéből úgy gondolhatjuk, hogy a dolgozó adattáblát nyugodtan létrehozhatjuk, hiszen ilyen néven "tábla vagy a nézet nem létezik". Ám a 3. lépés adattábla-létrehozási kisérletének kudarca jelzi, hogy valami baj van. Mi a megoldás? Le kell kérdeznünk a felhasználó objektumait! 4. lépés (Az Objektum katalógus lekérdezése)
SELECT * FROM user_catalog;
TABLE_NAME TABLE_TYPE ------------------------------ ----------BONUS TABLE SALGRADE TABLE BIN$qsoIO/yYT+qL9ocOnn94Rg==$0 TABLE DOLGOZÓ VIEW BIN$HRjtpgeGS7+61D7GZeNSSQ==$0 TABLE BIN$0ySrJpEOQHSFkvoBFw6ReQ==$0 TABLE BIN$QUd8b6c8T7SJiG7sviD5MA==$0 TABLE BIN$wZ9aIlWzRSC4P2K5pQ3eKg==$0 TABLE BIN$HHROi1ZzTAiUFU2gOs6BLw==$0 TABLE BIN$rrM8+xqJRoaXI1dcG8hqWA==$0 TABLE BIN$dtyJYaRQQ4OXGTMY44AILQ==$0 TABLE BIN$Hl6MRiGSRA6TUyMVFn5z9g==$0 TABLE EMP TABLE BIN$HLIO/j11SWqL0BHKSp4V+w==$0 TABLE

#01_SQL Bevezető Feladatgyűjtemény [26]

- 104 -

DEPT TABLE BIN$KWlSQ3NGQaiZkLDahyGHwQ==$0 TABLE BIN$7cWjDm8CRnugRC8rQ77uUw==$0 TABLE BIN$pXLoaD9sSe+Fx6GcQsyHPQ==$0 TABLE BIN$5dNOHAlIQmuYbN3jR8dccw==$0 TABLE BIN$hgQH12k6RuCb2pwVQ+9Ltg==$0 TABLE BIN$II2W0au8QOOSymSJ0muaPA==$0 TABLE BIN$XbtNKE6HTFukOnNFtLFTdA==$0 TABLE BIN$TtGlSmVqRkWZCb6p1pP+uQ==$0 TABLE BIN$XVGyLrBDRHuKt308WBtVLQ==$0 TABLE BIN$VbjAbu/9Sr2c7nMFAzvJrg==$0 TABLE BIN$73zYMWXFRha13wlB6hImrg==$0 TABLE BIN$mO044dDIRsamltwvO/nZdw==$0 TABLE BIN$uqFCSi9FRaiJwBpKdjbVlg==$0 TABLE BIN$gSUkFqw0RVuWopgEWWrQZw==$0 TABLE BIN$ZUHVJm4xQnKApRdcO728fg==$0 TABLE BIN$COV8HJ2xR7q1aydEwgg2pQ==$0 TABLE BIN$l6w9tXgIQ/Cr8Ru/yANcsA==$0 TABLE BIN$DaWFiVKyT5COozYE8aGUYg==$0 TABLE BIN$je3xJCYDRRaJJ1g21MRTnQ==$0 TABLE RÉSZLEG TABLE 35 sor kijelölve.

Megjegyzés Ha szeretnénk a számunkra érdektelen rendszer-objektumokat kihagyni a listából, akkor az Objektum katalógust az alábbi módon kérdezzük le:
SELECT * FROM user_catalog WHERE UPPER(TABLE_NAME) NOT LIKE '%BIN%';
TABLE_NAME TABLE_TYPE ------------------------------ ----------BONUS TABLE DEPT TABLE DOLGOZÓ VIEW EMP TABLE FONOKOK VIEW RÉSZLEG TABLE SALGRADE TABLE 7 sor kijelölve.

5. lépés (Az alkalmatlan nézettábla törlése)
DROP VIEW dolgozó;
A nézet eldobva.

6. lépés (Az adattábla létrehozásának kisérlete)
CREATE TABLE dolgozó AS SELECT * FROM emp;
A tábla létrejött.

Megjegyzés Sikerült...!

#01_SQL Bevezető Feladatgyűjtemény [26]

- 105 -

B2.---------1 7839 KING 2 7566 JONES 3 7788 SCOTT 4 7876 ADAMS 3 7902 FORD 4 7369 SMITH 2 7698 BLAKE 3 7499 ALLEN 3 7521 WARD 3 7654 MARTIN 3 7844 TURNER 3 7900 JAMES 2 7782 CLARK 3 7934 MILLER 14 sor kijelölve. empno AS "FőnökAzon". SELECT * FROM Beo. EMPNO1 EMPNO2 EMPNO3 EMPNO4 -----.2. Példa Listázza az emp táblabeli főnököket és a beosztottjaikat.Négyszintű beosztási hierarchia -.106 - .empno AS empno4 FROM emp B1.mgr. ename AS "FőnökNév" FROM emp CONNECT BY mgr = PRIOR empno START WITH UPPER(job) = 'PRESIDENT'. emp B2. B4. emp B4 WHERE B1.--------.mgr AND B2.2.empno (+) = B2. Megoldás SET numwidth 5 -.-----.empno (+) = B4.empno AS empno2. Melléklet Hierarchikus szerkezetű adattáblák feldolgozása M2.empno AS empno3. M2. Megoldás SET numwidth 5 SELECT LEVEL AS "HierarchiaSzint". HierarchiaSzint FőnökAzon FőnökNév --------------.empno AS empno1. B3.empno (+) = B3.-----7839 7566 7902 7369 7839 7566 7788 7876 7839 7782 7934 7839 7698 7499 7839 7698 7521 #01_SQL Bevezető Feladatgyűjtemény [26] .-----. emp B3. Példa Határozza meg az emp tábla hierarchia szintjeinek számát.(Külső öszekapcsolás alkalmazása esetén) CREATE OR REPLACE VIEW Beo AS SELECT B1.mgr AND B3.1.

emp B2.Főnök. B.Beosztott FROM ((SELECT * FROM Beo1) UNION (SELECT * FROM Beo2) UNION (SELECT * FROM Beo3)) B. emp B3 WHERE B1. UPPER(B3. SELECT * FROM Beo1.Négyszintű beosztási hierarchia elemi nézetei (Beo1.107 - .mgr.mgr.empno = B4.(A beosztottaknál nem kell külső öszekapcsolás) CREATE OR REPLACE VIEW Beo1 AS SELECT UPPER(B1. emp B2. Beo2.ename) AS Főnök.mgr AND B2.ename) AS Főnök.empno = B2. emp B2 WHERE B1. SELECT * FROM Beo3. CREATE OR REPLACE VIEW Beo2 AS SELECT UPPER(B1. FŐNÖK ---------BLAKE BLAKE BLAKE BLAKE BLAKE CLARK FORD JONES JONES JONES JONES KING KING KING BEOSZTOTT ---------ALLEN JAMES MARTIN TURNER WARD MILLER SMITH ADAMS FORD SCOTT SMITH ADAMS ALLEN BLAKE #01_SQL Bevezető Feladatgyűjtemény [26] . emp B3.ename) AS Beosztott FROM emp B1. Beo3) -. SELECT * FROM Beo2. CREATE OR REPLACE VIEW Beo3 AS SELECT UPPER(B1.mgr.empno = B3. UPPER(B2.mgr AND B3.ename) AS Beosztott FROM emp B1.empno = B3.ename) AS Főnök.ename) AS Beosztott FROM emp B1.empno = B2. UPPER(B4. -.Négyszintű beosztási hierarchia az elemi nézetek alapján CREATE OR REPLACE VIEW Beo AS SELECT B. emp B4 WHERE B1.mgr AND B2.empno = B2. SELECT * FROM Beo.7839 7839 7839 7839 7839 7698 7698 7698 7566 7566 7839 7839 7839 7654 7844 7900 7788 7902 7839 7566 7698 7782 -.

Beo WHERE UPPER(emp.Főnök) = UPPER('King'). lépés (A King beosztottjainak összfizetése) COLUMN Fonok FORMAT A8 HEADING 'Főnök' JUSTIFY LEFT COLUMN BeoOsszFiz FORMAT 99999 HEADING 'BeoÖsszFiz' SELECT UPPER('King') AS Fonok.ename) = UPPER(Beo. ROUND(AVG(sal)) AS BeoÁtlFiz FROM emp.3. Megoldás 1. lépés (A King beosztottjainak átlagfizetése) COLUMN Fonok FORMAT A8 HEADING 'Főnök' JUSTIFY LEFT SELECT UPPER('King') AS Fonok.KING KING KING KING KING KING KING KING KING KING SCOTT CLARK FORD JAMES JONES MARTIN MILLER SCOTT SMITH TURNER WARD ADAMS -.Főnök) = UPPER('King'). Beo WHERE UPPER(emp. CLEAR COLUMNS Főnök BEOÁTLFIZ -------.Például a King beosztottjai: SELECT * FROM Beo WHERE UPPER(Főnök) = UPPER('King').--------KING 1848 2. SUM(sal) AS BeoOsszFiz FROM emp. FŐNÖK ---------KING KING KING KING KING KING KING KING KING KING KING KING KING BEOSZTOTT ---------ADAMS ALLEN BLAKE CLARK FORD JAMES JONES MARTIN MILLER SCOTT SMITH TURNER WARD M2.Beosztott) AND UPPER(Beo.108 - .---------KING 24025 #01_SQL Bevezető Feladatgyűjtemény [26] . CLEAR COLUMNS Főnök BeoÖsszFiz -------.Beosztott) AND UPPER(Beo.ename) = UPPER(Beo. Példa Listázza az emp táblabeli főnököket a beosztottai összfizetése szerint csökkenő sorrendben.

Beo WHERE D.Főnök ORDER BY BeoOsszFiz DESC.3.empno AND D. emp F.mgr = F.Beosztott GROUP BY Beo. SUM(D.ename = Beo.sal) AS BeoOsszFiz FROM emp D.Főnök AS Fonok. lépés (A MEGOLDÁS: A főnökök csoportosítása a beosztottjaik összfizetése szerint) COLUMN Fonok FORMAT A8 HEADING 'Főnök' JUSTIFY LEFT COLUMN BeoOsszFiz FORMAT 99999 HEADING 'BeoÖsszFiz' SELECT Beo.109 - . #01_SQL Bevezető Feladatgyűjtemény [26] .---------KING 24025 JONES 7900 BLAKE 6550 CLARK 1300 SCOTT 1100 FORD 800 6 sor kijelölve. CLEAR COLUMNS Főnök BeoÖsszFiz -------.

110 - . 2002.: Oracle Példatár (SQL.: Adatbázis-kezelés az Oracle-rendszerben. [2] Kende M. 2005. – Kotsis D.IRODALOM [1] Kende M. Panem. PL/SQL). Panem. – Nagy I. #01_SQL Bevezető Feladatgyűjtemény [26] . – Nagy I.

Sign up to vote on this title
UsefulNot useful