Adatbázis használat I. 2. gyakorlat
Tudnivalók Oracle 10g a weben: http://www.oracle.com/technetwork/database/ database10g/downloads/index.html Egyéb letöltési lehetőség: http://jerry.gorextar.hu/ab1/oracle/ Login: orakulum/descartes FF kiírásokat legkésőbb a jövő hétre hozni! 2
Lekérdezések Kérdezzük le az emp tábla tartalmát! SELECT * FROM emp; 3
Lekérdezések Kérdezzük le a dept tábla tartalmát! SELECT * FROM dept; 4
Lekérdezések Az emp táblából csak a dolgozó nevét, fizetését és jutalékát szeretnénk látni. SELECT ename, sal, comm FROM emp; 5
Lekérdezések Nézzük most a nevet, munkakört és a felvétel dátumát! SELECT ename, job, hiredate FROM emp; 6
Lekérdezések Lássuk az azonosítót és a nevet, de nevezzük át az oszlopokat! SELECT empno AS Azonosító, ename AS Név FROM emp; 7
Lekérdezések Szeretnénk tudni, ki keres sokat, és milyen munkakörben. SELECT ename, job, sal FROM emp WHERE sal > 2000; 8
Lekérdezések és ki kap jutalékot? Mennyit? SELECT ename, job, comm FROM emp WHERE comm > 0; 9
Lekérdezések Rendezzük a táblázatunkat fizetés szerinti növekvő sorrendbe! SELECT * FROM emp ORDER BY sal; 10
Lekérdezések és csökkenő sorrendbe? SELECT * FROM emp ORDER BY sal DESC; 11
Lekérdezések Akkor most rendezzünk belépési dátum szerint! SELECT * FROM emp ORDER BY hiredate ASC/DESC; 12
Előre megírt lekérdezés futtatása ed aaa @aaa De hol van ez az aaa.sql? 13
Gyakorlás Irassuk 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. 14
Megoldás SELECT ename AS Név, job AS Munkakör, sal AS Fizetés FROM emp WHERE sal < 1500 ORDER BY ename; 15
További feltétel kifejezések Írassuk ki azon dolgozók nevét, munkakörét és fizetését, akiknek a fizetése 1500 és 2500 USD között van. A lista fejléce legyen Név, Munkakör, Fizetés, rendezzen a dolgozók neve szerint. 16
Megoldás SELECT ename AS Név, job AS Munkakör, sal AS Fizetés FROM emp WHERE sal BETWEEN 1500 AND 2500 ORDER BY ename; 17
További feltétel kifejezések Irassuk ki azon dolgozók nevét, munkakörét és fizetését, akiknek a fizetése NINCS 1500 és 2500 USD között. A lista fejléce legyen Név, Munkakör, Fizetés, rendezzen a dolgozók neve szerint. 18
Megoldás SELECT ename AS Név, job AS Munkakör, sal AS Fizetés FROM emp WHERE sal NOT BETWEEN 1500 AND 2500 ORDER BY ename; 19
További feltétel 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 emp WHERE job LIKE '%clerk%'; Mi történt? Pedig van clerk!!! 20
Megoldás Kis és nagybetűk itt számítanak! SELECT ename, job, sal FROM emp WHERE job LIKE '%CLERK%'; vagy: SELECT ename, job, sal FROM emp WHERE job LIKE UPPER('clerk'); 21
További feltétel kifejezések De mi van akkor, ha több munkakörre is kíváncsiak vagyunk? Mondjuk salesman és clerk SELECT ename, job, sal FROM emp WHERE UPPER(job) IN ('SALESMAN', 'CLERK'); Megjegyzés: vagy LOWER(job) IN (' salesman', ' clerk'); 22
Mi az eredmény és miért? SELECT ename AS Név, sal AS Fizetés, sal+comm AS Jövedelem FROM emp ORDER BY sal+comm DESC; 23
Helyes megoldás SELECT ename AS Név, sal AS Fizetés, sal+nvl(comm,0) AS Jövedelem FROM emp ORDER BY Jövedelem DESC; 24
Még egy-két apróság Milyen munkakörök léteznek ennél a cégnél? SELECT job FROM emp; De nekem elég, ha egy munkakört csak egyszer listáz SELECT DISTINCT job FROM emp; 25
Még egy-két apróság 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 emp WHERE comm IS NOT NULL; 26
Még egy-két apróság 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 BeNap FROM emp WHERE hiredate > TO_DATE('1981.máj.05'); 27