2012. tavaszi félév Véső Tamás Véső Tamás OENIK / 29
Normalizálás kis ZH: Féléves feladatkiírások (II.22) Tipikus hibák a kis ZH-n: Rossz függőségek Felírt függőség felüldefiniálása Lépések be nem tartása Rossz vég és részeredmények Tipikus hibák a féléves feladatnál: Formai követelmények nem betartása, Tartalmi problémák: túl/sok kevés szöveg, Nem alaposan végiggondolt feladatkiírás, túl kevés adat Jelenleg (II.28) 16 elfogadott kiírás (‘+’), 2 formai hibás, 2 nem elfogadott (‘J’ v ‘1’) 3 nem leadott kiírás (‘---’ v ‘1’) Véső Tamás OENIK / 29
A jelen bemutatóban található adatok, tudnivalók és információk a számonkérendő anyag vázlatát képezik. Ismeretük szükséges, de nem elégséges feltétele a sikeres zárthelyi(k)nek. Sikeres zárthelyihez, illetve vizsgához a jelen bemutató tartalmán felül a kötelező irodalomként megjelölt anyag, a gyakorlatokon szóban, illetve a táblán átadott tudnivalók ismerete, valamint a gyakorlatokon megoldott példák és az otthoni feldolgozás céljából kiadott feladatok önálló megoldásának képessége is szükséges. Véső Tamás OENIK / 29
Például: ◦ EMP ◦ DEPT Használjuk a ‘DEPTNO’ Mezőt! Véső Tamás OENIK / 29
Az Az eredmény. Véső Tamás OENIK / 29
SELECT FROM tábla1, tábla2, és így tovább WHERE GROUP BY HAVING ORDER BY; Mit fog ez produkálni és miért? SELECT * FROM emp, dept; Véső Tamás OENIK / 29
EMP és DEPT tábla összekapcsolása: Mindenképp kell valamilyen feltétel: SELECT a.ename, b.loc FROM emp a, dept b WHERE a.deptno = b.deptno; avagy: SELECT ename, loc FROM emp, dept WHERE emp.deptno=dept.deptno; Véső Tamás OENIK / 29
Inner ◦ Az oszlopérték mindegyik táblában létezik Left ◦ A kulcsszótól balra álló tábla sorai mindenképpen szerepelnek a listában Right ◦ A kulcsszótól jobbra álló tábla sorai mindenképpen látszanak a listában FULL ◦ Mindkettő oszlop sorai látszanak, még ha hiányosak is Véső Tamás OENIK / 29
Használata: SELECT [Szelekciók] FROM tábla1 INNER/LEFT/RIGHT/FULL JOIN tábla2 ON összekötőfeltétel USING(oszlop1,oszlop2,stb) … Véső Tamás OENIK / 29
SELECT ENAME, LOC FROM EMP INNER JOIN DEPT USING(deptno); SELECT ENAME, LOC FROM EMP LEFT JOIN DEPT USING(deptno); SELECT ENAME, LOC FROM EMP RIGHT JOIN DEPT USING(deptno); SELECT ENAME, LOC FROM EMP FULL JOIN DEPT USING(deptno); Van különbség? Véső Tamás OENIK / 29
Példa: Listázzuk az alkalmazottakat, és a főnökeik nevét! SELECT dolgozo.ename as ”Dolgozó neve”, fonok.ename as ” Főnök neve” FROM emp dolgozo, emp fonok WHERE dolgozo.mgr = fonok.empno; Hol van KING a listából? Véső Tamás OENIK / 29
KING nincs a listában, mert nincs főnöke (nincs hozzá tartozó sor a főnök táblából) Hogy előkerüljön az eredményben a főnököket LEFT JOIN segítségével kell kapcsolnunk: SELECT dolgozo.ename as ”Dolgozó neve”, fonok.ename as ” Főnök neve” FROM emp dolgozo, emp fonok WHERE dolgozo.mgr = fonok.empno(+);
Véső Tamás OENIK / 29
SELECT LISTA FROM WHERE GROUP BY HAVING ORDER BY ; Véső Tamás OENIK / 29
Ha a FROM részben szerepel az allekérdezés, akkor azt INLINE nézetnek is nevezzük (Ezt mindig másodlagos táblanévvel kell ellátni, kivéve ha csak 1 van) Mennyi a részlegenkénti maximumfizetések átlaga? Véső Tamás OENIK / 29
Mennyi a részlegenkénti maximumfizetések átlaga? Select AVG(inlinepelda.Maxfizu) as "Maximum átlag" from (SELECT deptno as Reszlegszam, MAX(sal+nvl(comm,0)) as Maxfizu from emp group by deptno) inlinepelda; Véső Tamás OENIK / 29
IN/NOT IN ◦ IGAZ, ha szerepel az adott halmazban/ha nem ANY ◦ Ha a halmaz legalább egy eleme megfelel ALL ◦ Ha a halmaz összes eleme megfelel EXISTS / NOT EXISTS ◦ Ha a halmaz legalább egy elemet tartalmaz/Egyet sem Véső Tamás OENIK / 29
A WHERE-ben szereplő allekérdezéseknél, összehasonlító reláció esetén a bal oldalon mindig csak oszlopkifejezés állhat, jobb oldalon szerepelhet allekérdezés is zárójelek között „(” „)” Példa: SELECT * FROM emp WHERE deptno IN ( SELECT deptno FROM dept WHERE UPPER(dname) = ‘DALLAS’) Véső Tamás OENIK / 29
Select * from emp where sal > ALL (Select sal from emp where sal between 1200 AND 2900); Select * from emp where sal > ANY (Select sal from emp where sal between 1200 AND 2900); Véső Tamás OENIK / 29
Egyértékű lehet csak Még utasításon belül sem lehet hivatkozni Példa: SELECT * FROM emp WHERE sal < (SELECT AVG(sal) FROM emp) Véső Tamás OENIK / 29
INSTR pl: INSTR(ename,’SM’) Meg lehet vizsgálni, hogy egy adott karaktert, avagy karakterláncot tartalmaz e az adott kifejezés. Ha igen, akkor visszaadja, hogy hol fordul elő, ha nem, akkor 0-át ad vissza Pl.: select instr(ename,'SM') from emp; SUBSTR SUBSTR(kifejezés, hányadiktól, hányat) Karakterláncot darabolhatunk Pl.: select substr(ename,0,3) from emp; LENGTH Karakterlánc hosszát adja vissza Pl.: select * from emp where length('ename') > 4; Véső Tamás OENIK / 29
Az R és az L közt a különbség, hogy az egyik jobbra, a másik pedig balra igazítja a karakterláncot, és a másik oldalról kitölti a helyettesítő karakterrel. Nézzük meg egy példán keresztül: SELECT RPAD(ename,6) || RPAD(’:’, ROUND((sal/1000),0)+1, ’#’) AS „Alkalmazottak és fizetésük” FROM emp ORDER BY sal DESC; Véső Tamás OENIK / 29
Jövő héten gépes ZH: Allekérdezések, Táblák összekapcsolása. MINDEN AMI KORÁBBAN IS VOLT! JÖVŐ HÉTEN FÉLÉVES NORMALIZÁLÁSÁT KELL LEADNI. KONZULTÁCIÓK normalizálás témakörben, részletes infó hamarosan. (NIK levlisták!) Véső Tamás OENIK / 29