adatbázis gyakorlat

24
– SELECT - 2. – Tarcsi Ádám 2006. március Adatbázis gyakorlat

Upload: chase

Post on 21-Jan-2016

60 views

Category:

Documents


0 download

DESCRIPTION

Adatbázis gyakorlat. – SELECT - 2. –. Tarcsi Ádám 2006. március. Miről lesz szó?. SELECT befejezés: GROUP BY HAVING dátum kezelés Al-select (subselect) INSERT, DELETE, UPDATE, CREATE – selecttel. GROUP BY. SELECT … FROM … [WHERE …] GROUP BY mező1, [mező 2] [ORDER BY …] - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Adatbázis gyakorlat

– SELECT - 2. –

Tarcsi Ádám

2006. március

Adatbázis gyakorlat

Page 2: Adatbázis gyakorlat

Miről lesz szó?

• SELECT befejezés:– GROUP BY– HAVING– dátum kezelés– Al-select (subselect)– INSERT, DELETE, UPDATE, CREATE – selecttel

Page 3: Adatbázis gyakorlat

GROUP BYSELECT …

FROM … [WHERE …]GROUP BY mező1, [mező 2]

[ORDER BY …]• Csoportosítás, csoport képzés.

Megszámolhatjuk, hogy hány sor van egy csoportban, vagy kiválaszthatjuk a csoport egy kívánt tagját (pl.: a legidősebbet a csoportban)

• Oszlopfüggvényeket (SUM, AVG, COUNT, stb.) az egyes csoportokban külön-külön hajtja végre

• A GROUP BY-ban megadott mezőnek szerepelnie kell a SELECT utáni felsorolásban.

Page 4: Adatbázis gyakorlat

GROUP BY – 2.• A WHERE feltételnek megfelelő sorokat

csoportosítja úgy, hogy a megadott csoportosítási kifejezéseken (GROUP BY x,y…) belül az egyező értékkel bírók, illetve azok teljes sorai kerülnek 1-1 csoportba.

• Üres csoportok nem kerülnek be!• FeladatFeladat: Adjuk meg, hogy az egyes tanárok

hány diáknak osztályfőnökei! (Azonosítóval)SELECT Ofo, COUNT(DAzon) AS DbFROM tDiakGROUP BY Ofo;

Page 5: Adatbázis gyakorlat

GROUP BY feladatok

• Adjuk meg az egyes tanárok (névvel megadva) által oktatott diákok átlagéletkorát!

Megjegyzés: Az eredmény táblába nem kerülnek bele azok a tanárok, akik nem tanítanak senkit sem.

Page 6: Adatbázis gyakorlat

HAVING

• Csoportokra vonatkozó feltétel megadás. csak a GROUP BY utasítással együtt használjuk.

MindenMinden WHEREWHERE GROUP BYGROUP BY HAVINGHAVING

Page 7: Adatbázis gyakorlat

HAVING feladatok

• Adjuk meg azon tanárok nevét, akik 2 diáknál többet tanítanak!

• Adjuk meg azon tanárok nevét és tanítványainak átlagéletkorát, akik legalább 3 diákot tanítanak!

Page 8: Adatbázis gyakorlat

Dátumkezelés

• Dátum tárolás: (évszázad,) év, nap, óra, perc, másodperc, századmásodperc.

• SELECT sysdate FROM dual; - rendszeridő, dátum

Eredménye: 2007-02-28 15:20:03.0 • Dátummal végezhető műveletek:

– dátum +- szám - napokat ad hozzá, vesz el– dátum – dátum - eltelt napok száma– dátum + szám/24 - szám db órát ad a dátumhoz

Page 9: Adatbázis gyakorlat

Dátum konverzió

• Hozzunk létre egy új táblát:

tEmber(EAzon:szám,Nev:szoveg,Szuletes:date)

• Töltsük fel egy rekorddal:

• INSERT INTO-val próbáljuk meg feltölteni!INSERT INTO tEmber VALUES (5,'Kiss János','1988-FEB-28 10:00:00.0');

Konverziós függvény!

Page 10: Adatbázis gyakorlat

Konverzió

• TO_DATE(‘dátumérték’,’formátum’): number,char,varchar típusú dátumértéket adott formátumú dátummá alakítja. Pl.: TO_DATE('1988.feb.28.','YYYY.mon.DD.')

• Most próbáljuk újra!INSERT INTO tEmber VALUES (10,'Kiss János',TO_DATE('1988.feb.28.','YYYY.mon.DD.'));

Page 11: Adatbázis gyakorlat

Konverzió TO_CHARLehetséges dátum formátummaszkok pl.:• YYYY - teljes évszám, számmal• YEAR - évszám betűvel• MM - hónapneve (pl:.03)• MONTH - hónap teljes neve, betűvel• mon - hónap 3 betűs rövidítése,

kisbetűvel• WW - hét sorszáma az évben• DD - nap sorszáma a hónapban • D - nap sorszáma a héten• DAY - nap teljes neve,

szövegesen

Page 12: Adatbázis gyakorlat

Konverzió – TO_CHAR

• TO_CHAR(érték,’formátum’): Számból, dátumból (mezőt adott formátumú dátummá) karaktert. Lekérdezéskor.

• SELECT TO_CHAR(sysdate,'MONTH') FROM DUAL;

• Select TO_CHAR(Szuletes,'YYYY MONTH DAY') from tEmber;

• SELECT TO_CHAR (TO_DATE('1979.sep.10','YYYY.mon.DD'),'YEAR MONTH DDD WW') FROM dual

Page 13: Adatbázis gyakorlat

Dátumkezelő függvények *

• MOTHS_BETWEEN(dátum1,dátum2): két dátum között eltelt hónapok száma

