Amikor lekérdezéseket használ az Accessben, időnként mindössze annyit kell tennie, hogy kiválasztja egy tábla mezőit, alkalmaz esetleg néhány feltételt, majd megtekinti az eredményt. De mit tehet abban a gyakori esetben, ha a használni kívánt adatok egynél több táblában vannak tárolva? Szerencsére hozhat létre olyan lekérdezést, amely több forrásból kombinálja az adatokat. A jelen témakör bemutatja az adatok egynél több táblából való beolvasásának néhány gyakori forgatókönyvét, és ismerteti a követendő eljárást.
Kapcsolódó műveletek
Kapcsolódó táblában lévő adatok használata a lekérdezés eredményének javításához
Előfordulhatnak olyan esetek, amikor a lekérdezni kívánt összes adat kinyerhető egyetlen táblából, de ha egy másik táblából is olvasna be adatokat, azzal hasznosabbá tehetné a lekérdezését. Tegyük fel például, hogy a lekérdezése alkalmazottak azonosítószámainak listáját adja vissza. Világos, hogy sokkal hasznosabb volna, ha a listában az alkalmazottak neve jelenik meg – ezek azonban egy másik táblában találhatók. Ahhoz, hogy meg tudja jeleníteni az alkalmazottak nevét a lekérdezése eredményében, mindkét táblát használnia kell a lekérdezésben.
Elsődleges táblán és kapcsolódó táblán alapuló lekérdezés létrehozása a Lekérdezés varázslóval
-
Győződjön meg róla, hogy a használni kívánt táblákhoz van kapcsolat definiálva a Kapcsolatok ablakban.
Hogyan?
-
Kattintson az Adatbáziseszközök lap Megjelenítés/elrejtés csoportjában a Kapcsolatok gombra.
-
Kattintson a Tervezés lap Kapcsolatok csoportjának Minden kapcsolat gombjára.
-
Keresse meg a táblákat, amelyekhez kapcsolatnak kell definiálva lennie.
-
Ha látja a táblákat a Kapcsolatok ablakban, ellenőrizze, hogy a kapcsolat definiálva van-e.
A kapcsolatot egy vonal ábrázolja, mely összeköti a két tábla egy-egy mezőjét. A kapcsolat vonalára duplán kattintva megtekintheti, hogy a kapcsolat a táblák mely mezőit köti össze.
-
Ha a táblák nem láthatók a Kapcsolatok ablakban, hozzá kell adnia őket.
Kattintson a Tervezés lap Megjelenítés/elrejtés csoportjának Táblanevek gombjára.
Kattintson duplán a megjeleníteni kívánt táblákra, majd kattintson a Bezárás gombra.
-
-
Ha nem látja a táblák közötti kapcsolatot, akkor hozzon létre egyet úgy, hogy az első tábla egyik mezőjét a második tábla egyik mezőjére húzza. A kapcsolat által összekötött mezőknek megegyező adattípusúnak kell lenniük.
Megjegyzés: Hozhat létre kapcsolatot Számláló adattípusú és szám adattípusú mezők között, ha az utóbbi mezőhöz „Hosszú egész” mezőméret van beállítva. Erre gyakran szüksége lehet egy-a-többhöz kapcsolat létrehozása során.
Ekkor megjelenik a Kapcsolatok szerkesztése párbeszédpanel.
-
Kattintson a Létrehozás gombra a kapcsolat létrehozásához.
A kapcsolat létrehozásakor megadható beállításokról további információt a Kapcsolat létrehozása, szerkesztése és törlése című témakörben találhat.
-
Zárja be a Kapcsolatok ablakot.
-
-
A Létrehozás lap Lekérdezések csoportjában kattintson a Lekérdezés varázsló menügombra.
-
Az Új lekérdezés párbeszédpanelen válassza az Egyszerű lekérdezés varázsló elemet, majd kattintson az OK gombra.
-
A Táblák/lekérdezések kombinált listában kattintson arra a táblára, amely a lekérdezni kívánt fő adatokat tartalmazza.
-
Az Elérhető mezők listában kattintson a lekérdezésben szerepeltetni kívánt első mezőre, majd a jobbra mutató egyszeres nyíl gombjára kattintva helyezze át a mezőt a Kijelölt mezők listába. Végezze el ugyanezt a lekérdezésben szerepeltetni kívánt összes többi mező esetében is. Ezek lehetnek olyan mezők, amelyekre szüksége van a lekérdezés kimenetében, illetve olyan mezők, amelyeket a kimenet sorainak bizonyos feltétel szerinti korlátozására kíván használni.
-
A Táblák/lekérdezések kombinált listában kattintson arra a táblára, amely a lekérdezés eredményének javításához használandó kapcsolódó adatokat tartalmazza.
-
Adja hozzá a lekérdezési eredmény javításához használni kívánt mezőket a Kijelölt mezők listához, majd kattintson a Tovább gombra.
-
A Részletes vagy összesítő jelentést szeretne? területen válassza a Részletes vagy az Összesítés lehetőséget.
Ha nem szeretne végrehajtani egyetlen aggregátumfüggvényt sem (Sum, Avg, Min, Max, Count, StDev vagy Var), válassza a részletes lekérdezést. Ha szeretné, hogy a lekérdezése aggregátumfüggvényt hajtson végre, válassza az összesítő lekérdezést. A kívánt beállítás kiválasztása után kattintson a Tovább gombra.
-
Kattintson a Befejezés gombra az eredmény megtekintéséhez.
Példa a Northwind mintaadatbázis alapján
Az alábbi példában a Lekérdezés varázslóval olyan lekérdezést hozunk létre, amely megjeleníti a rendelések listáját, az egyes rendelések szállítási költségét, valamint az egyes rendeléseket teljesítő alkalmazott nevét.
Megjegyzés: Az alábbi példa során módosítani fogjuk a Northwind mintaadatbázist. A példa követéséhez célszerű lehet másolatot készíteni a Northwind mintaadatbázisról, és azon elvégezni a módosításokat.
Lekérdezés létrehozása a Lekérdezés varázslóval
-
Nyissa meg a Northwind mintaadatbázist. Zárja be a bejelentkezési űrlapot.
-
A Létrehozás lap Lekérdezések csoportjában kattintson a Lekérdezés varázsló menügombra.
-
Az Új lekérdezés párbeszédpanelen válassza az Egyszerű lekérdezés varázsló elemet, majd kattintson az OK gombra.
-
A Táblák/lekérdezések kombinált listában kattintson a Tábla: Rendelések táblára.
-
Az Elérhető mezők területen kattintson duplán a Rendeléskód mezőre a Kijelölt mezők listába való áthelyezéshez. Kattintson duplán a Szállítási költség mezőre a Kijelölt mezők listába való áthelyezéshez.
-
A Táblák/lekérdezések kombinált listában kattintson a Tábla: Alkalmazottak táblára.
-
Az Elérhető mezők területen kattintson duplán a Vezetéknév mezőre a Kijelölt mezők listába való áthelyezéshez. Kattintson duplán az Utónév mezőre a Kijelölt mezők listába való áthelyezéshez. Kattintson a Tovább gombra.
-
Mivel az összes rendelésről készítünk listát, a részletes lekérdezést válassza. Ha a szállítási költséget összesíteni szeretné alkalmazottanként, vagy más aggregátumfüggvényt kíván végrehajtani, akkor használhat összesítő lekérdezést. Kattintson a Részletes (az összes rekord összes mezőjét megjeleníti) választógombra, majd kattintson a Tovább gombra.
-
Kattintson a Befejezés gombra az eredmény megtekintéséhez.
A lekérdezés visszaadja a rendelések listáját, melyben az egyes rendeléseknél látni fogja a szállítási költséget, illetve a rendelést teljesítő alkalmazott nevét.
Két tábla adatainak csatlakoztatása egy harmadik táblán keresztüli kapcsolatuk alapján
Gyakran megesik, hogy két tábla adatai egy harmadik táblán keresztül vannak kapcsolatban egymással. Ennek az oka az lehet, hogy az első két tábla adatai között több-a-többhöz kapcsolat van. Jó adatbázis-tervezési gyakorlat ilyenkor felbontani a két tábla közötti több-a-többhöz kapcsolatot kettő egy-a-többhöz kapcsolatra egy harmadik tábla bevonásával. Ezt úgy végezheti el, hogy létrehoz egy harmadik táblát, egy úgynevezett illesztőtáblát, mely tartalmaz egy-egy elsődleges kulcsot és idegen kulcsot a másik kettő táblához. Ekkor egy-a-többhöz kapcsolat jön létre az illesztőtáblában lévő egyes idegen kulcsok, illetve a másik két tábla egyikének vonatkozó elsődleges kulcsa között. Ilyen esetekben mind a három táblát szerepeltetnie kell a lekérdezésben még akkor is, ha csak kettőből szeretne adatokat kivonni.
Választó lekérdezés létrehozása több-a-többhöz kapcsolatú táblák használatával
-
A Létrehozás lap Lekérdezések csoportjában kattintson a Lekérdezéstervező menügombra.
-
Kattintson duplán a lekérdezésben szerepeltetni kívánt adatokat tartalmazó két táblára, valamint az őket összekötő elágazási táblára, majd kattintson a Bezárás gombra.
Ekkor mindhárom tábla megjelenik a lekérdezéstervező munkaterületén, a megfelelő mezőknél összekapcsolva.
-
Kattintson duplán a lekérdezés eredményében használni kívánt egyes mezőkre. Ezután minden egyes mező megjelenik a lekérdezés tervezőrácsán.
-
A lekérdezés tervezőrácsán használja a Feltétel sort a mezőfeltétel megadásához. Ha a lekérdezés eredményeiben való megjelenítés nélkül szeretne mezőfeltételt használni, törölje a jelet a mező sorában lévő Megjelenítés jelölőnégyzetből.
-
Ha az eredményt rendezni szeretné egy mező értéke alapján, válassza a lekérdezés tervezőrácsán a mezőhöz tartozó Rendezés sorban a Növekvő vagy a Csökkenő beállítást (a rekordok rendezésének kívánt iránya szerint).
-
A Tervezés lap Eredmények csoportjában kattintson a Futtatás gombra.
Az Access ekkor megjeleníti a lekérdezés kimenetét Adatlap nézetben.
Példa a Northwind mintaadatbázis alapján
Megjegyzés: Az alábbi példa során módosítani fogjuk a Northwind mintaadatbázist. A példa követéséhez célszerű lehet másolatot készíteni a Northwind mintaadatbázisról, és azon elvégezni a módosításokat.
Tegyük fel, hogy új üzleti lehetőség kínálkozik: egy miskolci szállító megtalálta az Ön webhelyét, és szeretne üzleti kapcsolatba lépni Önnel. A szállító cége azonban csak Miskolcon és Nyíregyházán működik. Minden olyan élelmiszeripari kategóriában kínál a szállító terméket, amellyel Ön kereskedik. A vállalat azonban szeretne garanciát Öntől arra nézve, hogy kellőképpen nagy potenciális értékesítési lehetőséget tud nyújtani nekik: minimum évi 500 ezer forint összegű értékesítést szeretnének. Képes megfelelni a szállító piaci elvárásainak?
A kérdés megválaszolásához szükséges adatok két helyen találhatók: a „Vevők” táblában és a „Rendelés részletei” táblában. Ezeket a táblákat a „Rendelések” tábla köti össze egymással. A táblák közötti kapcsolatok már definiálva vannak. A Rendelések táblában minden egyes rendeléshez csak egy vevő tartozhat, mely a Vevők táblához kapcsolódik a Vevőkód mezőn keresztül. A Rendelés részletei tábla minden egyes rekordja egyetlen rendeléshez kapcsolódik a Rendelések táblában, a Rendeléskód mezőn keresztül. Így egy adott ügyfélhez tartozhat több rendelés, az egyes rendelésekhez pedig tartozhat több rendelési részlet.
A jelen példában egy olyan kereszttáblás lekérdezést fogunk létrehozni, amely megjeleníti összesítve az éves értékesítést Miskolcra és Nyíregyházára korlátozva.
A lekérdezés létrehozása Tervező nézetben
-
Nyissa meg a Northwind adatbázist. Zárja be a bejelentkezési űrlapot.
-
A Létrehozás lap Lekérdezések csoportjában kattintson a Lekérdezéstervező menügombra.
-
Kattintson duplán a Vevők, a Rendelések, majd aRendelés részletei elemre.
Ekkor mindhárom tábla megjelenik a lekérdezéstervező munkaterületén.
-
A Vevők táblában kattintson duplán a Város mezőre, ezzel hozzáadva azt a lekérdezés tervezőrácsához.
-
A lekérdezés tervezőrácsában, a Város oszlop Feltétel sorába írja be a következőt: In ("Miskolc";"Nyíregyháza"). Ez a feltétel a lekérdezés eredményét azokra a rekordokra korlátozza, amelyeknél a vevő a megadott két városban található.
-
A „Rendelés részletei” táblában kattintson duplán az „Egységár” és a „Lefoglalás dátuma” mezőre.
A program ekkor hozzáadja ezeket a mezőket a lekérdezés tervezőrácsához.
-
A lekérdezés tervezőrácsának Lefoglalás dátuma oszlopában válassza a Mező mezőt. Cserélje le a [Lefoglalás dátuma] szöveget a következőre: Év: Format([Lefoglalás dátuma];"yyyy"). Ez létrehoz egy Év mezőaliast, mely lehetővé teszi, hogy a „Lefoglalás dátuma” mezőnek csak az évet kifejező részét használjuk.
-
A lekérdezés tervezőrácsának Egységár oszlopában válassza a Mező mezőt. Cserélje le az [Egységár] szöveget a következőre: Értékesítés: [Rendelés részletei].[Egységár]*[Mennyiség]-[Rendelés részletei].[Egységár]*[Mennyiség]*[Engedmény]. Ez létrehozza az Értékesítés mezőaliast, mely kiszámítja az értékesítést minden egyes rekordhoz.
-
A Tervezés lap Lekérdezés típusa csoportjában kattintson a Kereszttáblás gombra.
Ekkor megjelenik a lekérdezés tervezőrácsában két új sor: Összesítés és Kereszttábla.
-
Kattintson a lekérdezés tervezőrácsában a Város oszlop Kereszttábla mezőjébe, és válassza a Sorfejléc beállítást.
Ez a beállítás a város értékét sorfejlécekként jeleníti meg (vagyis a lekérdezés egy sort ad vissza minden egyes városhoz).
-
Kattintson az Év oszlopban a Kereszttábla mezőbe, és válassza az Oszlopfejléc beállítást.
Ez a beállítás az év értékét oszlopfejlécekként jeleníti meg (vagyis a lekérdezés egy oszlopot ad vissza minden egyes évhez).
-
Kattintson az Értékesítés oszlopban a Kereszttábla mezőbe, és válassza az Érték beállítást.
Ez a beállítás az értékesítési értékeket a sorok és az oszlopok kereszteződésénél jeleníti meg (vagyis a lekérdezés egy értékesítési értéket ad vissza a városok és évek minden egyes kombinációjához).
-
Kattintson az Értékesítés oszlopban az Összesítés mezőbe, és válassza a Sum beállítást.
Ennek a beállításnak a hatására a lekérdezés összegzi az oszlopban lévő értékeket.
A másik két oszlop Összesítés mezőjében meghagyhatja az alapértelmezett Group By értéket, mert ezeknél az oszlopoknál minden egyes értéket szeretne látni az összesített érték helyett.
-
A Tervezés lap Eredmények csoportjában kattintson a Futtatás gombra.
Az így létrehozott lekérdezés visszaadja a teljes éves értékesítési összeget Miskolcra és Nyíregyházára korlátozva.
Két hasonló tábla összes rekordjának megtekintése
Időnként előfordulhat, hogy két olyan tábla adatait kell egyesítenie, amelyeknek a struktúrája azonos, de eltérő adatbázisban találhatók. Vegyük például a következő esetet.
Tegyük fel, hogy elemzőként diákok adataival dolgozik. Egy új adatmegosztási kezdeményezést hoz létre a saját iskolája és egy másik iskola között annak érdekében, hogy mindkét iskola javítani tudja a tantervét. A vizsgálni kívánt kérdések közül néhány esetében célszerűbb volna, ha a két iskola rekordjaival egyszerre tudna dolgozni, nem pedig külön-külön.
Importálhatná a másik iskola adatait új táblákba az adatbázisában, de ebben az esetben a másik iskola adatainak változásai nem jelennének meg az Ön adatbázisában. Jobb megoldás, ha csatolja a másik iskola tábláit, majd olyan lekérdezéseket hoz létre, amelyek a futtatáskor egyesítik az adatokat. E megoldás esetében egyetlen egységként tudja elemezni az adatokat ahelyett, hogy két elemzést hajtana végre, majd a két elemzés eredményét egyként próbálná értelmezni.
Ahhoz, hogy két, azonos struktúrájú tábla összes rekordjával tudjon dolgozni, egy egyesítő lekérdezésre lesz szüksége.
Az egyesítő lekérdezések nem jeleníthetők meg Tervező nézetben. SQL-parancsokkal tudja létrehozni őket, melyeket az SQL nézet objektumlapon tud beírni.
Egyesítő lekérdezés létrehozása két tábla használatával
-
A Létrehozás lap Lekérdezések csoportjában kattintson a Lekérdezéstervező menügombra.
-
A Tervezés lap Lekérdezés típusa csoportjában kattintson az Egyesítő gombra.
A lekérdezés ekkor átvált Tervező nézetről SQL-nézetre. Ezen a ponton az SQL-nézetlap üres.
-
Írja be az SQL-nézetben a SELECT kulcsszót, majd az első tábla azon mezőinek listáját, amelyeket szerepeltetni kíván a lekérdezésben. A mezőneveket szögletes zárójelbe kell foglalnia, és vesszővel kell elválasztania egymástól. Ha végzett a mezőnevek beírásával, nyomja le az ENTER billentyűt. A kurzor ekkor egy sorral lejjebb ugrik az SQL-nézetben.
-
Írja be a FROM kulcsszót, majd a lekérdezésben használni kívánt első tábla nevét. Nyomja le az ENTER billentyűt.
-
Ha meg szeretne adni egy feltételt egy mezőhöz az első táblából, írja be a WHERE kifejezést, majd a mező nevét, egy összehasonlító operátort (általában egyenlőségjelet (=) és a feltételt. A WHERE záradék végéhez további feltételeket is hozzáadhat az AND kulcsszóval és az első feltételhez használt szintaxissal; például WHERE [ClassLevel]="100" AND [CreditHours]>2. Ha befejezte a feltételek megadását, nyomja le az ENTER billentyűt.
-
Írja be a UNION kulcsszót, majd nyomja le az ENTER billentyűt.
-
Írja be a SELECT kulcsszót, majd a második tábla azon mezőinek listáját, amelyeket szerepeltetni kíván a lekérdezésben. Ugyanazokat a mezőket foglalja bele ebből a táblából, amelyeket az elsőből belefoglalt, és kövesse ugyanazt a sorrendet. A mezőneveket szögletes zárójelbe kell foglalnia, és vesszővel kell elválasztania egymástól. Ha végzett a mezőnevek beírásával, nyomja le az ENTER billentyűt.
-
Írja be a FROM kulcsszót, majd a lekérdezésben használni kívánt második tábla nevét. Nyomja le az ENTER billentyűt.
-
Ha szeretné, adjon hozzá egy WHERE záradékot a 6. lépésben ismertetett módon.
-
Írjon be egy pontosvesszőt (;) a lekérdezés végének jelzéséhez.
-
A Tervezés lap Eredmények csoportjában kattintson a Futtatás gombra.
Ekkor a lekérdezés eredménye megjelenik Adatlap nézetben.