Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

ADATBÁZIS HASZNÁLAT I. 2. gyakorlat. Figyelem!!! A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem.

Hasonló előadás


Az előadások a következő témára: "ADATBÁZIS HASZNÁLAT I. 2. gyakorlat. Figyelem!!! A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem."— Előadás másolata:

1 ADATBÁZIS HASZNÁLAT I. 2. gyakorlat

2 Figyelem!!! A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele a minimum elégséges érdemjegynek!

3 Weboldalak

4 Egyszerű lekérdezések emp  Kérdezzük le az emp tábla tartalmát! SELECT * FROM emp;

5 Egyszerű lekérdezések dept  Kérdezzük le az dept tábla tartalmát! SELECT * FROM dept;

6 Egyszerű lekérdezések  Ha nem vagyunk kíváncsiak az egész táblára lekérdezhetünk oszlopokat is belőle. emp  Kérdezzük le az emp táblából a dolgozók nevét és fizetését. SELECT ename, sal FROM emp;

7 Egyszerű lekérdezések emp  Kérdezzük le az emp táblából a dolgozók nevét, munkakörét és részlegazonosítóját. SELECT ename, job, deptno FROM emp; Megjegyzés: amikor több oszlopot kérdezünk le vesszőkkel választjuk el őket, de az utolsó oszlopnév után nem rakunk vesszőt.

8 Egyszerű lekérdezések  Kérdezzük le az azonosítót és a nevet, de beszédes oszlopneveket szeretnénk látni, ezért nevezzük át az oszlopokat. SELECT empno AS Azonosító, ename AS Név FROM emp; Megjegyzés: összetett oszlopneveket is tudunk kezelni, ekkor azt az oszlopnevet " " [shift + 2] közé tesszük (pl.: név helyett dolgozó neve).

9 Egyszerű lekérdezések  Szeretnénk megtudni, hogy ki keres sokat és mi a beosztása. SELECT ename, sal, job FROM emp WHERE sal > 2000;

10 Egyszerű lekérdezések  Ki kap jutalékot és mennyit? SELECT ename, comm FROM emp WHERE comm > 0;

11 Lekérdezések  Rendezzük a táblázatunkat dolgozó azonosító szerinti növekvő sorrendbe! SELECT * FROM emp ORDER BY empno;  Most ugyanezt csökkenő sorrendbe SELECT * FROM emp ORDER BY empno DESC;

12 Lekérdezések  Rendezzük a táblázatunkat fizetés szerinti növekvő sorrendbe, majd csökkenő sorrendbe! SELECT * FROM emp ORDER BY sal ASC/DESC;  Rendezzünk most fizetés szerint növekvő és jutalék szerint csökkenő sorrendbe SELECT * FROM emp ORDER BY sal, comm desc;

13 Előre megírt lekérdezés(ek) futtatása  ed azenlekerdezesem  Megnyit egy jegyzettömböt, amelybe írhatjuk a lekérdezést.  Fontos, hogy mindig mentsük a munkánkat benne!!!  Ezzel futtatjuk az előre megírt lekérdezésünket.  Holt találjuk meg ezt a fájlt?  Nézzük meg a kereső segítségével. Írjuk be, hogy azenlekerdezesem.sql

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

15 Gyakorlás SELECT ename AS ”Név”, job AS ”Munkakör”, sal AS ”Fizetés” FROM emp WHERE sal < 1500 ORDER BY ename;

16 További feltételes kifejezések  További kifejezések:  Logikai műveletek AND, OR, NOT  Hasonlító műveletek >, >=,, !=  Intervallum Oszlopkifejezés BETWEEN AlsóHatár AND FelsőHatár  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 alekérdezés  NULL értékre vonatkozó vizsgálat Oszlopkifejezés IS NULL | IS NOT NULL

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

18 További feltételes kifejezések SELECT emp.* FROM emp WHERE sal BETWEEN 1200 AND 2900 ORDER BY sal, ename;

19 További feltételes kifejezések SELECT emp.ename AS Név, emp.sal AS Fizetés, emp.comm AS Jutalék FROM emp WHERE sal NOT BETWEEN 1200 AND 2900 ORDER BY sal, ename;

20 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 emp WHERE job LIKE ’%clerk%’; Mi történt? Miért nem jelent meg a clerk?

21 Megoldás  Kis és nagybetűk 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’);

22 További feltételes kifejezések  Mi van akkor ha több munkakörre is kíváncsiak vagyunk? Mondjuk „sealsman” és „clerk”. SELECT ename, job, sal FROM emp WHERE UPPER(job) IN UPPER(’SALESMAN’, ’CLERK’); Megjegyzés: lehet így is … LOWER(job) IN (’salesman’, ’clerk’);

23 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?

24 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. SELECT emp.*, sal+NVL(comm,0) AS Jövedelem FROM emp; ORDER BY Jövedelem ASC;

