Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaLajos Fülöp Megváltozta több, mint 10 éve
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.
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.