Lekérdezések
Választó lekérdezések
Bonyolultabb lekérdezések
Ebben az alfejezetben olyan részfeladatokat ajánlok megoldásra, melyekben az összes ezt megelőző lekérdezési témakör, feladattípus egyszerre megtalálható, továbbá olyan feladatok is szerepelnek itt, amiket egyik korábbi kategóriába sem tudtam besorolni.
OKTV 2005/2006. 3. forduló 10. feladat (Járatok) F részfeladat
FeladatA feladat roppant egyszerű(nek hangzik): ki kell listázni azon járatok azonosítóját, amelyek megállnak Agárdon és Baracskán is.
PéldaJavasolt megoldás:
Megoldási terv:
Egyetlen probléma vetődik fel az egész feladat kapcsán. Hogyan fogalmazzuk meg egy mezőre, hogy megáll a járat Agárdon és Baracskán is? Hiszen ha azt írnánk be Település mező feltételébe, hogy Agárd And Baracska, akkor – teljesen jogosan – a lekérdezés egy üres halmazt adna vissza. Hiszen a Település mezők vagy azt tartalmazzák, hogy Agárd vagy azt, hogy Baracska. De akkor mégis hogyan tudjuk megoldani a feladatot?
A válasz egyszerű: kétszer használjuk fel a Menetrend táblát.
Javasolt megoldás lépései:
- Készítsünk egy lekérdezést Tervező nézetben!
- Adjuk hozzá kétszer a Menetrend táblát a lekérdezéshez!
- Jelenítsük meg a Menetrend tábla Járatazonosító mezőjét, és adjuk hozzá a lekérdezéshez a Menetrend és a Menetrend_1 táblák Település mezőit is!
- Írjuk be a Menetrend tábla Feltétel sorába azt, hogy Agárd, a Menetrend_1 tábláéba pedig azt, hogy Baracska. Váltsunk át Adatlap nézetre!
- Láthatjuk, hogy rengetegszer megkaptuk ugyanazt, sőt, ha az adatbázis tábláiban elkezdünk szétnézni, azt is láthatjuk, hogy olyan járatazonosítók is megjelentek a lekérdezés eredményében, amelyek nem is állnak meg mindkét településen. Például az 1-es és 5-ös számú járatok. Mi lehet ennek az oka? A válasz rendkívül egyszerű: nincsenek összekapcsolva a táblák. És mivel nincsenek összekapcsolva, ezért az adatbázis-kezelő rendszer az egyik tábla minden sorát összepárosította a másik tábla minden sorával, vagyis direktszorzatot képzett. Hogy lehet ezt megszüntetni?
- Kapcsoljuk össze a lekérdezésen belül a Menetrend és a Menetrend_1 táblákat a Járatazonosító mezőkön keresztül!
MegjegyzésEzt az összekapcsolást nevezzük self-joinnak.
- Ha ezután Adatlap nézetre váltunk, láthatjuk, hogy most már csak azok a járatok jelennek meg, amelyeknél egyszerre szerepel Agárd és Baracska is a Település mezőkben. Viszont mivel a feladat csak a járatazonosítókat kérte, ezért a Megjelenítést kapcsoljuk ki a Település mezőkre! Ha mindent jól csináltunk, akkor ezt kell látnunk a Tervező nézetben:
- Mentsük a lekérdezést F néven, és zárjuk is be!
FeladatTovábbi, hasonló módon megoldható feladatok:
Vissza a tartalomjegyzékhez