1.2. SQL feladatok

1.2.1. DDL (Data Definition Language) parancsok

A feladatokat az alábbi modellnek megfelelően kell megoldani.

Magyarázat: a projektek egy havi időtartamúak, általában minden hónapban újraindulnak, így a dátum mindig az adott hónap első napja. A projektben a Tbér az egy havi teljesítménybér, az aktív mező értéke I vagy N lehet. Ha I, akkor fel lehet iratkozni rá.

1.11. ábra - Relációs modell

Relációs modell

  1. Hozza létre a táblákat!

    A projekt táblában a tbér értéke nem érheti el a 30000 Ft-ot, az aktív mezőbe pedig csak az I és az N betűket lehessen bevinni. A Dolgozó táblában a kor 18 és 62 év közötti lehet, az alapbér pedig nem lehet 85000-nél kevesebb. A Résztvesz táblában írjuk elő, hogy egy dolgozó egy projektre egy adott hónapban csak egyszer jelentkezhessen.

  2. A vezetés úgy dönt, hogy  ne a dátumot tároljunk a Résztvesz táblában, hanem számként az évet és a hónapot. Törljük a táblát, és hozzuk létre ennek megfelelően. Alakítsuk úgy ki a hónap mezőt, hogy csak a hónapoknak megfelelő számok kerülhessenek bele.

    1.12. ábra - Relációs modell

    Relációs modell

  3. Írjunk elő olyan megszorítást, hogy az év 2011 és 2020 között lehessen!

  4. Miután megoldottuk, újabb vezetői döntés: az év inkább 2010 és 2020 között lehessen!

  5. Írjon elő olyan feltételt, hogy egy projektre maximum négyen jelentkezhessenek.

  6. Írja elő azt a feltételt is, hogy csak aktív projektre lehessen jelentkezni!

1.2.2. DML (Data Manipulation Language) parancsok

  1. Vigye fel az alábbi adatokat az osztály táblába:

    b01-Bolt, b02-Bérügy, s01-Számlázás, s02-Szállítás, r01-Raktár.

  2. Mi az eredménye a következő parancsoknak? Működnek? Hibásak? Miért?

    1. insert into Osztály values('b01', 'Beszerzés');

    2. insert into Osztály values('b03');

    3. insert into Osztály values('b03',’’);

    4. insert into Osztály values('b03', null);

    5. insert into Osztály (Kód) values('b04');

  3. Vigyen be minden táblába néhány rekordot!

  4. Kiadjuk egymás után a következő három parancsot:

    1. insert into Dolgozó values('d66', 'Barna Barna', null, 'számlázó', 31, 180000, 's01');

    2. insert into Dolgozó (Kód, Név, Beosztás, Kor, Alapbér, Oszt) values('d67', 'Fehér Hannibál', 'számlázó', 31, 180000, 's01');

    3. update dolgozó set Város='Miskolc' where Város is null;

    Kérdések:

    1. Az update parancs hatására mindkét rekordban megváltozik a város Miskolcra?

    2. Hogyan lehet a d25 és a d32 közötti kódú rekordokban kijavítani a várost Miskolcra?

    3. Hogyan lehet kitörölni Kék Alma rekordjából a várost?

    4. Hogyan lehet évváltáskor mindekinél a kort megnövelni 1-el?

    5. Mindig, minden rekordra működik az előző parancs?

    6. Hogyan lehet kitörölni Kék Alma rekordját?

    7. Bármikor ki lehet törölni Kék Almát?

1.2.3. DQL (Data Query Language) parancsok

  1. Adja meg a következő lekérdezéseket megvalósító SQL parancsokat!

    1. A nem Béla keresztnevű raktárosok vagy eladók neve

    2. Hány olyan dolgozó van, akinek a kódjában a középső karakter 2-es?

    3. A 2010 3. negyedévében futó projektek neve (egy név csak egyszer szerepeljen!)

    4. Osztályok és dolgozóik neve, abc sorrendben

    5. A 04-re vagy 07-re végződő kódú 30-as korú dolgozók neve, alapbére, alapbér szerinti csökkenő sorrendben

  2. Adja meg a következő lekérdezéseket megvalósító SQL parancsokat!

    1. A bérügy dolgozóinak neve, éves alapfizetése

    2. Az összes különböző beosztás kiírása (csak létező beosztások!)

    3. A raktáros beosztásúak átlag alapbére

    4. A nem miskolci dolgozók száma, városonként csoportosítva

    5. A legmagasabb alapbérű dolgozó(k) neve, alapbére

  3. Mi az eredménye a következő SQL parancsoknak?

    1. Select osztály.név, avg(alapbér) from osztály, dolgozó where oszt=Osztály.kód group by osztály.név order by avg(alapbér);

    2. select dolgozó.név from dolgozó, résztvesz, projekt where dolg=dolgozó.kód and proj=projekt.kód and projekt.név='Fásítás';

    3. select név from dolgozó where név not in(select dolgozó.név from dolgozó, résztvesz, projekt where dolg=dolgozó.kód and proj=projekt.kód and projekt.név='Fásítás');

    4. select osztály.név, projekt.név from osztály, dolgozó, résztvesz, projekt where oszt=osztály.kód and dolg=dolgozó.kód and proj=projekt.kód and év=2010 and hónap=12 group by osztály.név, projekt.név;

    5. Select dolgozó.név, sum(tbér)+sum(alapbér)/count(alapbér) from dolgozó, résztvesz, projekt where dolg=dolgozó.kód and proj=projekt.kód and év=2010 and hónap=12 group by dolgozó.név;

  4. Adja meg a következő lekérdezéseket megvalósító SQL parancsokat!

    1. Azon osztályok neve és létszáma, ahol 10-nél kevesebben dolgoznak

    2. A legmagasabb átlagos alapbérű osztály neve, és átlag alapbére

    3. Az egyes osztályokon hány 300000 Ft-nál többet kereső személy van

    4. Az egyes projektekre hányszor jelentkeztek (kellenek azok a projektek is, amelyekre még sosem jelentkeztek!)

    5. Kék Alma az egyes projektekre hányszor jelentkezett (kellenek azok a projektek is, amelyekre még sosem jelentkezett!)

    6. Ki hány projektekre jelentkezett már (azok neve is kell, akik még nem jelentkeztek sosem projektre!)

    7. Az egyes osztályokról hányszor jelentkeztek már projektre (azon osztályok neve is kell, ahonnan még sosem jelentkeztek projektre!)

1.2.4. DCL (Data Control Language) parancsok

  1. Adja meg a szükséges SQL parancsokat!

    1. Engedélyezze Péter5-nek, hogy lekérdezzen a dolgozó táblából.

    2. Engedélyezze mindenkinek a lekérdezést a dolgozó táblából.

    3. Engedélyezze a beszúrást és a módosítást Péter5-nek a projekt és a résztvesz táblára.

    4. Vonja vissza a beszúrás jogot a projekt tábla esetén Péter5-től.

    5. Tiltsa le Péter5 minden jogát a résztvesz táblával kapcsolatban.

    6. Engedélyezze Péter5-nek, hogy lekérdezzen a résztvesz táblából.