Adatbázisok használata 1 (2. gyakorlat)
description
Transcript of Adatbázisok használata 1 (2. gyakorlat)
2012. tavaszi félévVitéz Gergely
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
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.
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.
A segítségével szűrhetjük az eredményhalmazunkat
Operátorok: = <> < <= > >=
Például: sal > 1000
‘!=‘ ? ‘<>’
5OE-NIK 2012.
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
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
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
Í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
SELECT ename AS ”Név”, job AS ”Munkakör”, sal AS ”Fizetés”
FROM empWHERE sal < 1500ORDER BY ename;
OE-NIK 2012. 10
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
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
Í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
Í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
Í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
Í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
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
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
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
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
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
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
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
SELECT DISTINCT job FROM emp ORDER BY job asc;
OE-NIK 2012. 24
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
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
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
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
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
Írassa ki a 2000 USD-nál nagyobb átlagjövedelmű részlegeket, az átlagjövedelem szerint rendezve!
OE-NIK 2012. 30
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
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.
32OE-NIK 2012.
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.
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.
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.
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.