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

Többtáblás lekérdezések, allekérdezések 2012.02.28.Rózsa Győző

Hasonló előadás


Az előadások a következő témára: "Többtáblás lekérdezések, allekérdezések 2012.02.28.Rózsa Győző"— Előadás másolata:

1 Többtáblás lekérdezések, allekérdezések 2012.02.28.Rózsa Győző raver@raver.myip.hu

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 Táblák összekapcsolása

4 Táblák összekapcsolása 2

5 Táblák összekapcsolása 3. SELECT FROM tábla1, tábla2, és így tovább WHERE GROUP BY HAVING ORDER BY ;

6 Táblák összekapcsolása WHERE 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;

7 Táblák összekapcsolása JOIN 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

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

9 Táblák összekapcsolása JOIN 3 PÉLDA: SELECT ENAME, LOC FROM EMP INNER JOIN DEPT USING(deptno);

10 Táblák összekapcsolása önmagukkal 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;

11 Allekérdezések

12 SELECT LISTA FROM WHERE GROUP BY HAVING ORDER BY ;

13 Allekérdezések INLINE nézet 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) 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;

14 Allekérdezések WHERE 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

15 Allekérdezések WHERE 2 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 „(” „)” Persze ezeknek összhangban kell lenniük.

16 Mi a különbség? ALL/ANY 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);

17 Allekérdezések SELECT Egyértékű lehet csak Még utasításon belül sem lehet hivatkozni

18 Féléves Feladat Továbbra is normalizálás!

19 Gyakorlás! 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!

20 Több megoldás létezik! 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;

21 1 példa megoldás (folyt) 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

22 1. Példa folytatás 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;

23 1. Példa Allekérdezés WHERE ben. 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);

24 2. példa 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?

25 2. Példa jó megoldás 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.


Letölteni ppt "Többtáblás lekérdezések, allekérdezések 2012.02.28.Rózsa Győző"

Hasonló előadás


Google Hirdetések