• ADD_MONTHS(dátum,n): n db naptári hónapot ad hozzá a dátumhoz. n negatív is lehet.

• NEXT_DAY(dátum,’nap’):Meghatározza a megadott dátum utáni első ‘nap’ nevű nap dátumát.SELECT NEXT_DAY(sysdate,'monday') FROM dual;

• LAST_DAY(dátum,’nap’): A megadott dátum hónapjának utolsó napját

Page 14: Adatbázis gyakorlat

Dátumkezelő függvények – 2. *

UPDATE tEmber SET Szuletes=ADD_MONTHS(Szuletes,-20)

WHERE EAzon=5;

Page 15: Adatbázis gyakorlat

Feladatok:• Hány olyan diák van, akit a 2-es azonosítójú tanár tanít?• Adjuk meg a tDiak táblában szereplők születési

évszámát!• Adjuk meg a 10 és 20 év közötti diákok tanárainak

nevét, abc sorrendben. (Minden név csak egyszer szerepeljen!)

• Listázzuk ki az összes diákot, akik 15 és 25 éves kor között vannak, vagy a vezetéknevük „Har”!

• Adjuk meg a tanított diákok száma alapján csökkenő sorrendbe rendezve, hogy az egyes tanárok hány diákot tanítanak!

Page 16: Adatbázis gyakorlat

Allekérdezés - subselect• Allekérdezés olyan SELECT utasítás, amely

értéke(ke)t ad át egy külső utasításnak.• WHERE-ben vizsgálandó értékeket másik

SELECT-ből hozzuk.Pl.: Ki idősebb, mint a 32-es azonosítójú diák?SELECT nevFROM tdiakWHERE kor> (SELECT kor

FROM tdiak WHERE DAzon=32);

Hogy is van ez?

Page 17: Adatbázis gyakorlat

Allekérdezés – subselect – 2.• Jelentőségük: ha egy külső utasítás eredménytáblájában

valamely sor kiválasztása egy teljes tábla kiértékelésétől függ.

• Tagadás esetén. Pl.: melyik tanár nem osztályfőnök• Először a belső SELECT hajtódik végre, ez lesz a külső

feltétel.• WHERE, HAVING, FROM utasításrészben• Mindig egy összehasonlító operátor jobb oldalán van!• Zárójelbe ( ) kell tenni• Nem tartalmazhat ORDER BY utasításrészt• Fajái:

– egysoros– többsoros

Page 18: Adatbázis gyakorlat

Egysoros subselect

• A belső SELECT egyetlen sort ad vissza• Néha a DISTINCT záradékkal segíthetünk!Példa:• Adjuk meg azon tanárokat, akik legalább

egy diákot tanítanak! (melyik tanár osztályfőnök?)

• Adjuk meg azon tanárokat, akik nem tanítanak egy diákot sem!

Page 19: Adatbázis gyakorlat

Többsoros subselect• Hibás, ha az előbbi alselect több sort ad vissza.Összehasonlító operátort használunk:• IN / NOT IN: a lista bármely elemével egyenlő – adott

érték előfordulása• ANY: listát ad vissza, ha van egy elem, ami kielégíti a

feltételt, akkor a WHERE feltétel teljesül – legalább 1.• ALL: listát ad vissza Teljesül a feltétel, ha a visszaadott

lista minden eleme minden tagja teljesíti – minden esetben igaz

• EXIST: a feltétel teljesül, ha az allekérdezés legalább egy sort ad vissza.

• NOT ALL: legyalább egy esetben nem igaz• NOT ANY: egyetlen esetben sem igaz

Page 20: Adatbázis gyakorlat

Subselect feladatok

• Adjuk meg a legidősebb diák nevét!• Kiket tanít még ‘Ka Pál’ tanára?• Listázzuk ki azokat a diákokat, akik legalább

kétszer olyan idősek, mint a legfiatalabb diák.• Írassuk ki azoknak a tanároknak a neveit, akik

nem tanítanak 20 évnél idősebb diákokat!• Listázzuk ki azoknak a diákoknak a nevét, akik

fiatalabbak minden olyan diáknál, akiknek az osztályfőnöke ‘Szlávi Péter’

Page 21: Adatbázis gyakorlat

Allekérdezés -2. INSERT INTO

INSERT INTO <táblanév> (<mezőnév1>, …, <mezőnévn>)(<al-select>)

• INSERT INTO tDiak (DAzon, Nev, Kor, TAzon)(SELECT DAzon, Nev, Kor, 1 FROM tOsztaly)

• INSERT INTO tDiak (DAzon, Nev, Kor, TAzon)(SELECT *, 1 FROM tOsztaly)

Page 22: Adatbázis gyakorlat

Allekérdezés -3. – UPDATE

• UPDATE <táblanév> SET <mezőnév1> = <érték1>, …, <mezőnévk> = <értékk> WHERE <feltétel al-select-ekkel>

• Változtassuk a kor mező értékét 30-ra azon diákoknál, akiket Zsakó László tanít!

UPDATE tDiak SET TAzon=3WHERE TAzon IN (SELECT TAzon FROM tTanar WHERE Nev like ’Zsakó László’)

Page 23: Adatbázis gyakorlat

Allekérdezés -3. – DELETE FROM

• DELETE FROM <táblanév> WHERE <feltétel al-select-ekkel>

• Töröljük azokat a tanárokat, akik egy diákot sem tanítanak!

DELETE FROM tTanar WHERE TAzon NOT IN (SELECT TAzon FROM tDiak)

Page 24: Adatbázis gyakorlat

Alkérdés CREATE TABLE-ben

CREATE table

(…

)

AS

SELECT …