adatbázisok használata 1 (3. gyakorlat)

31
Adatbázisok használata 1 (3. gyakorlat) 2012. tavaszi félév Vitéz Gergely

Upload: lazar

Post on 23-Feb-2016

45 views

Category:

Documents


0 download

DESCRIPTION

Adatbázisok használata 1 (3. gyakorlat). 2012. tavaszi félév Vitéz Gergely. A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele a minimum elégséges érdemjegynek!. SQL Plus. Virtuális gép indítása SQL plus indítása - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Adatbázisok használata 1 (3. gyakorlat)

Adatbázisok használata 1(3. gyakorlat)

2012. tavaszi félévVitéz Gergely

Page 2: Adatbázisok használata 1 (3. gyakorlat)

A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele a minimum elégséges érdemjegynek!

Page 3: Adatbázisok használata 1 (3. gyakorlat)

OE-NIK 2012. 3

Virtuális gép indítása SQL plus indítása Felhasználónév: scott Jelszó: tiger Mit tegyünk ha nem sikerül belépni

◦ 1: Várjunk egy picit, amíg a szolgáltatás elindul◦ 2: Szolgáltatás újraindítása

Szerkesztő: ed fajlnev Futtatás: @fajlnev

SQL Plus

Page 4: Adatbázisok használata 1 (3. gyakorlat)

Táblák összekapcsolása

Page 5: Adatbázisok használata 1 (3. gyakorlat)

Táblák összekapcsolása 2

Page 6: Adatbázisok használata 1 (3. gyakorlat)

SELECT FROM tábla1, tábla2, és így továbbWHEREGROUP BYHAVINGORDER BY;

Táblák összekapcsolása 3.

Page 7: Adatbázisok használata 1 (3. gyakorlat)

EMP és DEPT tábla összekapcsolása:Példa:

SELECT a.ename, b.locFROM emp a, dept bWHERE a.deptno = b.deptno;avagy:SELECT ename, locFROM emp, deptWHERE emp.deptno = dept.depno;

Táblák összekapcsolásaWHERE

Page 8: Adatbázisok használata 1 (3. gyakorlat)

INNER◦ Az oszlopérték mindegyik táblában létezik és

megegyezik 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

Táblák összekapcsolásaJOIN

Page 9: Adatbázisok használata 1 (3. gyakorlat)

Használata:SELECT [Szelekciók]FROM tábla1 INNER/LEFT/RIGHT/FULL JOIN tábla2 ON összekötőfeltétel USING(oszlop1,oszlop2,stb)…

Táblák összekapcsolásaJOIN 2

Page 10: Adatbázisok használata 1 (3. gyakorlat)

PÉLDA:SELECT ENAME, LOCFROM EMP INNER JOIN DEPT USING(deptno);

Táblák összekapcsolásaJOIN 3

Page 11: Adatbázisok használata 1 (3. gyakorlat)

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 fonokWHERE dolgozo.mgr = fonok.empno;

Hol van KING a listából?

Táblák összekapcsolása önmagukkal

Page 12: Adatbázisok használata 1 (3. gyakorlat)

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 fonokWHERE dolgozo.mgr = fonok.empno(+);

LEFT JOIN

Page 13: Adatbázisok használata 1 (3. gyakorlat)

Allekérdezések

Page 14: Adatbázisok használata 1 (3. gyakorlat)

SELECT LISTAFROMWHEREGROUP BYHAVINGORDER BY;

Allekérdezések

Page 15: Adatbázisok használata 1 (3. gyakorlat)

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?

AllekérdezésekINLINE nézet

Page 16: Adatbázisok használata 1 (3. gyakorlat)

SELECT AVG(inline.Maxfizu) as "Maximum átlag"FROM (SELECT deptno as Reszlegszam, MAX(sal+nvl(comm,0)) as Maxfizu FROM EMP GROUP BY deptno) inline;

Megoldás

Page 17: Adatbázisok használata 1 (3. gyakorlat)

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

AllekérdezésekWHERE

Page 18: Adatbázisok használata 1 (3. gyakorlat)

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’)

AllekérdezésekWHERE 2

Page 19: Adatbázisok használata 1 (3. gyakorlat)

