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

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

Upload: nellie

Post on 05-Jan-2016

36 views

Category:

Documents


0 download

DESCRIPTION

Adatbázisok használata 1 (2. gyakorlat). 2012. tavaszi félév Vitéz Gergely. Hallgatói Tájékoztató. A jelen bemutatóban található adatok, tudnivalók és információk a számonkérendő anyag vázlatát képezik. Ismeretük szükséges, de nem elégséges feltétele a sikeres zárthelyi(k)nek. - PowerPoint PPT Presentation

TRANSCRIPT

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

2012. tavaszi félévVitéz Gergely

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

A jelen bemutatóban található adatok, tudnivalók és információk aszámonkérendő anyag vázlatát képezik. Ismeretük szükséges, de nemelégséges feltétele a sikeres zárthelyi(k)nek.

Sikeres zárthelyihez, illetve vizsgához a jelen bemutató tartalmánfelül a kötelező irodalomként megjelölt anyag, a gyakorlatokon

szóban,illetve a táblán átadott tudnivalók ismerete, valamint a gyakorlatokonmegoldott példák és az otthoni feldolgozás céljából kiadott feladatokönálló megoldásának képessége is szükséges.

OE-NIK 2012. 2

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

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

3OE-NIK 2012.

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

SELECTFROMWHEREGROUP BYHAVINGORDER BY;

A lekérdezést pontosvesszővel zárjuk Az attribútumokat vesszővel választjuk el A karakterláncokat aposztrófok közé tesszük

4OE-NIK 2012.

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

A segítségével szűrhetjük az eredményhalmazunkat

Operátorok: = <> < <= > >=

Például: sal > 1000

‘!=‘ ? ‘<>’

5OE-NIK 2012.

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

Logikai operátorok: AND:

◦ A segítségével több feltételt is megszabhatunk egyszerre, melynek mind teljesülnie kell

OR:◦ Ha AND helyett „OR”-t használunk, akkor elég az

egyik feltételnek teljesülnie

Keresés zárt intervallumban:◦ BETWEEN 100 AND 1500

OE-NIK 2012. 6

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

Listázza ki azon dolgozók összes adatát, akiknek a fizetésük kevesebb, mint 1230$!

Listázza ki azon dolgozók nevét és fizetését, akik fizetése 1500$ vagy 1600$!

Listázza ki azon dolgozók nevét és fizetését, akik fizetése 1000$ és 1700$ között van!

OE-NIK 2012. 7

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

Szeretnénk egy kicsit szépíteni lekérdezésünk megjelenő eredményén:

SELECT ename AS ”Név”, sal AS ”fizetés” FROM emp ORDER BY ename;

Név fizetés---------- ----------ADAMS 1100ALLEN 1600BLAKE 2850……… …..

OE-NIK 2012. 8

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

Írassuk ki azon dolgozók nevét, munkakörét és fizetését, akiknek a fizetése 1500 USD alatt van.A lista fejléce legyen „Név”, „Munkakör”, „Fizetés”, rendezzen a dolgozók neve szerint.

OE-NIK 2012. 9

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

SELECT ename AS ”Név”, job AS ”Munkakör”, sal AS ”Fizetés”

FROM empWHERE sal < 1500ORDER BY ename;

OE-NIK 2012. 10

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

További kifejezések:◦ Alsztringvizsgálat

Oszlopkifejezés LIKE ’%alsztring%’ Pl.: SELECT * FROM emp WHERE ename LIKE

UPPER(’%ar%’);

◦ Allekérdezésre vonatkozó halmazvizsgálat Oszlopkifejezés [NOT] IN | ANY | ALL | EXSIST

allekérdezés

◦ NULL értékre vonatkozó vizsgálat (következő dia) Oszlopkifejezés IS NULL | IS NOT NULL

OE-NIK 2012. 11

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

Ki kap jutalékot? Vigyázat, aki nem kap, annál az érték nem 0, hanem nincs is ott semmi!

