35
ADATBÁZIS HASZNÁLAT I. 3. gyakorlat

Adatbázis használat I

  • Upload
    kayo

  • View
    42

  • Download
    0

Embed Size (px)

DESCRIPTION

Adatbázis használat I. 3 . gyakorlat. Figyelem!!!. 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!. Weboldalak. www.orakulum.com www.jerry.gorextar.hu /ab1 www.gorex.gorextar.hu /ab1 - PowerPoint PPT Presentation

Citation preview

Page 1: Adatbázis használat I

ADATBÁZIS HASZNÁLAT I.

3. gyakorlat

Page 2: Adatbázis használat I

Figyelem!!!

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 4: Adatbázis használat I

Tábla létrehozása

Táblát a CREATE TABLE táblanév utasítással hozhatunk létre Létező táblát pedig CREATE TABLE táblanév AS SELECT * FROM létezőtáblanév-el tudunk klónozni.

Törölni pedig a DROP TABLE táblanévvel tudunk

Page 5: Adatbázis használat I

Mezők frissítése

A rekordokban az egyes adatokat a következő utasítással frissíthetjük:

UPDATE táblanévSET oszlopnév = újértékWHERE oszlopnév =

aktuálisérték;

Page 6: Adatbázis használat I

Többtáblás lekérdezések

Page 7: Adatbázis használat I

Többtáblás lekérdezések

Táblákat összekapcsolhatunk FROM és WHERE utasításrészben vagy

FROM utasításrészben a JOIN segítségével

Page 8: Adatbázis használat I

JOIN

Fajtái Inner

Azokat a sorokat (rekordokat) listázza ki, ahol az összekapcsoló oszlopnak mindkét táblában van értéke.

Left Minden sort felsorol a bal oldali táblából, annak

ellenére, hogy a jobb oldali táblában nincsen minden esetben megfelelő érték.

Page 9: Adatbázis használat I

JOIN

Fajtái Right

A jobboldali rekordok közül mindet kilistázza még akkor is, ha a baloldalon nincs megfelelő elem.

Full Mindent kilistázz a bal és a jobb oldalról is

Page 10: Adatbázis használat I

JOIN

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

Page 11: Adatbázis használat I

Táblák összekapcsolása WHERE-el

A tábláknak is adhatunk másodlagos neveket …FROM emp dolgozó …;

Gyakran szükség van rá, ha össze akarunk kapcsolni táblákat a WHERE-ben

Például: kérdezzük le a főnökökhöz tartozó beosztottak nevét

Page 12: Adatbázis használat I

Táblák összekapcsolása WHERE-el

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

Page 13: Adatbázis használat I

Táblák összekapcsolása WHERE-el

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;

Page 14: Adatbázis használat I

Hierarchialekérdezés (CONNET BY)

Segítségével olyan oszlopot hozhatunk létre, amelyből látszik a rekordok egymás alá való rendeltsége.

Általános alakja:SELECT … FROM tábla[WHERE …]CONNECT BY { PRIOR kifejezés = kifejezés

vagy kifejezés = PRIOR kifejezés }[START WITH kifejezés = kifejezés][OREDER BY];

Page 15: Adatbázis használat I

Hierarchialekérdezés (CONNET BY)

Kulcsszavak jelentése: LEVEL megadja, hogy az aktuálisan kilistázott

elem a hierarchia mely szintjén található. START WITH megadhatjuk hol honnét kezdjük a

hierarchikus szerkezet feldolgozása WHERE utasításnál nem tudunk szűrni elődöt és

utódot csak konkrét sorokat CONNECT BY utasításrészben megadott feltételt

használjuk a sorok és leszármazottaik szűrésére PIOR a bejárás szerinti szülőcsúcsot határozza

meg

Page 16: Adatbázis használat I

Hierarchialekérdezés (CONNET BY) Példák

Az előző feladatot egészítsük ki, hogy lássuk ki milyen szinten van a cégnél.

Nézzük meg SMITH, hogy neki mennyit kell még előre lépni a létrán, hogy elnök legyen.

Page 17: Adatbázis használat I

Allekérdezés

Azokat a lekérdezéseket nevezzük allekérdezésnek, amelyeket nem jelenítünk meg, de valamilyen eredmény(eket) ad át egy külső utasítás számára.

A feldolgozás ilyenkor mindig belülről kifelé halad, azaz a legbelső SELECT értékelődik ki először.

Használható a FROM, WHERE, HAVING utasításrészekben.

Page 18: Adatbázis használat I

Allekérdezés (FROM-ban)

A FROM-on belüli allekérdezést inline nézetnek szokás nevezni.

Ilyenkor a FROM-ban lévő SELECT-et másodlagos táblanévvel kell ellátni (lásd 9. dia)

Page 19: Adatbázis használat I

Allekérdezés (FROM-ban)

Példa: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 Maxfizufrom empgroup by deptno) inlinepelda;

Page 20: Adatbázis használat I

Allekérdezés (WHERBEN)

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

Page 21: Adatbázis használat I

Allekérdezés (WHERBEN)

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

Page 22: Adatbázis használat I

Allekérdezés (WHERBEN)

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.

Page 23: Adatbázis használat I

ALL / ANY

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

Page 24: Adatbázis használat I

Házi feladat

