130 likes | 225 Views
Adatbázisok használata 1 (3. gyakorlat-kiegészítés). 2012. tavaszi félév Véső Tamás. Mintafeladat.
E N D
Adatbázisok használata 1(3. gyakorlat-kiegészítés) 2012. tavaszi félévVéső Tamás
Mintafeladat Kérdezze le minden dolgozó nevét, jövedelmét, részlegének nevétés a részlegében dolgozók legkisebb és legnagyobb jövedelmét, végül pedig a dolgozó jövedelembeállási értékét (vagyis a jövedelmének és az iménti legkisebb értéknek különbségét). A lista legyen a jövedelembeállás alapján rendezve, és használjon másodlagos oszlopneveket.
Mintafeladat1. lépés feladat értelmezése Keressük meg a lekérdezéseket (általában valamilyen kötőszóval vannak összekapcsolva a feladatban is) Kérdezze le minden dolgozó nevét, jövedelmét, részlegének nevét (dept táblában a dname)és arészlegében dolgozók legkisebb jövedelmét, végül pedig a dolgozó jövedelembeállási értékét (jövedelmének és a legkisebb jövedelem különbségét). A lista legyen a név alapján rendezve, és használjon másodlagos oszlopneveket.
Mintafeladat2. lépés allekérdezés • A kidolgozás során mindig az allekérdezésselkezdjünk. • Arészlegében dolgozók legkisebb és legnagyobb jövedelmét SELECT MIN(sal+NVL(comm,0)) AS minimumfizetés,deptno AS részleg FROM empGROUP BY deptno;
Mintafeladat3. lépés a külső lekérdezés • Kérdezze le minden dolgozó nevét, jövedelmét, részlegének nevét és arészlegében dolgozók legkisebb jövedelmét végül pedig a dolgozó jövedelembeállási értékét. • Vegyük észre, hogy bele kell vennünk az allekérdezést a külső lekérdezésbe.
Mintafeladat3. lépés a külső lekérdezés • Mi kell a külső lekérdezésünkbe • Dolgozó neve • Jövedelme • Részlegének neve • A vele egy csoportban dolgozók legkisebb jövedelme • A jövedelembeállás
Mintafeladat3. lépés a külső lekérdezés SELECT dolgozó.ename, dolgozó.sal + NVL(dolgozó.comm,0) as fizu, telephely.dname, allek.minimumfizetés,/* elhagyható az allek, ha egyedi */ /*az allekérdezésben a másodlagos oszlpnév*/ dolgozó.sal+ NVL(dolgozó.comm,0) - minimumfizetésas beáll FROM emp dolgozó, dept telephely, (SELECT MIN(sal+NVL(comm,0)) AS minimumfizetés, deptno AS részleg FROM empGROUP BY deptno)allek/* itt nem hagyjuk el sose a másodlagos */ WHERE telephely.deptno = allek.részleg AND /*táblanevet*/ telephely.deptno = dolgozó.deptno ORDER BY dolgozó.ename;
Amire figyeljünk • Az allekérdezést mindig zárójelbe kell, hogy tegyük a másodlagos táblanév adása miatt. • PL.: (SELECT MIN(sal+NVL(comm,0)) AS minimumfizetés,deptno AS részleg FROM emp GROUP BY deptno)allek • Megjegyzés: Másodlagos táblanévadáskor NEM használunk AS kulcsszót!!!
Amire figyeljünk • Az allekérdezésben használt másodlagos oszlopneveket használjuk a külső SELECT-ben, mintha csak az emp táblából kérdeznénk oszlopokat. • Ha nem egyedi az oszlopnevünk akkor a táblanév.oszlop hivatkozással pontosan meg kell adjuk melyik tábláról van szó. Pl.: telephely.deptno = dolgozó.deptno
Amire figyeljünk • A táblák felsorolásánál is ,-t használunk kivéve az utolsó táblát (allekérdezést). Pl.: … emp dolgozó,dept telephely, (SELECT MIN(sal+NVL(comm,0)) AS minimumfizetés, deptno AS részleg FROM emp GROUP BY deptno) allek … Itt már nincs vessző
Amire figyeljünk • A WHERE-ben ne felejtsük összekapcsolni a táblákat. • Ki lehet próbálni mi történik, ha elhagyjuk a WHERE részt. • A WHERE-ben az a fontos, hogy minden tábla össze legyen kapcsolva a megfelelő oszlop(okk)al. • WHERE telephely.deptno = allek.részleg AND telephely.deptno= dolgozó.deptno • WHERE dolgozó.deptno= allek.részleg AND telephely.deptno = dolgozó.deptno • Ugyanazt az eredményt adja
Mintafeladat (2) Írja ki minden dolgozó nevét, jövedelmét, munkakörének nevét, továbbá a munkakörében dolgozók összjövedelmét, végül pedig a dolgozó jövedelembeállási értékét(mekkora az összjövedelem és a dolgozó jövedelmének különbsége), úgy hogy a jövedelem szerint rendezzünk növekvően.
Mintafeladat (2) SELECT enameAS "Dolgozó neve", sal+NVL(comm,0) AS jövedelem, dolgozó.job AS munkakör, összjövedelem, összjövedelem - sal+NVL(comm,0)AS jövbeáll FROM empdolgozó, (SELECT SUM(sal+NVL(comm,0)) AS összjövedelem, job FROM emp GROUP BY job) allek WHERE dolgozó.job= allek.job ORDER BY jövedelem;