adatbázis-kezelés
DESCRIPTION
Adatbázis-kezelés. Adatbázis-kezelés. Középszint: 1-2 tábla SQL-nyelv és lekérdező-rács használata Űrlap és jelentés készítés Emelt szint: több tábla (kapcsolatok) több elméleti háttér több alkotó jellegű probléma. Lekérdezés típusok: Választó Frissítő Törlő Táblakészítő - PowerPoint PPT PresentationTRANSCRIPT
Adatbázis-kezelés
Adatbázis-kezelés
• Középszint:– 1-2 tábla– SQL-nyelv és lekérdező-rács használata– Űrlap és jelentés készítés
• Emelt szint:– több tábla (kapcsolatok)– több elméleti háttér– több alkotó jellegű probléma
• Lekérdezés típusok:– Választó– Frissítő– Törlő– Táblakészítő– Hozzáfűző– Kereszttáblás
• Függvények: alapfüggvények 4-5 fajta
Árpád-ház
• Milyen, ha csak elméleti feladat?– Egy, kevés rekordú adattábla– SQL lekérdezés– 2 értelmezés– 2 alkotás
• Érettségin gyakorlat, gépes megoldás– Milyen szoftver?– Emelt szintű, de a feladat nehézsége közepes.– Feladatgyűjteményben sok pontból áll.
Megoldás előkészítése
• Adatbázis létrehozása
• Adattábla importálása (szoftver függet-lenség biztosítása!)
• Kulcs beállítása
• Mezőtípusok vizsgálata
• Lekérdezések mentése adott néven (!)
• Űrlap és jelentés készítés
Endre
SELECT Gyermek, Meddig-Mettől AS [Uralkodás ideje]
FROM Család
WHERE Gyermek like '*Endre*';
Szűrés és számított értékek
Gyerekek
SELECT Szülő, Count(Gyermek) AS [Gyerekek száma]
FROM Család
GROUP BY Szülő;
Csoport alkotás
HosszSorrend
SELECT Gyermek, Meddig-Mettől AS [Uralkodás ideje]
FROM Család
WHERE Király
ORDER BY Meddig-Mettől DESC;
Rendezés számított értékek alapján
Béla apja
SELECT Szülő
FROM Család
WHERE Gyermek='IV. Béla';
István nagyapja
SELECT Szülő AS Nagyszülő
FROM Család
WHERE Gyermek=(SELECT Szülő
FROM Család
WHERE Gyermek='IV. István');
Allekérdezés
Királyok száma
SELECT Count(Gyermek) AS [Királyok száma]
FROM Család
WHERE ( (Mettől<1000) and (Meddig>=1000)) or ((Mettől<=1099) and ((Meddig>1099))
or (Mettől>=1000) and (Meddig<=1099))
and Király;
Többféle megoldás van
Géza utániak
SELECT Count(Gyermek) AS [királyok száma]
FROM Család
WHERE Mettől>=(SELECT Meddig
FROM Család
WHERE Gyermek='II. Géza')
and Király;
Összetett szűrés
8. és 9. feladat
• Űrlap
• Jelentés készítés– Varázsló használata kényelmes– Oldal beállítások (fejléc, lábléc tartalma)– Tulajdonság változtatás
Szoftverek alkalmasak-e?
Párbajtőr feladat
• közép szintű feladat
• adatbevitel, illetve konvertálás
• a választó lekérdezések dominálnak
• függvények használata
• csoportosítás
• 2 jelentéskészítés
• standard feladatsor
Párbajtőr pontozási útmutató
Adatbázis létrehozása 1 pont
Adattábla importálása 1 pont
Kulcs beállítása 1 pont
A: SELECT Név, Év, Helyszín
FROM Egyéni
WHERE Helyezés=1
ORDER BY Év;
1 pont
B:
SELECT Év, Helyszín, Helyezés
FROM Egyéni
WHERE Név='Kulcsár Győző';
1 pont
C:
SELECT Név, Helyezés
FROM Egyéni
WHERE Helyszín='Atlanta'
ORDER BY Helyezés;
1 pont
D:
SELECT Count(*) AS [Érmek száma]
FROM Egyéni
WHERE Ország='MA';
1+1 pont
E:
SELECT Név, Count(*) AS [Helyezések száma]
FROM Egyéni
WHERE Ország='MA'
GROUP BY Név;
1+1 pont
F:SELECT Név, Count(*) AS [Aranyérmek
száma]FROM EgyéniWHERE Helyezés=1GROUP BY NévHAVING Count(*)>1;
1+1 pont
G:
SELECT Ország, Count(*) AS [Aranyérmek száma]
FROM Egyéni
WHERE Helyezés=1
GROUP BY Ország;
1+1 pont
H:
SELECT Helyszín, Count(Helyszín)/3 AS [Olimpiák száma]
FROM Egyéni
GROUP BY Helyszín
HAVING Count(Helyszín)>3;
1+1 pont
I: jelentés 1 pontJ:SELECT Ország, Helyezés, Count(*) AS Darab
FROM EgyéniGROUP BY Ország, Helyezés
ORDER BY Ország;
1+1 pont
J: jelentés 1 pont
Összesen: 20 pont
Verseny feladat
• Emelt szint
• Adatbázis létrehozás, táblák definiálása
• Adatfeltöltés idő szükséglet
• Lekérdezésekhez melyik tábla kell?
• Kapcsolatok
• Függvények használata
• Csoportosítás és allekérdezés használata
• Adatbázis létrehozása 1 pont
• Versenyző tábla: mezőnevek és adattípusok 1 pont
• Eredmény tábla: mezőnevek és adattípusok 1 pont
• Iskola tábla: mezőnevek és adattípusok 1 pont
• Versenyző tábla adatainak felvitele 1 pont
• Eredmény tábla adatainak felvitele 1 pont
• Iskola tábla adatainak felvitele1 pont
A:
SELECT Versenyző.Név, sum(eredmény.pontszám) AS összpontszám
FROM Versenyző, Eredmény
WHERE Versenyző.VersenyzőAZ=Eredmény.VersenyzőAZ
GROUP BY Versenyző.Név
ORDER BY sum(eredmény.pontszám);
5 pont
B:
SELECT FelSorszám, Max(Pontszám) AS [Maximális pontszám]
FROM Eredmény
GROUP BY FelSorszám;
2 pont
C:
SELECT Iskola.Iskolanév, Iskola.Város, Count(Versenyző.IskolaAZ) AS [Indulók száma]
FROM Versenyző, Iskola
WHERE Iskola.IskolaAZ = Versenyző.IskolaAZ
GROUP BY Versenyző.IskolaAZ, Iskola.Iskolanév, Iskola.Város;
2 pont
D:
SELECT Versenyző.Név
FROM Versenyző, Eredmény
WHERE (Versenyző.VersenyzőAZ = Eredmény.VersenyzőAZ) and (Pontszám=0)
GROUP BY Versenyző.Név
ORDER BY Versenyző.Név;
3 pont
E:
SELECT DISTINCT Versenyző.Név, Iskola.Iskolanév, Iskola.Város, Iskola.Utca, Iskola.Házszám
FROM Versenyző, Eredmény, Iskola
WHERE (Versenyző.VersenyzőAZ = Eredmény.VersenyzőAZ) and (Iskola.IskolaAZ=Versenyző.IskolaAZ) and (Pontszám>10);
2 pont
F:SELECT Név, Iskola.Iskolanév
FROM Versenyző, Iskola, EredményWHERE (Versenyző.IskolaAZ=Iskola.IskolaAZ) and (Versenyző.VersenyzőAZ = Eredmény.VersenyzőAZ) and(Iskola.Város<>'Budapest') and (FelSorszám='I') andPontszám= ( SELECT Max(Pontszám)
FROM Versenyző, Eredmény,IskolaWHERE (Versenyző.VersenyzőAZ =
Eredmény.VersenyzőAZ) andVersenyző.IskolaAZ=Iskola.IskolaAZ) and (FelSorszám='I') and (Iskola.Város<>'Budapest')); 5 pont
• A jelentés a versenyzők összpontszámairól 2pont
• Jelentést a versenyzők adatairól iskolánként 2 pont
Összesen: 30 pont
Királyok
• Középszintű feladat
• Hasonlít az Árpád-ház feladathoz
• Egyszerűbb lekérdezések a fele
• Függvény, allekérdezés van
• Csoport alkotás nincs
• Jelentéskészítés
Névsor
SELECT *
FROM Uralkodó
ORDER BY Név
2 pont
Lászlók
SELECT Név, Végső-Kezdő AS [Uralkodásuk ideje]
FROM Uralkodó
WHERE Név Like '*László*' And
Név Not Like '*Ulászló*‘
3 pont
HosszSor
SELECT Név
FROM Uralkodó
ORDER BY Végső-Kezdő DESC
2 pont
Istvánok száma
SELECT Count(*) AS [Istvánok száma]
FROM Uralkodó
WHERE Név like '*István*‘
2 pont
Budai udvar
SELECT Név
FROM Uralkodó
WHERE (Kezdő<= 1347) and
(1347 <= Végső)
2 pont
Királyok száma
SELECT Count(*) AS [Királyok száma]
FROM Uralkodó
WHERE ((Kezdő<1300) and (Végső>=1300)) or
((Kezdő<=1399) and (Végső>1399)) or
((Kezdő>=1300) and (Végső<=1399))
3 pont
Mátyás előtt
SELECT Count(*) AS [Királyok száma Mátyás előtt]
FROM Uralkodó
WHERE Végső < (SELECT Kezdő
FROM Uralkodó
WHERE Név='Mátyás')
4 pont
• 10 évnél többet uralkodók jelentés
• Lászlók jelentés
2 pont
Nobel-díj
• középszintű
• nagyon jó ötlet
• importálásnál már van probléma (,)
• nevek alakja szokatlan
• QBE-ráccsal könnyen megoldható feladatok
magyar:
SELECT *
FROM nobel
WHERE ország='H';
Bárány:
SELECT díj, ország
FROM nobel
WHERE név like '*Bárány*';
Wigner:
SELECT díj, évszám, ország
FROM nobel
WHERE név like '*Wigner*';
NL:
SELECT név
FROM nobel
WHERE ország="NL";
dijak:
SELECT TOP 1 díj, count(*)
FROM nobel
GROUP BY díj
ORDER BY 2 DESC;
hiany:
SELECT évszám, díj
FROM nobel
WHERE név = '-';
egyszer:SELECT ország, count(*)FROM nobelGROUP BY országHAVING count(*)=1;rangsor:SELECT ország, count(*)FROM nobelWHERE ország not like '-'GROUP BY országORDER BY 2 DESC;
1939:
SELECT név, díj, évszám
FROM nobel
WHERE évszám between 1901 and 1939
ORDER BY évszám, díj;
Összegzés
Van:szűrés
rendezés
csoportosítás
csoport szűrés
függvény
jelentés
Nincs:allekérdezés
űrlap
Próba dolgozatok javítása!
•részpontszámok meghatározása
•eredmények összehasonlítása
Termékek
• középszint ↔ több tábla • A kapcsolat megadás Access specifikus
↓ A lekérdezésben úgyis szükség van rá,
szűréssel is jó• Táblák létrehozása és importálása• Kulcs mező megadás• Mező formátum állítása
Megoldás
A:
SELECT Terméknév, Szín, Méret, Ár, Raktárkészlet
FROM Termékek
WHERE Méret="L" AND Raktárkészlet>=5
ORDER BY Ár DESC
2 pont
B:
SELECT Kategóriák.Kategórianév, Avg(Termékek.Ár) AS AvgOfÁr
FROM Kategóriák INNER JOIN Termékek ON Kategóriák.Kategóriakód = Termékek.Kategóriakód
GROUP BY Kategóriák.Kategórianév
2 pont
C:SELECT Termékek.Terméknév, Kategóriák.Kategórianév,
Termékek.Szín, Termékek.Méret, [Termékek]![Ár]*[Termékek]![Raktárkészlet]
FROM Kategóriák INNER JOIN Termékek ON Kategóriák.Kategóriakód = Termékek.Kategóriakód
WHERE (((Kategóriák.Kategórianév)="pamutnadrág" Or (Kategóriák.Kategórianév)="vászonnadrág"))
ORDER BY Termékek.Terméknév3 pont
D:SELECT Termékek.Terméknév,
Kategóriák.Kategórianév, Termékek.Méret, Termékek.Ár, Termékek.Raktárkészlet
FROM Kategóriák INNER JOIN Termékek ON Kategóriák.Kategóriakód = Termékek.Kategóriakód
WHERE Kategóriák.Kategórianév Like "*top" AND Termékek.Raktárkészlet>0
2 pont
E:SELECT Kategóriák.Kategórianév,
Sum(Termékek.Raktárkészlet) AS SumOfRaktárkészlet
FROM Kategóriák INNER JOIN Termékek ON Kategóriák.Kategóriakód = Termékek.Kategóriakód
GROUP BY Kategóriák.KategórianévHAVING Kategóriák.Kategórianév="kötött pulóver„
2 pont
F:
SELECT Terméknév, Raktárkészlet, Ár
FROM Termékek
WHERE Ár Between 5000 And 10000
ORDER BY Raktárkészlet, Terméknév
2 pont
• G: űrlap
• H: jelentés
Űrlap- és jelentés-varázslóval megoldhatók
Számonkért fogalmak, műveletek
• A: szűrés• B: kapcsolat, csoport alkotás• C: számított érték, rendezés• D: szűrés• E: csoport szűrés és függvény használat• F: több szintű rendezés• G: űrlap• H: jelentés, rendezett lista
Próba dolgozatok javítása!
•részpontszámok meghatározása
•eredmények összehasonlítása
Vízi sporteszközök kölcsönzése
• emelt szint
• feladattípus, szerkezet, szöveg jó
• pontozás részletes, de– hiányzik:
• megoldás adatbázis• SQL kód a pontozáshoz
↓
elég-e a leírás?
Tanfolyam (feladat problémái)
középszintű feladat
1. A 4 adattáblát létre kell hoznia• sok idő a gépelés• Irányítószám táblát nem használjuk• Dolgozó.Irányítószám mező felesleges• több szóból álló mezőnevek kerülendők• típus nem egyértelmű több mezőnél
2. Elsődleges kulcs nem értelemszerű
3. Űrlapokat és jelentéseket milyen néven mentse?
4. Nyomógomb létrehozása:• nem középszint („egyszerű űrlap”)• nem minden adatbázis-kezelő ismeri• pozícionáló nyomógomb jelentése• ha bele is tesszük, utolsó legyen• 3. és 4. feladat azonos típusú