Ha több adatforrást is belefoglal egy Access-lekérdezésbe, illesztésekkel korlátozza a megtekinteni kívánt rekordokat az adatforrások egymáshoz való kötődése alapján. Az illesztésekkel a két adatforrásból származó rekordokat is kombinálhatja, így a forrásokból származó rekordpárok egy-egy rekordot alkotnak a lekérdezés eredményeiben.
Ez a cikk az illesztések különböző típusait ismerteti, és bemutatja, hogyan használhatja őket egy lekérdezésben. Alapértelmezés szerint a rendszer automatikusan létrehozza az illesztéseket, ha már van kapcsolat a lekérdezésben használt két adatforrás között. Az illesztés akkor is létrejön, ha vannak olyan mezők, amelyek egyértelműen egymással felelnek meg. Az automatikusan létrehozott illesztéseket törölheti. Ez a cikk alapvető információkat tartalmaz a táblakapcsolatokról, többek között arról, hogyan hozhat létre egyet.
Megjegyzés: A lekérdezéseket ugyanúgy csatlakoztathatja, mint a táblákat, és mindkettőt összekapcsolhatja.
A témakör tartalma
Áttekintés
Az adatbázisok olyan adattáblák gyűjteményei, amelyek logikai kapcsolatokat hordoznak egymással. A táblákat kapcsolatok használatával kapcsolhatja össze olyan mezők alapján, amelyek közösek. A táblák tetszőleges számú kapcsolat részei lehetnek, de minden kapcsolatnak pontosan két táblája van. A lekérdezésekben a kapcsolatot illesztés jelöli.
Amikor táblákat ad hozzá egy lekérdezéshez, Access olyan illesztéseket hoz létre, amelyek a táblák között definiált kapcsolatokon alapulnak. A lekérdezésekben manuálisan is létrehozhat illesztéseket, még akkor is, ha azok nem a már definiált kapcsolatokat jelölik. Ha más lekérdezéseket használ (táblák helyett vagy mellett) egy lekérdezés adatforrásaként, akkor illesztéseket hozhat létre a forrás lekérdezések, valamint a lekérdezések és az adatforrásként használt táblák között.
Az illesztések a lekérdezési feltételekhez hasonlóan viselkednek, mivel olyan szabályokat hoznak létre, amelyeknek az adatoknak meg kell egyezniük ahhoz, hogy szerepeljenek a lekérdezési műveletekben. A feltételektől eltérően az illesztések azt is megadják, hogy az illesztési feltételeknek megfelelő sorpárok egyetlen sort alkotnak a rekordhalmazban.
Az illesztéseknek négy alapvető típusa van: belső illesztések, külső illesztések, keresztillesztések és egyenlőtlen illesztések. Ez a cikk az egyes használható illesztések típusait, az egyes típusok használatának okát és az illesztések létrehozását ismerteti.
Az illesztésekkel lekérdezhető, hogy milyen kapcsolatok vannak a táblákkal: azt jelzi, hogy a két forrás adatai hogyan kombinálhatók a közös adatértékek alapján. Az alábbi ábrán egy lekérdezés tervező nézetében látható illesztés látható, amelyben az illesztés tulajdonságai egy párbeszédpanelen nyílnak meg:
A táblák közötti vonal az illesztésnek felel meg. Az illesztésre duplán kattintva nyissa meg az Illesztés tulajdonságai párbeszédpanelt (az ábrán látható), és tekintse át vagy módosítsa az illesztéseket.
Az illesztések néha iránytűk. A párbeszédpanel ezen területén láthatja, hogy melyik tábla van az illesztésben, és mely mezőket használja a táblák összekapcsolásához.
Ez a terület határozza meg az illesztés típusát: az 1. lehetőség egy belső illesztés, a 2 egy bal oldali külső illesztés, a 3 pedig egy jobb oldali külső illesztés.
Mindkét tábla mezői használhatók, és mindegyikből megjelennek az adott tevékenységre vonatkozó adatok. A belső illesztésben nincs más adat. Külső illesztés esetén az egyik tábla nem kapcsolódó rekordjai is szerepelnek a lekérdezés eredményei között.
Illesztések típusai
Az illesztéseknek négy alapvető típusa van: belső illesztések, külső illesztések, keresztillesztések és egyenlőtlen illesztések. A keresztillesztések és az egyenlőtlen illesztések speciális illesztéstípusok, és ritkán használják őket, de ismernie kell őket, hogy teljes mértékben tisztában legyen az illesztések működésével.
Belső illesztések: csak a két tábla összekapcsolt adatai
A belső illesztés olyan, amelyben az Access csak akkor tartalmaz adatokat egy táblából, ha a kapcsolódó táblában megfelelő adatok találhatók, és fordítva. A legtöbb esetben belső illesztéseket fog használni. Amikor létrehoz egy illesztést, és nem adja meg, hogy milyen típusú illesztésről van szó, az Access azt feltételezi, hogy belső illesztést szeretne. A belső illesztések azért hasznosak, mert lehetővé teszik, hogy két forrásból származó adatokat kombináljon a megosztott értékek alapján, így csak akkor jelennek meg az adatok, ha teljes kép áll rendelkezésre.
Külső illesztések: az összes kapcsolódó adat megfelelően kombinálva van, valamint egy tábla összes többi rekordja
A külső illesztés olyan, mint egy belső illesztés, de hozzáadja az egyik tábla fennmaradó sorait. A külső illesztések iránytűk: a bal oldali külső illesztés tartalmazza a bal oldali tábla összes rekordját – az illesztés első tábláját –, a jobb oldali külső illesztés pedig a jobb oldali tábla összes rekordját – az illesztés második tábláját.
Teljes külső illesztések: az összes adat, ahol lehetséges, kombinálva
Egyes rendszerekben a külső illesztés mindkét tábla összes sorát magában foglalhatja, és a sorok össze vannak kapcsolva, amikor azok megegyeznek. Ezt teljes külső illesztésnek nevezzük, és az Access kifejezetten nem támogatja őket. Ugyanakkor keresztillesztés és feltételek használatával is elérheti ugyanezt a hatást.
Keresztillesztés: az összes adat, minden lehetséges módon kombinálva
A keresztillesztés általában azzal a mellékhatással jár, hogy két táblát ad hozzá egy lekérdezéshez, majd elfelejti összekapcsolni őket. Az Access ezt úgy értelmezi, hogy az egyik tábla összes rekordját és a másik tábla összes rekordját – a rekordok összes lehetséges kombinációját – együtt szeretné látni. Mivel nem lehet adatokat kombinálni, az ilyen típusú illesztés ritkán hoz hasznos eredményeket. Vannak azonban olyan esetek, amikor a keresztillesztés csak az, amire szüksége van.
Nem egyenlő illesztések: mint egy normál illesztés, de más összehasonlítással kombinálja a sorokat
Az egyenlőtlen illesztések az egyenlőségjeltől (=) eltérő operátort használnak az értékek összehasonlításához, valamint annak meghatározásához, hogy az adatok kombinálhatók-e és hogyan. Az egyenlőtlen illesztések nem támogatottak explicit módon, de keresztillesztés és feltételek használatával ugyanezt a hatást érheti el.
Azon sorok megjelenítése, ahol közös érték található mindkét illesztett táblában
Ha csak azokat a sorokat szeretné megjeleníteni, amelyek az illesztett mezőben egyező értékekkel rendelkeznek, akkor belső illesztést használ. Az Access automatikusan belső illesztéseket hoz létre.
A belső illesztés az illesztések legáltalánosabb típusa. Azt jelzik a lekérdezésnek, hogy az egyik illesztett tábla sorai a másik tábla sorainak felelnek meg az illesztett mezők adatai alapján. Belső illesztéssel rendelkező lekérdezés futtatásakor csak azok a sorok lesznek belefoglalva a lekérdezési műveletekbe, amelyekben közös érték található mindkét illesztett táblában.
Hogyan használ belső illesztés?
A legtöbb esetben nem kell semmit tennie a belső illesztés használatához. Ha a lekérdezéshez hozzáadott táblák már rendelkeznek kapcsolatokkal, az Access automatikusan belső illesztést hoz létre a kapcsolódó táblák egyes párjai között a táblák hozzáadásakor. Ha a hivatkozási integritás aktív, az Access az illesztés vonala fölött egy „1” felirattal jelzi, hogy a tábla az egy-a-többhöz kapcsolat kapcsolat „egy” oldalához tartozik, és egy végtelen jellel (∞) azt, hogy a tábla a „több” oldalhoz tartozik.
Még ha még nem hozott létre kapcsolatokat, az Access automatikusan belső illesztéseket hoz létre, ha két táblát ad hozzá egy lekérdezéshez, és ezek a táblák azonos vagy kompatibilis adattípusú mezővel rendelkeznek, és az illesztési mezők egyike egy elsődleges kulcs. Az "egy" és a "több" szimbólum ebben az esetben nem jelenik meg, mert a hivatkozási integritás nincs kényszerítve.
Ha lekérdezéseket ad hozzá a lekérdezéshez, és nem hozott létre kapcsolatokat ezek között a lekérdezések között, az Access nem hoz létre automatikusan belső illesztéseket a lekérdezések, illetve a lekérdezések és táblák között. Általában önnek kell létrehoznia őket. Belső illesztés létrehozásához húzzon egy mezőt az egyik adatforrásból egy másik adatforrás egyik mezőjébe. Az Access a két mezőt összekapcsoló vonallal jelzi, hogy az illesztés létrejött.
BELSŐ illesztés SQL-szintaxisa
A belső illesztések a FROM záradékban vannak megadva az SQL-ben, az alábbiak szerint:
FROM tábla1 INNER JOIN tábla2 ON tábla1.field1 compare table2.mező2
Az INNER JOIN művelet részei a következők:
Rész |
Leírás |
tábla1, tábla2 |
Annak a két táblának a neve, amelyeknek a rekordjait egyesíti. |
mező1, mező2 |
Az egyesítendő mezők neve. Ha nem numerikusak, a mezőknek azonos adattípus kell lenniük, és ugyanolyan típusú adatokat kell tartalmazniuk, de nem kell ugyanazzal a névvel rendelkezniük. |
összehasonlítás |
Bármely relációs összehasonlító operátor: "=", "<", ">", "<=", ">=" vagy "<>". |
A belső illesztés szintaxisáról az INNER JOIN Művelet című témakörben talál további információt.
Az egyik táblázat összes sorának és a másik táblázat megfelelő sorainak megjelenítése
A külső illesztések azt jelzik a lekérdezésnek, hogy bár az illesztés mindkét oldalán található sorok egy része pontosan egyezik, a lekérdezésnek tartalmaznia kell az egyik tábla összes sorát, valamint a másik tábla azon sorait, amelyek közös értékkel rendelkeznek az illesztés mindkét oldalán.
A külső illesztések lehetnek bal oldali külső illesztések, vagy lehetnek jobb oldali külső illesztések. A bal oldali külső illesztésben a lekérdezés az SQL utasítás FROM záradékának első táblájának összes sorát tartalmazza, és csak a másik tábla azon sorait, ahol az illesztési mező mindkét táblában közös értékeket tartalmaz. A jobb oldali külső illesztésben a lekérdezés tartalmazza az SQL utasítás FROM záradékának második táblájának összes sorát, és csak a másik tábla azon sorait, ahol az illesztési mező mindkét táblában közös értékeket tartalmaz.
Megjegyzés: Egyszerűen megállapíthatja, hogy melyik tábla a bal oldali vagy a jobb oldali tábla egy adott illesztésben. Ehhez kattintson duplán az illesztésre, majd keresse meg az Illesztés tulajdonságai párbeszédpanelt. Átválthat SQL-nézetre is, majd megvizsgálhatja a FROM záradékot.
Mivel a külső illesztés egyik oldalán lévő sorok némelyike nem tartalmaz megfelelő sorokat a másik táblából, a másik tábla lekérdezési eredményeiben visszaadott mezők némelyike üres lesz, ha a sorok nem felelnek meg.
Hogyan külső illesztést használ?
Külső illesztést egy meglévő belső illesztés módosításával hozhat létre. Ha nem létezik belső illesztés, hozzon létre egyet, majd módosítsa külső illesztésre.
Belső illesztés módosítása külső illesztésre
-
Lekérdezéstervező nézetben kattintson duplán a módosítani kívánt illesztésre.
Megjelenik az Illesztési tulajdonságok párbeszédpanel.
-
Az Illesztés tulajdonságai párbeszédpanelen jegyezze fel a 2 . és a 3. lehetőség mellett felsorolt lehetőségeket.
-
Kattintson a használni kívánt beállításra, majd az OK gombra.
-
Az Access megjeleníti az illesztést, és egy olyan nyilat jelenít meg, amely az adatforrásból mutat, ahol az adatforrásba minden sor bele lesz foglalva, és csak az illesztési feltételnek megfelelő sorok lesznek belefoglalva.
Nem egyértelmű külső illesztések
Ha egy LEFT JOIN és INNER JOIN függvényt tartalmazó lekérdezést hoz létre, előfordulhat, hogy az Access nem tudja meghatározni, hogy melyik illesztési műveletet kell először végrehajtania. Mivel az eredmények eltérőek attól függően, hogy a bal oldali illesztés vagy a belső illesztés van-e először végrehajtva, az Access hibaüzenetet jelenít meg:
A hiba kijavításához módosítania kell a lekérdezést, hogy egyértelmű legyen, melyik illesztés legyen először végrehajtva.
Külső illesztés SQL-szintaxisa
A külső illesztések a FROM záradékban vannak megadva az SQL-ben, az alábbiak szerint:
FROM tábla1 [ LEFT | JOBB ] JOIN tábla2
ON table1.field1 compare table2.field2A LEFT JOIN és RIGHT JOIN műveletek a következő részekből állnak:
Rész |
Leírás |
tábla1, tábla2 |
Annak a két táblának a neve, amelyeknek a rekordjait egyesíti. |
mező1, mező2 |
Az egyesítendő mezők neve. A mezőknek azonos adattípus kell lenniük, és ugyanolyan típusú adatokat kell tartalmazniuk, de nem kell ugyanazzal a névvel rendelkezniük. |
összehasonlítás |
Bármely relációs összehasonlító operátor: "=", "<", ">", "<=", ">=" vagy "<>". |
A külső illesztés szintaxisáról további információt a LEFT JOIN, RIGHT JOIN Operations című témakörben talál.
Mindkét tábla összes sorának megjelenítése, és összekapcsolásuk olyan helyre, ahol egy közös érték létezik
Ha két tábla összes sorát meg szeretné jeleníteni, és közös értékek alapján szeretné összekapcsolni őket, akkor teljes külső illesztést használ. Az Access kifejezetten nem támogatja a teljes külső illesztéseket, de egy egyesítő lekérdezéssel ugyanezt a hatást érheti el. Az alábbi eljárás ismerteti ennek módját, de ha további információra van szüksége az egyesítő lekérdezésekről, tekintse meg a Lásd még című szakaszt.
Ha egyesítő lekérdezést szeretne használni teljes külső illesztés végrehajtásához:
-
Hozzon létre egy bal oldali külső illesztést tartalmazó lekérdezést a teljes külső illesztéshez használni kívánt mezőben.
-
A Kezdőlap lap Nézetek csoportjában kattintson a Nézet gombra, majd az SQL nézet parancsra.
-
Az SQL-kód másolásához nyomja le a CTRL+C billentyűkombinációt.
-
Törölje a FROM záradék végén található pontosvesszőt, majd nyomja le az ENTER billentyűt.
-
Írja be a UNION kulcsszót, majd nyomja le az ENTER billentyűt.
Megjegyzés: Ne használja az ALL kulcsszót, ha egyesítő lekérdezéssel teljes külső illesztést hajt végre.
-
A CTRL+V billentyűkombinációt lenyomva illessze be a 3. lépésben kimásolt SQL-kódot.
-
A beillesztett kódban módosítsa a LEFT JOIN beállítást RIGHT JOIN (JOBB CSATLAKOZÁS) állapotra.
-
Törölje a második FROM záradék végén lévő pontosvesszőt, majd nyomja le az ENTER billentyűt.
-
Adjon hozzá egy WHERE záradékot, amely meghatározza, hogy az illesztési mező értéke NULL a FROM záradékban (a bal oldali táblában) szereplő első táblában.
Ha például a FROM záradék a következő:
FROM Products RIGHT JOIN [Order Details]
ON Products.ID = [Order Details].[Product ID]A következő WHERE záradékot kell hozzáadnia:
WHERE Products.ID IS NULL
-
Írjon be egy pontosvesszőt (;) a WHERE záradék végén az egyesítő lekérdezés végét jelzi.
-
A Tervezés lap Eredmények csoportjában kattintson a Futtatás gombra.
Keresztillesztések
A keresztillesztések abban különböznek a belső és a külső illesztésektől, hogy nincsenek explicit módon ábrázolva a Access. Keresztillesztés esetén az egyik tábla minden sora össze lesz vonva egy másik tábla minden sorával, ami keresztterméknek vagy descartes-szorzatnak nevezik. Amikor olyan lekérdezést futtat, amelynek táblái nincsenek explicit módon összekapcsolva, a kereszttermék lesz az eredmény. A keresztillesztések általában nem szándékosak, de vannak olyan esetek, amikor hasznosak lehetnek.
Miért használnék keresztillesztéseket?
Ha két tábla vagy lekérdezés sorainak minden lehetséges kombinációját meg szeretné vizsgálni, használjon keresztillesztéseket. Tegyük fel például, hogy a vállalkozása látványos évet töltött, és fontolgatja, hogy visszatérítéseket ad az ügyfeleinek. Létrehozhat egy lekérdezést, amely összegzi az egyes ügyfelek vásárlásait, létrehozhat egy kis táblát, amely több lehetséges visszatérítési százalékot tartalmaz, és kombinálhatja a kettőt egy másik lekérdezésben, amely keresztillesztéseket hajt végre. Végül egy lekérdezés jelenik meg, amely az egyes ügyfelekre vonatkozó hipotetikus visszatérítéseket jeleníti meg.
Hogyan használjon keresztillesztéseket?
A keresztillesztés akkor jön létre, amikor táblákat vagy lekérdezéseket tartalmaz a lekérdezésben, és nem hoz létre legalább egy explicit illesztés minden táblához vagy lekérdezéshez. Az Access minden olyan táblából vagy lekérdezésből egyesít minden sort, amely nincs explicit módon csatlakoztatva egy másik táblához vagy lekérdezéshez az eredmények minden más sorához. Vegye figyelembe az előző bekezdésben szereplő visszatérítési forgatókönyvet. Tegyük fel, hogy 91 ügyfele van, és öt lehetséges visszatérítési százalékot szeretne megvizsgálni. A keresztillesztés 455 sort állít elő (a 91 és az 5 szorzata).
Képzelheti, hogy a nem szándékos keresztillesztések hatalmas számú sort hozhatnak létre a lekérdezési eredményekben. Ráadásul ezek az eredmények általában értelmetlenek, mert ha nem szeretné az összes sort minden második sorral kombinálni, akkor az eredményekben megjelenő összes sor nagy részének nincs értelme. Végül a nem szándékos keresztillesztéseket használó lekérdezések futtatása nagyon hosszú időt vehet igénybe.
1. A bekarikázandó mezőket egymáshoz kell illeszteni.
1. Jegyezze fel a nagyon sok rekordot.
1. Vegye figyelembe, hogy a rekordok száma sokkal kisebb.
Táblák összekapcsolása mezőértékek egyenlőtlensége alapján
Az illesztéseknek nem kell az illesztett mezők egyenértékűségén alapulnia. Az illesztés bármely összehasonlító operátoron alapulhat, például nagyobb, mint (>), kisebb, mint (<), vagy nem egyenlő (<>). A nem egyenértékűségen alapuló illesztéseket egyenlőtlen illesztéseknek nevezzük.
Ha két adatforrás sorait szeretné kombinálni a nem egyenlő mezőértékek alapján, akkor egyenlőtlen illesztéseket kell használnia. Az egyenlőtlen illesztések általában a nagyobb mint (>), kisebb, mint (<), nagyobb vagy egyenlő (>=), vagy kisebb, mint (<=) összehasonlító operátorokon. A nem egyenlő (<>) operátoron alapuló egyenlőtlen illesztések majdnem annyi sort adhatnak vissza, mint a keresztillesztések, és az eredmények nehezen értelmezhetők.
Hogyan használjon egyenlőtlen illesztéseket?
Az egyenlőtlen illesztések Tervező nézetben nem támogatottak. Ha használni szeretné őket, ezt az SQL-nézet használatával kell megtennie. Tervező nézetben azonban létrehozhat illesztéseket, átválthat SQL-nézetre, megkeresheti az egyenlő (=) összehasonlító operátort, és a használni kívánt operátorra módosíthatja. Ezt követően csak akkor nyithatja meg újra a lekérdezést Tervező nézetben, ha az összehasonlító operátort először visszaváltja egyenlőre (=) SQL-nézetben.
Csatlakozás törlése
Ha az Access automatikusan létrehoz egy nem kívánt illesztést, vagy ha véletlenül hoz létre illesztést – például két eltérő adattípusú mező közötti illesztést –, törölheti az illesztést.
-
A lekérdezés tervezőrácsán kattintson az eltávolítani kívánt illesztésre.
-
Nyomja le a DELETE billentyűt.
– vagy –
-
A lekérdezés tervezőrácsán kattintson a jobb gombbal az eltávolítani kívánt illesztésre, majd kattintson a Törlés parancsra.