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

36
Adatbázisok használata 1 (2. gyakorlat) 2012. tavaszi félév Vitéz Gergely

Upload: zaza

Post on 29-Jan-2016

38 views

Category:

Documents


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

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

2012. tavaszi félévVitéz Gergely

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

2

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.

Hallgatói Tájékoztató

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

OE-NIK 2012. 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 Futtatás: @fajlnev

SQL Plus

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

OE-NIK 2012. 4

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

Egyszerű SQL lekérdezések

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

OE-NIK 2012. 5

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

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

Például: sal > 1000

‘!=‘ ? ‘<>’

WHERE

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

6

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

WHERE

OE-NIK 2012.

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

7

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!

Gyakorlás

OE-NIK 2012.

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

8

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 1100 ALLEN 1600 BLAKE 2850 ……… …..

Oszlopfejlécek használata

OE-NIK 2012.

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

9

Gyakorlás

Í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.

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

10

Gyakorlás

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

FROM empWHERE sal < 1500ORDER BY ename;

OE-NIK 2012.

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

11

További feltételes kifejezések

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.

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

12

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;

További feltételes kifejezések

OE-NIK 2012.

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

13

További feltételes kifejezések

Í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.

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

14

További feltételes kifejezések

Í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.

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

15

További feltételes kifejezések

Í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.

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

16

További feltételes kifejezések

Í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.

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

17

MegoldásKis é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 800

ADAMS CLERK 1100

JAMES CLERK 950

MILLER CLERK 1300

OE-NIK 2012.

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

18

További feltételes kifejezések

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.

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

19

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

Dátum használata

OE-NIK 2012.

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

20

Speciális függvények

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.

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

21

Speciális függvények

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.

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

22

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

Speciális függvények

OE-NIK 2012.

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

23

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?

Speciális függvények

OE-NIK 2012.

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

24

SELECT DISTINCT job FROM emp ORDER BY job asc;

A megoldás:

OE-NIK 2012.

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

25

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.

Csoportfüggvények

OE-NIK 2012.

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

26

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.

GROUP BY (csoportosítás)

OE-NIK 2012.

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

27

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.

Önálló feladat

OE-NIK 2012.

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

28

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;

Megoldás

OE-NIK 2012.

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

29

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;

Szűrés csoportokra (HAVING)

OE-NIK 2012.

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

30

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

Önálló munka

OE-NIK 2012.

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

31

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;

Megoldás:

OE-NIK 2012.

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

OE-NIK 2012. 32

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]

Köszönöm a Figyelmet!

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

OE-NIK 2012. 37

Házi feladat

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.

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

OE-NIK 2012. 38

Megoldás

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;

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

OE-NIK 2012. 39

Házi feladat (2)

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.

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

OE-NIK 2012. 40

Megoldás

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;