A …WHERE comm=0; nem fog működni.

SELECT ename, comm FROM empWHERE comm IS NOT NULL;

OE-NIK 2012. 12

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

Írassuk ki az 1200 és 2900 USD között kereső dolgozók minden adatát úgy, hogy a fizetés, majd a nevük szerint legyen rendezve.

Írassuk ki az 1200 és 2900 USD között NEM kereső dolgozók nevét, keresetét, jutalékát úgy, hogy a fizetés, majd a nevük szerint legyen rendezve és beszédesek legyenek az oszlopnevek.

OE-NIK 2012. 13

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

Írassuk ki az 1200 és 2900 USD között kereső dolgozók minden adatát úgy, hogy a fizetés, majd a nevük szerint legyen rendezve.

SELECT emp.* FROM empWHERE sal BETWEEN 1200 AND 2900ORDER BY sal, ename;

OE-NIK 2012. 14

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

Írassuk ki az 1200 és 2900 USD között NEM kereső dolgozók nevét, keresetét, jutalékát úgy, hogy a fizetés, majd a nevük szerint legyen rendezve és beszédesek legyenek az oszlopnevek.

SELECT emp.ename AS Név, emp.sal AS Fizetés, emp.comm AS Jutalék

FROM empWHERE sal NOT BETWEEN 1200 AND 2900ORDER BY sal, ename;

OE-NIK 2012. 15

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

Írassuk ki a „clerk” munkakörű dolgozók nevét, munkakörét, fizetését. A lista fejléce legyen „Név”, „Munkakör”, „Fizetés”, rendezzen a dolgozók neve szerint.

SELECT ename, job, sal FROM empWHERE job LIKE ’%clerk%’;

Mi történt? Miért nem jelent meg a clerk?

OE-NIK 2012. 16

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

Kis és nagybetűk számítanak!SELECT ename, job, sal FROM empWHERE job LIKE ’%CLERK%’;

vagy:

SELECT ename, job, sal FROM empWHERE job LIKE UPPER(’Clerk’);

ENAME JOB SAL---------- --------- ----------SMITH CLERK 800ADAMS CLERK 1100JAMES CLERK 950MILLER CLERK 1300

OE-NIK 2012. 17

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

Ha több munkakörre is kíváncsiak vagyunk?Például: „sealsman” és „clerk”.

SELECT ename, job, sal FROM empWHERE UPPER(job) IN

UPPER(’SALESMAN’,’CLERK’);

Megjegyzés: lehet így is … LOWER(job) IN (’salesman’, ’clerk’);

OE-NIK 2012. 18

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

Műveletek dátumokkal:

SELECT ename AS Név, hiredate AS Dátum,EXTRACT(YEAR FROM hiredate) AS BeÉv,EXTRACT(MONTH FROM hiredate) AS BeHó,EXTRACT(DAY FROM hiredate) AS BeNapFROM empWHERE hiredate > TO_DATE('1981.máj.05');

Dátumformátum probléma: „TO_DATE('1981.máj.05');”

TO_DATE('1981.05.05','YYYY.MM.DD');

OE-NIK 2012. 19

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

Számoljuk ki a dolgozóknak a jövedelmét (sal+comm) és rendezzük növekvő rendbe.

SELECT emp.*, sal+comm FROM emp;

Nézzük meg, hogy mi történt.Miért történhetett ez?

OE-NIK 2012. 20

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

Ilyen estekben használjuk az NVL függvényt.Lényege, ahol nincs érték megadva azt kitölti az általunk megadottal.

Nézzük meg az előző példát a függvény segítségével.

OE-NIK 2012. 21

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

SELECT ename AS Név,sal AS Fizetés,sal+NVL(comm,0) AS JövedelemFROM empORDER BY Jövedelem DESC;

OE-NIK 2012. 22

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

Milyen munkakörök léteznek ennél a cégnél?

SELECT job FROM emp ORDER BY job asc;

◦ El lehet tüntetni a többször szereplő sorokat?

