07. ADATBÁZISOK (LEV.INFOTANÁR)
1.RÉSZ - 3.ea.pdf Az
alkérdéseket használata a SELECT utasításban
>> Oracle DB SQL
példák: SQL08_alkerdes1.pdf;
SQL08_alkerdes2.pdf
>> Az
alkérdések
témakörben nézünk
példákat
szemijoinra, antijoinra.
>> Gyakorlat
példái: Dolgozo, Osztaly, Fiz_Kategoria
táblák: createDolg.txt
Dolgozo (dkod,
dnev, foglalkozas,
fonoke, belepes, fizetes, jutalek, oazon)
Osztaly (oazon, onev,
telephely)
Fiz_Kategoria (kategoria,
also, felso)
Példa alkérdésekre:
Adjuk meg azoknak a dolgozóknak a
nevét, akiknek a legnagyobb a fizetésük.
Feladatok több táblára -
teljes select utasítás - dolgozo,
osztaly, fiz_kategoria
1. Adjuk meg osztályonként a
telephelyet
és az átlagfizetést.
2. Kik azok és
milyen munkakörben dolgoznak a
legnagyobb fizetésű dolgozók?
3. Adjuk meg, hogy mely dolgozók
fizetése jobb,
mint a saját osztályán (vagyis
azon az osztályon, ahol
dolgozik az ott) dolgozók
átlagfizetése!
4. Adjuk meg azokat a foglalkozásokat, amelyek
csak egyetlen osztályon fordulnak elő,
és adjuk meg
hozzájuk azt az
osztályt is, ahol van ilyen
foglalkozású dolgozó.
5. Adjuk meg osztályonként a legnagyobb
fizetésu dolgozó(ka)t, és a
fizetést.
6. Adjuk meg, hogy az egyes osztályokon
hány ember
dolgozik (azt is, ahol 0=senki).
7. Adjuk meg azokat a fizetési
kategóriákat,
amelyekbe beleesik legalább három
olyan dolgozónak a
fizetése, akinek nincs beosztottja.
8. Adjuk meg a legrosszabbul kereső főnök
fizetését, és fizetési
kategóriáját.
9. Adjuk meg, hogy (kerekítve) hány
hónapja
dolgoznak a cégnél azok a dolgozók,
akiknek a
DALLAS-i telephelyű osztályon a legnagyobb a
fizetésük.
10. Adjuk meg azokat a foglalkozásokat, amelyek csak
egyetlen osztályon fordulnak elő,
és adjuk meg
hozzájuk azt az
osztályt is, ahol van ilyen
foglalkozású dolgozó.
2.RÉSZ Témakör: SQL DML, táblák
tartalmának
módosítása: insert, delete,
update,
+ehhez szükséges a tranzakció-kezelés: commit, rollback: SQL09_DML.pdf
FELADATSOR: dolgozo,
osztaly (DML: DELETE, INSERT és UPDATE)
Előkészítés:
Ezekhez a DML feladatokhoz ámenetileg most
megszorítások
(mint
például hivatkozási
épség) megadása
nélkül hozzuk létre a
táblákat.
-- az SQL DML feladatokat egy másodpéldányon végezzük (dolg2, oszt2)
DROP TABLE dolg2;
DROP TABLE oszt2;
CREATE TABLE dolg2 AS SELECT * FROM dolgozo;
CREATE TABLE oszt2 AS SELECT * FROM osztaly;
-- az SQL DML feladatok után kérdezzük
le a módosított tábla tartalmát,
-- majd állítsuk vissza a tábla
eredeti tartalmát a ROLLBACK utasítással!
rollback; -- visszaállítjuk a tábla eredeti tartalmát (a további feladatokhoz)
commit; -- ezzel véglegesítjük a
táblák tartalmát (befejezzük a
tranzakciót)
DELETE
1. Töröljük azokat a
dolgozókat,
akiknek jutaléka NULL.
2. Töröljük azokat a
dolgozókat,
akiknek a belépési dátuma 1982 előtti.
3. Töröljük azokat a
dolgozókat,
akik osztályának telephelye DALLAS.
4. Töröljük azokat a
dolgozókat,
akiknek a fizetése kisebb, mint az
átlagfizetés.
5. Töröljük ki azokat az
osztályokat, akiknek van olyan dolgozója,
aki a 2-es
fizetési
kategóriába esik (vagyis az
alkérdésben adjuk meg
azon osztályok
nevét, amelyeknek
van olyan dolgozója,
aki a 2-es fizetési
kategóriába esik)
6. Töröljük ki azon
osztályokat,
amelyeknek 2 olyan dolgozója van, aki a 2-es
fizetési
kategóriába esik.
INSERT
7. Vigyünk fel egy 'Kovacs' nevű
új
dolgozót a 10-es osztályra a következő
értékekkel: dkod=1,
dnev='Kovacs', oazon=10,
belépés=aktuális dátum,
fizetés=a 10-es
osztály
átlagfizetése. A többi oszop legyen NULL.
8. Több sor felvitele: Hozzunk létre egy
UjOsztaly nevű táblát, amelynek
attribútumai megegyeznek az
Osztály tábla oszlopaival, plusz van
még egy
numerikus típusú
Letszam nevű attribútuma. Ebbe az UjOsztaly
táblába az
insert
utasítás 2.
alakjával (alkérdéssel )
vigyünk fel
új sorokat az osztály és
dolgozó
táblák
aktuális tartalmának
felhasználásával minden
osztály
adatát
kiegészítve az
adott
osztályon dolgozók
létszámával. Azok az
osztályok is
jelenjenek meg ahol nem dolgozik
senki, ott a létszám 0 legyen.
Továbbá
ha vannak olyan dolgozók,
akiknek nincs (nem ismert) az osztályuk,
azok
létszámát egy oazon=0, onev= 'FIKTIV'
és telephely='ISMERETLEN'
adatokkal rendelkező sorba
írjuk be.
UPDATE
9. Növeljük meg a 20-as
osztályon a
dolgozók fizetését 20%-kal.
10. Növeljük meg azok fizetését
500-zal, akik jutaléka NULL vagy
a
fizetésük kisebb az átlagnál.
11. Növeljük meg mindenkinek a
jutalékát a jelenlegi maximális
jutalékkal.
12. Módosítsuk 'Loser'-re a legrosszabbul kereső
dolgozó nevét.
13. Növeljük meg azoknak a dolgozóknak a
jutalékát 3000-rel, akiknek
legalább 2
közvetlen
beosztottjuk van.
Az ismeretlen (NULL)
jutalékot
vegyük úgy, mintha 0 lenne.
14. Növeljük meg azoknak a dolgozóknak a
fizetését a jelenlegi minimális fizetés
5%-kával, akiknek van olyan beosztottja,
aki minimális fizetéssel rendelkezik.
15. Növeljük meg a nem főnökök
fizetését a saját osztályuk
átlagfizetésével.