Kérdezze le minden dolgozó nevét, jövedelmét, részlegének nevét és a részlegében dolgozók legkisebb és legnagyobb jövedelmét, végül pedig a dolgozó jövedelembeállási értékét (vagyis a jövedelmének és az iménti legkisebb értéknek különbségét). A lista legyen a jövedelembeállás alapján rendezve, és használjon másodlagos oszlopneveket.

Page 25: Adatbázis használat I

Házi feladat1. lépés feladat értelmezése

Keressük meg a lekérdezéseket (általában valamilyen kötőszóval vannak összekapcsolva a feladatban is)Kérdezze le minden dolgozó nevét, jövedelmét, részlegének nevét (dept táblában a dname) és a részlegében dolgozók legkisebb jövedelmét, végül pedig a dolgozó jövedelembeállási értékét (jövedelmének és a legkisebb jövedelem különbségét). A lista legyen a név alapján rendezve, és használjon másodlagos oszlopneveket.

Page 26: Adatbázis használat I

Házi feladat2. lépés allekérdezés

A kidolgozás során mindig az allekérdezéssel kezdjünk. A részlegében dolgozók legkisebb és

legnagyobb jövedelmét SELECT MIN(sal+NVL(comm,0)) AS minimumfizetés, deptno AS részleg FROM emp GROUP BY deptno;

Page 27: Adatbázis használat I

Házi feladat3. lépés a külső lekérdezés

Kérdezze le minden dolgozó nevét, jövedelmét, részlegének nevét és a részlegében dolgozók legkisebb jövedelmét végül pedig a dolgozó jövedelembeállási értékét.

Vegyük észre, hogy bele kell vennünk az allekérdezést a külső lekérdezésbe.

Page 28: Adatbázis használat I

Házi feladat3. lépés a külső lekérdezés

Mi kell a külső lekérdezésünkbe Dolgozó neve Jövedelme Részlegének neve A vele egy csoportban dolgozók legkisebb

jövedelme A jövedelembeállás

Page 29: Adatbázis használat I

Házi feladat3. lépés a külső lekérdezés

SELECT dolgozó.ename, dolgozó.sal + NVL(dolgozó.comm,0) as fizu, telephely.dname, allek.minimumfizetés, /* elhagyható az allek, ha egyedi */

/*az allekérdezésben a másodlagos oszlpnév*/ dolgozó.sal + NVL(dolgozó.comm,0) - minimumfizetés as beállFROM emp dolgozó, dept telephely,

(SELECT MIN(sal+NVL(comm,0)) AS minimumfizetés, deptno AS részleg

FROM emp GROUP BY deptno) allek /* itt nem hagyjuk el sose a másodlagos */

WHERE telephely.deptno = allek.részleg AND /*táblanevet*/ telephely.deptno = dolgozó.deptnoORDER BY dolgozó.ename;

Page 30: Adatbázis használat I

Amire figyeljünk

Az allekérdezést mindig zárójelbe kell, hogy tegyük a másodlagos táblanév adása miatt.

PL.: (SELECT MIN(sal+NVL(comm,0)) AS minimumfizetés,

deptno AS részleg

FROM emp GROUP BY deptno) allek

Megjegyzés: Másodlagos táblanévadáskor NEM használunk AS kulcsszót!!!

Page 31: Adatbázis használat I

Amire figyeljünk

Az allekérdezésben használt másodlagos oszlopneveket használjuk a külső SELECT-ben, mintha csak az emp táblából kérdeznénk oszlopokat.

Ha nem egyedi az oszlopnevünk akkor a táblanév.oszlop hivatkozással pontosan meg kell adjuk melyik tábláról van szó. Pl.: telephely.deptno = dolgozó.deptno

Page 32: Adatbázis használat I

Amire figyeljünk

A táblák felsorolásánál is ,-t használunk kivéve az utolsó táblát (allekérdezést).

Pl.: … emp dolgozó, dept telephely, (SELECT MIN(sal+NVL(comm,0)) AS minimumfizetés,

deptno AS részleg FROM emp GROUP BY deptno) allek …

Itt már nincs vessző

Page 33: Adatbázis használat I

Amire figyeljünk

A WHERE-ben ne felejtsük összekapcsolni a táblákat.

Ki lehet próbálni mi történik, ha elhagyjuk a WHERE részt.

A WHERE-ben az a fontos, hogy minden tábla össze legyen kapcsolva a megfelelő oszlop(okk)al.

WHERE telephely.deptno = allek.részleg AND telephely.deptno = dolgozó.deptno

WHERE dolgozó.deptno = allek.részleg AND telephely.deptno = dolgozó.deptno

Ugyanazt az eredményt adja

Page 34: Adatbázis használat I

Házi feladat (2)

Írja ki minden dolgozó nevét, jövedelmét, munkakörének nevét, továbbá a munkakörében dolgozók összjövedelmét, végül pedig a dolgozó jövedelembeállási értékét (mekkora az összjövedelem és a dolgozó jövedelmének különbsége), úgy hogy a jövedelem szerint rendezzünk növekvően.

Page 35: Adatbázis használat I

Házi feladat (2)

SELECT ename AS "Dolgozó neve", sal+NVL(comm,0) AS jövedelem, dolgozó.job AS munkakör, összjövedelem, összjövedelem - sal+NVL(comm,0) AS jövbeállFROM emp dolgozó, (SELECT SUM(sal+NVL(comm,0)) AS összjövedelem, job FROM emp GROUP BY job) allekWHERE dolgozó.job = allek.jobORDER BY jövedelem;