1 / 24

Adatbázis gyakorlat

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 …]

chase
Download Presentation

Adatbázis gyakorlat

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Miről lesz szó? • SELECT befejezés: • GROUP BY • HAVING • dátum kezelés • Al-select (subselect) • INSERT, DELETE, UPDATE, CREATE – selecttel

  3. GROUP BY SELECT … 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.

  4. 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! • Feladat: Adjuk meg, hogy az egyes tanárok hány diáknak osztályfőnökei! (Azonosítóval) SELECT Ofo, COUNT(DAzon) AS Db FROM tDiak GROUP BY Ofo;

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

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

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

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

  9. 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 INTOtEmber VALUES (5,'Kiss János','1988-FEB-28 10:00:00.0');  Konverziós függvény!

  10. 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.'));

  11. Konverzió TO_CHAR Lehetsé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

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

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

  14. Dátumkezelő függvények – 2. * UPDATE tEmber SET Szuletes=ADD_MONTHS(Szuletes,-20) WHERE EAzon=5;

  15. 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!

  16. 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 nev FROM tdiak WHERE kor> (SELECT kor FROM tdiak WHERE DAzon=32); Hogy is van ez?

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

  18. 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!

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

  20. 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’

  21. 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)

  22. 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ó’)

  23. 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)

  24. Alkérdés CREATE TABLE-ben CREATE table (… ) AS SELECT …

More Related