25 Speciális függvények  A DECODE függvény segítségével javíthatjuk a listánk áttekinthetőségét. SELECT ename, job, DECODE(comm, 300, ’háromszáz’, comm) FROM emp; SELECT ename, DECODE(NVL(comm,-1), -1, ’Nem jár jutalék’, comm FROM emp;

26 Speciális függvények  A CASE függvény, hasonlóan a DECODE függvényhez itt is a listánkat tehetjük olvashatóbbá, de képes kezelni már több esetet is.  Működése HA-AKKOR, KÜLÖNBEN elvű.  A feldolgozás során mindig az első a kifejezést igazzá tévő értéket fogja behelyettesíteni.

27 Speciális függvények  Szintaktikája: CASE oszlopkifejezés [oszlopkifejezés] WHEN LogikaiKifejezés THEN VisszatérésiÉrték [WHEN LogikaiKifejezés THEN VisszatérésiÉrték] … [ELSE VisszatérésiÉrték] END

28 Speciális függvények  Listázzuk ki a dolgozók nevét, munkakörét, jutalékát úgy, hogy akinek nincs jutaléka oda azt írjuk ki, hogy „nem jár jutalék”.  Oszlopkifejezéssel SELECT ename, job, CASE NVL(comm,-1) WHEN -1 THEN ’Nem jár jutalék’ ELSE TO_CHAR(comm) END FROM emp;

29 Még egy pár apróság…  Milyen munkakörök léteznek ennél a cégnél? SELECT job FROM emp;  De nekünk csak egyszer van szükségünk minden munkakörre. SELECT DISTINCT job FROM emp;

30 Még egy pár apróság…  Emlékezzünk a jutalékos példára ott arra voltunk kíváncsiak ki kap jutalmat, most nézük meg ki nem kap jutalmat.  A …Where comm=0; nem működik. Miért?  Ha lekérdezzük az emp táblát látjuk, hogy akik nem kapnak jutalmat oda nincs semmi se írva, ez nem egyenlő a 0-val!!!  Ezért így kérdezzük le: SELECT ename, comm FROM emp WHERE comm IS NULL;

31 Még egy pár apróság…  Művelet dátumokkal SELECT ename AS Név, hiredate AS Dátum, EXTRACT(YEAR FROM hiredate) AS BeÉv, EXTRACT(MONTH FROM hiredate) AS BeHónap, EXTRACT(DAY FROM hiredate) AS BeNap FROM emp WHERE hiredate > TO_DATE(’1981.máj.05’);

32 Még egy pár apróság…  Eltelt idő meghatározása  Napokban SELECT ROUND(sysdate - TO_DATE( ,'YYYYMMDD')) FROM dual;  Hónapokban SELECT ROUND(MONTHS_BETWEEN(sysdate, TO_DATE( ,’YYYYMMDD’))) FROM dual;  Években SELECT ROUND(MONTHS_BETWEEN(sysdate, TO_DATE( ,’YYYYMMDD’))/12) FROM dual;

33 Csoportosító lekérdezések  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.  ROUND() Kerekítés Pl.: ROUND(AVG(sal),2) – 2 tizedes pontosan kerekít  Ezeket a függvényeket mindig GROUP BY-al használjuk.

34 Csoportosító lekérdezések  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.  ROUND() Kerekítés Pl.: ROUND(AVG(sal),2) – 2 tizedes pontosan kerekít  Ezeket a függvényeket mindig GROUP BY-al használjuk.

35 Csoportosító lekérdezések  Nézzünk az előbbiekre példát  Nézzük meg mi a legnagyobb fizetés részlegenként. SELECT deptno, MAX(sal) FROM emp GROUP BY deptno;  Mennyi a részlegenkénti fizetés és ezt rendezzük növekvő sorrendbe. SELECT deptno, AVG(sal) FROM emp GROUP BY deptno;

36 Önálló feladat  A főnök szeretné tudni a részlegeinek:  A legalacsonyabb fizetést  A legmagasabb fizetést  Az átlagos fizetést  A létszámot

37 A megoldás 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;

38 Bonyolítsuk a dolgokat… Listázzuk ki a legkisebb, a legnagyobb és az átlagos részlegenkénti létszámokat: SELECT MIN(COUNT(*)), MAX(COUNT(*)), ROUND(AVG(COUNT(*)),2) FROM emp GROUP BY deptno;

39 Szűrés csoportokra (A HAVING használata)  Listázzuk ki azokat a részlegeket amelyek 2000 USD- nél nagyobb átlagjövedelműek a jövedelem szerint rendezve. SELECT deptno, ROUND(AVG(sal+NVL(comm,0))) AS átlagjövedelem FROM emp GROUP BY deptno HAVING ROUND(AVG(sal+NVL(comm,0))) > 2000 ORDER BY átlagjövedelem;

40 Szűrés csoportokra (A HAVING használata)  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.

41 Megoldás SELECT AVG(sal) AS ”Átlagfizetés”, mgr AS ”Főnök” FROM emp WHERE comm IS NULL AND mgr IS NOT NULL GROUP BY mgr HAVING AVG(sal) > 1000 ORDER BY ”Átlagfizetés” DESC;

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

43 Megoldás SELECT deptno AS Részleg, job AS Munkakör, avg(sal+NVL(comm,0)) AS Átlag FROM emp WHERE (sal + NVL(comm,0)) > 2000 GROUP BY deptno, job ORDER BY Átlag;

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

45 Megoldás SELECT deptno AS Részleg, AVG(sal+nvl(comm,0)) AS Átlag FROM emp GROUP BY deptno HAVING AVG(sal+nvl(comm,0)) < 2200 ORDER BY Átlag asc/desc;


Letölteni ppt "ADATBÁZIS HASZNÁLAT I. 2. gyakorlat. Figyelem!!! A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem."

Hasonló előadás


Google Hirdetések