Select *from empwhere sal > ALL (Select sal from emp where sal between 1200 AND 2900);Select *from empwhere sal > ANY (Select sal from emp where sal between 1200 AND 2900);

Mi a különbség?ALL/ANY

Page 20: Adatbázisok használata 1 (3. gyakorlat)

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)

AllekérdezésekSELECT

Page 21: Adatbázisok használata 1 (3. gyakorlat)

Következő, azaz 4. alkalomra hozni kell az adatmodellt normalizálva!

Féléves Feladat

Page 22: Adatbázisok használata 1 (3. gyakorlat)

Példatár 3.3 feladat (67.oldal)Listázza a ’ Clerk’ munkakörű dolgozókat foglalkoztató részlegek azononosítóját, nevét, és telephelyét!

Ha készen van valaki:Listázza a New York telephely minden dolgozójának nevét, és a főnökük nevét!

Gyakorlás!

Page 23: Adatbázisok használata 1 (3. gyakorlat)

1: Allekérdezés a FROM részben◦ Kell nekünk egy tábla, amiben csak azoknak a

részlegeknek az azonosítója van, ahol ‚CLERK’ dolgozik.

◦ Select deptnoFrom empwhere job = ’CLERK’group by deptno;

Több megoldás létezik!

Page 24: Adatbázisok használata 1 (3. gyakorlat)

Ha ez megvan, nézzük meg, hogy mire van szükségünk: Részleg, Részlegnév és Telephely

SELECT dept.deptno as ”Részleg”, dept.dname as ”Részlegnév”,

dept.loc as ”Telephely”FROM dept, (Select deptnoFrom empwhere job = ’CLERK’group by deptno) allerkerdezesunk

1 példa megoldás (folyt)

Page 25: Adatbázisok használata 1 (3. gyakorlat)

SELECT dept.deptno as ”Részleg”, dept.dname as ”Részlegnév”,

dept.loc as ”Telephely”FROM dept, (Select deptnoFrom empwhere job = ’CLERK’group by deptno) allekerdezesunkWHERE allekerdezesunk.deptno = dept.deptno;

1. Példa folytatás

Page 26: Adatbázisok használata 1 (3. gyakorlat)

Select deptno as "Részleg", dname as "Részlegnév", loc as "Telephely"

from dept WHERE deptno in (Select deptno From emp where job = 'CLERK' group by deptno);

1. PéldaAllekérdezés WHERE ben.

Page 27: Adatbázisok használata 1 (3. gyakorlat)

Select dolgozo.ename as "Dolgozó neve", fonok.ename as "Főnök neve"FROM emp dolgozo, emp fonokWHERE dolgozo.mgr = fonok.empno AND dolgozo.deptno IN (Select deptno from dept where loc = 'NEW YORK');

Miért rossz ez a megoldás?

2. példa

Page 28: Adatbázisok használata 1 (3. gyakorlat)

Select dolgozo.ename as "Dolgozó neve", fonok.ename as "Főnök neve"FROM emp dolgozo, emp fonokWHERE dolgozo.mgr = fonok.empno(+) AND dolgozo.deptno IN (Select deptno from dept where loc = 'NEW YORK');

A (+) hatására a rendszer úgy kezeli a főnök táblát, mintha lenne egy sor, ami csupa NULL-ból áll.

2. Példa jó megoldás

Page 29: Adatbázisok használata 1 (3. gyakorlat)

Listázza ki azon dolgozók nevét, jövedelmét részlegük nevét, részlegük átlagjövedelmét, melyek a részlegük átlagjövedelménél kevesebbet keresnek! Rendezze az eredményt a részleg szerint!

Komplex példa

Page 30: Adatbázisok használata 1 (3. gyakorlat)

select ee.ename, ee.sal + nvl(ee.comm, 0) as sajat, dd.dname, round(aa.atlag, 1) as reszlegatlag from emp ee, (select deptno, avg(sal+nvl(comm,0)) as atlag from emp group by deptno) aa, dept dd where ee.deptno = dd.deptno and ee.deptno = aa.deptno and ee.sal + nvl(ee.comm, 0) < aa.atlag order by dname;

Megoldás

Page 31: Adatbázisok használata 1 (3. gyakorlat)

Köszönöm a figyelmet!