Lekérdezések
Választó lekérdezések
Tartalmazza/Nem tartalmazza
Előfordulhat olyan feladat, amikor azt kell meghatároznunk, hogy egy mező nem tartalmaz valamit, vagy nem rendelkezik valamilyen tulajdonsággal, stb. Ilyen esetekben legtöbbször allekérdezést kell készítenünk, majd azt felhasználva a feltételben az allekérdezés eredményhalmazát az IN vagy NOT IN kulcsszavak valamelyikével a főlekérdezés megfelelő mezőjéhez kell kötnünk.
Másik eset, amikor olyan rekordokat kell megkeresünk, amelyek egyik mezője üres. Ilyenkor az üres mezőbe az Is NULL feltétel kerül.
Vannak olyan esetek is, amikor célszerű az ilyen típusú feladat megoldására a Nem egyezőket kereső lekérdezés varázslót használni.
OKTV 2004/2005. 3. forduló 5. feladat (Tagnyilvántartás) G részfeladat
FeladatEbben a részfeladatban azt kell megvizsgálnunk, hogy hány olyan budapesti tagja van az Internetfüggők Országos Egyesületének, akiknek az újság mezőjében nem szerepel semmi.
PéldaJavasolt megoldás lépései:
- Hozzunk létre egy lekérdezést Tervező nézetben!
- Mivel létszámot kell számolnunk, ezért szükségünk lesz a Tag táblára. Ezen kívül szükség lesz a Varos táblára is, hiszen a lekérdezés eredményében csak a budapesti tagoknak kell szerepelniük. Ahhoz azonban, hogy a már beállított kapcsolat e két tábla között a lekérdezésben is érvényesüljön, hozzá kell még adnunk a lekérdezéshez az Irszam_varos nevű kapcsolótáblát is.
- Adjuk hozzá a lekérdezéshez a Tag tábla kod és ujsag mezőit, valamint a Varos tábla varosnev mezőjét!
- A következő lépés, hogy megszámoljuk városonként a tagokat. Kattintsunk a szalagon a Tervezés fülön az Összesítés gombra! Ezután a varosnev mező összesítés sorában állítsuk be a Group by záradékot, hiszen városonként számoljuk meg a taglétszámot. Ha ez megvan, akkor a kod mező Összesítés sorában állítsuk be a Count összesítő függvényt!
- Mivel csak a budapesti tagokra vagyunk kíváncsiak, ezért a varosnev mező Feltétel sorába írjuk be, hogy Budapest!
- Most már csak annyit kell tennünk, hogy meghatározzuk azokat a tagokat, akiknek az ujsag mezőjében nem szerepel semmi. Az ujsag mező Feltétel sorába írjuk be az Is NULL feltételt! Fontos, hogy a varosnev mezőre vonatkozó feltétel (Budapest) és az ujsag mezőre vonatkozó feltétel (Is NULL) között logikai ÉS kapcsolat van, tehát a két feltételnek egy sorban kell szerepelnie.
- Ezen kívül még fontos, hogy az ujsag mező Összesítés sorában beállítsuk a Where záradékot. Miért is? A Csoportosítás, összesítő függvények című alfejezetben részletesen tárgyaltuk, hogy a Where záradékot olyan feltételt tartalmazó mezőkre kell alkalmazni, amelyekkel nem csoportosítunk, és nem is tartalmaznak összesítő függvényeket. Mivel az ujsag mező pontosan ilyen, ezért be kell állítani a Where záradékot. Ha mindent jól csináltunk, akkor a Tervező nézetben ezt kell látnunk:
- Zárjuk be a lekérdezést, és mentsük a megadott néven!
OKTV 2007/2008. 2. forduló 8. feladat (Kávé) B részfeladat
FeladatA feladatban azokat a származási helyeket kell lekérdeznünk, amelyekről nem szállítanak Arabica kávét.
MegjegyzésEzt a feladatot kétféleképpen is meg lehet oldani. Meg lehet oldani úgy, hogy az allekérdezést a főlekérdezésbe ágyazva SQL-en írjuk meg (ez esetben a feltételnél használnunk kell a Not In utasítást), vagy pedig külön elkészítjük a QBE rácson az allekérdezést, és használjuk a Nem egyezőket kereső lekérdezés varázslót. Most ez utóbbi megoldást mutatom be részletesen, de a Függelékben megtalálható a másik megoldási mód is.
PéldaJavasolt megoldás:
Megoldási terv:
Két lépésben fogjuk megoldani a feladatot: először elkészítjük az allekérdezést, majd azt felhasználva elkészítjük a végleges megoldást a Nem egyezőket kereső lekérdezés varázsló segítségével.
Javasolt megoldás lépései:
- Hozzunk létre egy új lekérdezést Tervező nézetbe!. Ez lesz a majdani allekérdezésünk.
- Az allekérdezésben gyűjtsük ki azokat a származási helyeket, ahonnan szállítanak Arabica kávét! Ehhez szükségünk lesz a tBabkave táblára – hiszen ebben tároljuk a származási hely azonosítókat – valamint a tFajta táblára is (ebben pedig a fajtanevek vannak tárolva).
- Jelenítsük meg az allekérdezés végeredményében a tBabkave tábla Szarmazas mezőjét és a tFajta tábla Nev mezőjét! Ez utóbbi mező feltételéhez írjuk be, hogy Arabica! Mivel csak a származási azonosítókra van szükségünk, ezért szedjük ki a Nev mező Megjelenítés sorából a pipát! Most az alábbi képet kell látnunk:
- Zárjuk be, és mentsük a lekérdezést B_arabica_segéd néven!
- Kattintsunk a Létrehozás fülön a Lekérdezés varázsló gombra!
- A felugró ablakban válasszuk ki a Nem egyezőket kereső lekérdezés varázslót, majd kattintsunk a Tovább gombra!
- A következő lépésben meg kell adnunk azt a táblát, amiből a végeredményt szeretnénk kilistázni. Ez a tSzarmazas tábla. Jelöljük ki, majd kattintsunk a Tovább gombra!
- Most azt az objektumot kell megadnunk, ami a kapcsolódó rekordokat tartalmazza. Ez a B_arabica_segéd nevű lekérdezés. Jelöljük be a Lekérdezéseket, majd jelöljük ki a B_arabica_segéd nevű lekérdezést, és kattintsunk a Tovább gombra!
- A következő lépésben össze kell kapcsolnunk a két objektumot. Ezt az összekapcsolást a tSzarmazas tábla SzAzonosíto és a B_arabica_segéd lekérdezés Szarmazas mezőin keresztül tudjuk megvalósítani, hiszen ezek a mezők tartalmazzák a származási helyek azonosítóit. Jelöljük ki mindkét mezőt, majd kattintsunk a <=> gombra! Így a két mező megjelent az Egyező mezők sorban. Ha megvagyunk, kattintsunk a Tovább gombra!
- Az utolsó előtti lépésben azt kell eldöntenünk, hogy a lekérdezés végeredményében mely mezők jelenjenek meg. Mivel a származási helyekre vagyunk kíváncsiak, ezért mind a Nev, mind a SzAzonosíto mezők megjelenhetnek a lekérdezés végeredményében. Adjuk hozzá őket a kijelölt mezőkhöz, majd kattintsunk a Tovább gombra!
- Az utolsó lépésben el kell neveznünk a lekérdezést. Legyen a neve B_arabica! Miután begépeltük, kattintsunk a Befejezés gombra, és tekintsük meg munkánk végeredményét!
FeladatTovábbi, hasonló módon megoldható feladatok:
Vissza a tartalomjegyzékhez