Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaNorbert Tamás Megváltozta több, mint 10 éve
1
– SELECT - 2. – Tarcsi Ádám 2006. március Adatbázis gyakorlat
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! FeladatFeladat: 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. MindenWHERE GROUP BY HAVING
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 INTO tEmber 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 (, …, )( ) 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 SET =, …, = WHERE Változtassuk a kor mező értékét 30-ra azon diákoknál, akiket Zsakó László tanít! UPDATE tDiak SET TAzon=3 WHERE TAzon IN (SELECT TAzon FROM tTanar WHERE Nev like ’Zsakó László’)
23
Allekérdezés -3. – DELETE FROM DELETE FROM WHERE 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 …
25
Feladat Bővítsük a tanár táblát két mezővel, az egyikben a tanárok korát tároljuk, a másikban a tanított tantárgyat tároljuk! Ki tanít matekot? Adjuk meg azon tanárokat, akiknek van náluk idősebb diákjuk!
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.