OE-NIK 2012. 23

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

SELECT DISTINCT job FROM emp ORDER BY job asc;

OE-NIK 2012. 24

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

A leggyakrabban használt függvények:◦ AVG()

Kiszámolja a csoport(ok) átlagát.◦ SUM()

A csoportban összeget számol.◦ MIN()

A legkisebb értéket adja meg a csoportban.◦ MAX()

A legnagyobb értéked adja meg a csoportban.◦ COUNT()

Megszámolja a csoport elemeinek számát.

Ezeket a függvényeket mindig GROUP BY-al használjuk.

OE-NIK 2012. 25

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

Példa: legnagyobb fizetés részlegenként

SELECT deptno, MAX(sal)FROM empGROUP BY deptno;

Eredmény: DEPTNO MAX(SAL)---------- ---------- 30 2850 20 3000 10 5000

Ami szerint csoportosítunk azt mind bele kell írni a GROUP BY utasításrészbe, amit kiíratunk (számolunk) azt nem kell.

A csoportfüggvénybe is lehet kifejezést írni.

OE-NIK 2012. 26

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

A főnök szeretné látni részlegenként:◦ A legalacsonyabb fizetést;◦ A legmagasabb fizetést;◦ Az átlagos fizetést;◦ A létszámot.

OE-NIK 2012. 27

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

SELECT deptno AS Részleg, MIN(sal) AS Legkisebb, MAX(sal) AS Legnagyobb, AVG(sal) AS Átlag, COUNT(*) AS Létszám FROM emp GROUP BY deptno;

OE-NIK 2012. 28

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

HAVING – a már csoportosított eredményre vonatkozó feltétel.

Listázzuk főnökönként (mgr) a jutalékban nem részesülő dolgozóinak átlagfizetését csökkenő sorrendben, feltéve, hogy ez az érték 1000 USD-nál több.

SELECT AVG(sal) AS "Átlagfizetés", mgr AS "Fonök"

FROM empWHERE comm IS NULL AND mgr IS NOT NULLGROUP BY mgrHAVING AVG(sal) > 1000ORDER BY "Átlagfizetés" DESC;

OE-NIK 2012. 29

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

Írassa ki a 2000 USD-nál nagyobb átlagjövedelmű részlegeket, az átlagjövedelem szerint rendezve!

OE-NIK 2012. 30

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

SELECT deptno,ROUND(AVG(sal+NVL(comm,0))) AS

átlagjövedelemFROM empGROUP BY deptnoHAVING ROUND(AVG(sal+NVL(comm,0))) >

2000ORDER BY átlagjövedelem ASC;

OE-NIK 2012. 31

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

Jövő héten gépes ZH:

dátumok, csoportosítás,

Csoportfüggvények,szűrés,

speciális függvények lehetnek benne.

[email protected]

32OE-NIK 2012.

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

Listázza ki részlegenként és minden részlegben munkakörönként a 2000 USD-nál nagyobb jövedelmű dolgozók átlagjövedelmét, mégpedig úgy, hogy a lista legyen az utóbbi szerint növekvő és használjon beszédes oszlopneveket.

37OE-NIK 2012.

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

SELECT deptno AS Részleg, job AS Munkakör,

avg(sal+NVL(comm,0)) AS ÁtlagFROM empWHERE (sal + NVL(comm,0)) > 2000GROUP BY deptno, jobORDER BY Átlag;

38OE-NIK 2012.

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

Listázza ki a legfeljebb 2200 USD átlagjövedelmű részlegeknek az átlagjövedelmét és ezt rendezzük átlagjövedelem szerint növekvő sorrendbe majd csökkenő sorrendbe és használjon beszédes oszlopneveket.

39OE-NIK 2012.

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

SELECT deptno AS Részleg, AVG(sal+nvl(comm,0)) AS Átlag

FROM empGROUP BY deptnoHAVING AVG(sal+nvl(comm,0)) < 2200ORDER BY Átlag asc/desc;

40OE-NIK 2012.