Upload
zaza
View
38
Download
2
Embed Size (px)
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
Citation preview
Adatbázisok használata 1(2. gyakorlat)
2012. tavaszi félévVitéz Gergely
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ó
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
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
OE-NIK 2012. 5
A segítségével szűrhetjük az eredményhalmazunkat
Operátorok: = <> < <= > >=
Például: sal > 1000
‘!=‘ ? ‘<>’
WHERE
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
24
SELECT DISTINCT job FROM emp ORDER BY job asc;
A megoldás:
OE-NIK 2012.
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.
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.
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.
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.
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.
30
Írassa ki a 2000 USD-nál nagyobb átlagjövedelmű részlegeket, az átlagjövedelem szerint rendezve!
Önálló munka
OE-NIK 2012.
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.
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.
Köszönöm a Figyelmet!
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.
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;
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.
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;