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

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

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.

Hasonló előadás


Az előadások a következő témára: "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."— Előadás másolata:

1 2012. tavaszi félév Vitéz Gergely

2 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!

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  3OE-NIK 2012.

4

5

6 SELECT FROM tábla1, tábla2, és így tovább WHERE GROUP BY HAVING ORDER BY ;

7 EMP és DEPT tábla összekapcsolása: Példa: 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.depno;

8  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

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

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

11 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?

12  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(+);

13

14 SELECT LISTA FROM WHERE GROUP BY HAVING ORDER BY ;

15 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?

16 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;

17  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

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

19 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);

20  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)

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

22 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!

23  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 deptno From emp where job = ’CLERK’ group by deptno;

24  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 deptno From emp where job = ’CLERK’ group by deptno) allerkerdezesunk

25 SELECT dept.deptno as ”Részleg”, dept.dname as ”Részlegnév”, dept.loc as ”Telephely” FROM dept, (Select deptno From emp where job = ’CLERK’ group by deptno) allekerdezesunk WHERE allekerdezesunk.deptno = dept.deptno;

26  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);

27 Select dolgozo.ename as "Dolgozó neve", fonok.ename as "Főnök neve" FROM emp dolgozo, emp fonok WHERE dolgozo.mgr = fonok.empno AND dolgozo.deptno IN (Select deptno from dept where loc = 'NEW YORK'); Miért rossz ez a megoldás?

28 Select dolgozo.ename as "Dolgozó neve", fonok.ename as "Főnök neve" FROM emp dolgozo, emp fonok WHERE 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.

29  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!

30  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;

31


Letölteni ppt "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."

Hasonló előadás


Google Hirdetések