Amikor több adatforrást használ egy Access-lekérdezésben, illesztésekkel korlátozhatja a megjeleníteni kívánt rekordok számát az adatforrások egymáshoz való viszonya alapján. Az illesztésekkel egyesítheti a két adatforrás rekordjait is, hogy a forrásokból származó rekordok mindegyike egy rekorddá váljon a lekérdezés eredményeiben.
Ez a cikk ismerteti az illesztések különböző típusait, és megmutatja, hogyan használhatók a lekérdezésekben. Alapértelmezés szerint automatikusan létrejön egy illesztés, ha már van kapcsolat a lekérdezésben használt két adatforrás között. Akkor is létrejön illesztés, ha vannak olyan mezők, amelyek egyértelműen megfelelnek egymásnak. Az automatikusan létrehozott illesztések törölhetők. Ez a cikk alapvető információkat tartalmaz a táblák közötti kapcsolatokról, beleértve a létrehozásukat is.
Megjegyzés
A lekérdezések ugyanúgy illeszthetők, mint a táblák illesztése, de mindkettő egymáshoz illeszthető.
A témakör tartalma
- Áttekintés
- Az illesztések típusai
- Olyan sorok megjelenítése, amelyeknek mindkét illesztett táblájában ugyanaz az érték
- Az egyik tábla összes sorának és a másik táblázat megfelelő sorainak megjelenítése
- Mindkét tábla összes sorának megjelenítése, és összekapcsolása közös értékek megléténél
- Keresztillesztések
- Táblázatok összekapcsolása a mezőértékek egyenlőtlenségének alapján
- Illesztés törlése
Áttekintés
Az adatbázis egymással logikai kapcsolatban álló adattáblák gyűjteménye. Kapcsolatok használatával a táblákat a közös mezők alapján kötheti össze. Egy tábla számos kapcsolat része lehet, de minden kapcsolatban pontosan két tábla van. A lekérdezésekben a kapcsolatot illesztés jelöli.
Amikor táblákat vesz fel egy lekérdezésbe, az Access a táblák között definiált kapcsolatokon alapuló illesztéseket hoz létre. Manuálisan is létrehozhat illesztéseket a lekérdezésekben, még akkor is, ha azok nem már definiált kapcsolatokat jelölnek. Ha más lekérdezéseket használ (táblák helyett vagy mellett) egy lekérdezés adatforrásaként, illesztéseket hozhat létre a forráslekérdezések között, valamint a lekérdezések és az adatforrásként használt táblák között is.
Az illesztések a lekérdezési feltételekhez hasonlóan működnek, ugyanis olyan szabályokat hoznak létre, amelyekkel 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 meghatározzák, hogy az illesztési feltételeknek megfelelő minden sorpár egyetlen sort alkot a rekordhalmazban.
Az illesztéseknek négy alapvető típusa létezik: belső illesztés, külső illesztés, keresztillesztés és nem egyenlőlő illesztés. Ez a cikk bemutatja a használható illesztési típusokat, az egyes típusok használatának okait, valamint az illesztések létrehozásának módját.
Az illesztések olyanok a lekérdezésekhez, amiket a táblák kapcsolatai jelentenek: annak jelzése, hogy két forrás adatai hogyan kombinálhatók a közös adatértékek alapján. Az alábbi ábra szemlélteti az illesztést a lekérdezés Tervező nézetében, az illesztés párbeszédpanelen megnyitott tulajdonságaival:
Ez a táblák közötti vonal jelöli az illesztést. Az illesztésre duplán kattintva megnyithatja az Illesztési tulajdonságok párbeszédpanelt (lásd az ábrát), és áttekintheti vagy módosíthatja az illesztést.
Az illesztések néha irányítottak. A párbeszédpanelnek ezen területén láthatja, hogy melyik tábla melyik az illesztésben, és mely mezőket használja a táblák illesztéséhez.
Ez a terület határozza meg az illesztés típusát: az 1. lehetőség egy belső illesztés, a 2. lehetőség a bal oldali külső illesztés, a 3. lehetőség pedig jobb oldali külső illesztés.
Mindkét tábla mezői használhatók, és az adott tevékenységhez kapcsolódó adatok mindkét táblából megjelennek. Belső illesztésnél más adatok nincsenek belefoglalva. Külső illesztés esetén az egyik tábla nem kapcsolódó rekordjai is megjelennek a lekérdezés eredményei között.
Az illesztések típusai
Az illesztéseknek négy alapvető típusa létezik: belső illesztés, külső illesztés, keresztillesztés és nem egyenlőlő illesztés. A keresztillesztések és az egyenlőtlen illesztések ritkán, speciális illesztési típusok, de érdemes tudnia ezekről az illesztések működésének teljes megértéséhez.
Belső illesztések: csak a kapcsolódó adatok a két táblából kombinálva
A belső illesztés olyan művelet, amelyben az Access csak akkor vesz fel adatokat egy táblából, ha a kapcsolódó táblában vannak megfelelő adatok, és fordítva. Az esetek többségében belső illesztéseket használnak. Ha illesztést hoz létre, és nem adja meg az illesztés típusát, az Access feltételezi, hogy belső illesztést szeretne létrehozni. A belső illesztések hasznosak, mert lehetővé teszik két forrás adatainak egyesítését közös értékek alapján, így csak akkor láthatja az adatokat, ha teljes képet adunk.
Külső illesztések: az összes kapcsolódó adat helyesen egyesítve, valamint az összes többi rekord egyetlen táblából
A külső illesztés olyan, mint a belső illesztés, de a többi sort hozzáadja az egyik táblából. A külső illesztések irányítottak: a bal oldali külső illesztés a bal oldali tábla – az illesztés első táblája – összes rekordját tartalmazza, a jobb oldali külső illesztés pedig a jobb oldali tábla – az illesztés második táblájának – összes rekordját.
Teljes külső illesztések: az összes adat, ahol lehetséges kombinálva
Bizonyos rendszerekben a külső illesztés mindkét tábla összes sorát magában foglalhatja, és a sorokat összevonhatja, ha azok megfelelnek. Ezt teljes külső illesztésnek nevezik, és az Access nem támogatja kifejezetten ezeket. Ugyanazt a hatást érheti el azonban keresztillesztéssel és feltételekkel is.
Keresztillesztések: az összes adat, minden lehetséges módon kombinálva
Az esetek többségében a keresztillesztés annak a mellékhatása, ha két táblát hozzáad egy lekérdezéshez, majd elfelejti őket összekapcsolni. Az Access ezt úgy értelmezi, hogy az egyik tábla minden rekordját a másik tábla összes rekordjával együtt szeretné megjeleníteni – a rekordok minden lehetséges kombinációját. Mivel az adatok nem egyesíthetők, az ilyen típusú illesztés ritkán hoz hasznos eredményt. Vannak azonban olyan esetek, amikor a keresztillesztésre van szükség.
Nem egyenlő illesztések: hasonlítanak a normál illesztésre, de a sorok összevonásához más összehasonlítást használ
Az egyenlőtlen illesztések az egyenlőségjeltől (=) eltérő operátort használnak az értékek összehasonlításához, és annak meghatározásához, hogy egyesíteni kell-e az adatokat, és ha igen, hogyan kell egyesíteni az adatokat. Az egyenlőtlen illesztések nem támogatottak kifejezetten, de keresztillesztéssel és feltételek használatával elérheti ugyanazt a hatást.
Olyan sorok megjelenítése, amelyeknek mindkét illesztett táblájában ugyanaz az érték
Ha csak azokat a sorokat szeretné megjeleníteni, amelyeknek az illesztési mezőjében egyező értékek vannak, használjon belső illesztést. Az Access automatikusan hozza létre a belső illesztéseket.
A belső illesztés az illesztések legáltalánosabb típusa. Azt jelzik a lekérdezésnek, hogy az illesztett táblák egyikének sorai az illesztett mezők adatai alapján a másik tábla sorainak felelnek meg. Amikor egy belső illesztést tartalmazó lekérdezést futtat, csak azok a sorok fognak szerepelni a lekérdezési műveletben, amelyeknek mindkét illesztett táblájában van közös értéke.
Hogyan belső illesztést használok?
A belső illesztés használatához legtöbbször nincs teendő. Ha a lekérdezésben szereplő táblák között már van kapcsolat, akkor az Access a táblák hozzáadásakor automatikusan létrehoz egy belső illesztést minden kapcsolódó táblapár között. Ha a hivatkozási integritás megőrzése engedélyezve van, az Access az illesztés vonala fölött egy egyessel ("1") jelzi, hogy melyik tábla van az egy-a-többhöz kapcsolat "egy" oldalán, és egy végtelen szimbólummal (∞) jelzi, hogy melyik tábla van a "több" oldalon.
Még ha nem is hozott létre kapcsolatokat, az Access automatikusan belső illesztéseket hoz létre, ha Ön két táblát vesz fel egy lekérdezésbe, és ezek a táblák mindegyike rendelkezik azonos vagy kompatibilis adattípusú mezővel, és az illesztések egyik mezője az elsődleges kulcs. Az "egy" és a "több" szimbólum ebben az esetben nem jelenik meg, mert a hivatkozási integritás megőrzése nem érvényes.
Ha a lekérdezésbe felvett lekérdezéseket, és nem hozott létre közöttük kapcsolatokat, az Access nem hoz automatikusan létre belső illesztést a lekérdezések között vagy a lekérdezések és a táblák között. Általában saját maga hozza létre őket. Belső illesztést úgy hozhat létre, hogy a mezőt az egyik adatforrásból egy másik adatforrás egyik mezőjére húzza. Az Access a két mezőt összekapcsoló vonallal jelzi, hogy az illesztés létrejött.
SQL-szintaxis belső illesztéshez
A belső illesztések az SQL-ben a FROM záradékban adhatók meg az alábbiak szerint:
FROM table1 INNER JOIN table2 ON table1. mező1 összehasonlítja a 2. táblát. 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 a mezők nem numerikusak, a mezőknek ugyanolyan adattípusúaknak kell lenniük, és ugyanolyan jellegű adatokat kell tartalmazniuk, de a nevük lehet különböző. |
| összehasonlítás | Bármely relációs összehasonlító operátor: "=", "", "=", ">=" vagy "<>".<>< |
A belső illesztés szintaxisáról további információt az INNER JOIN művelet című témakörben talál.
Az egyik tábla ö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 lévő sorok némelyike pontosan megfelel, a lekérdezésnek tartalmaznia kell az egyik tábla összes sorát, valamint a másik tábla azon sorait is, amelyeknek az illesztés mindkét oldalán ugyanaz az értékük.
A külső illesztések lehetnek bal oldali külső vagy jobb oldali külső illesztések. Bal oldali külső illesztés esetén a lekérdezés az SQL-utasítás FROM záradékában szereplő első tábla összes sorát tartalmazza, és a másik táblának csak azokat a sorait, ahol az illesztő mező mindkét tábla közös értékeit tartalmazza. Jobb oldali külső illesztés esetén a lekérdezés az SQL-utasításban megadott második tábla összes sorát tartalmazza, és a másik táblának csak azokat a sorait, ahol az illesztőmező mindkét tábla közös értékeit tartalmazza.
Megjegyzés
Könnyen megállapíthatja, hogy melyik tábla a bal oldali vagy a jobb oldali tábla egy adott illesztésben, ha duplán kattint az illesztésre, majd megnézi az Illesztési tulajdonságok párbeszédpanelt. Átválthat SQL nézetre is, ahol megvizsgálhatja a FROM záradékot.
Mivel a külső illesztés egyik oldalán lévő sorok némelyikéhez nem tartoznak megfelelő sorok a másik táblából, a másik táblából származó lekérdezési eredményekben visszaadott mezők némelyike üres lesz, ha a sorok nem felelnek meg az igényeinek.
Hogyan külső illesztést használok?
Külső illesztést egy meglévő belső illesztés módosításával hozhat létre. Ha nincs belső illesztés, hozzon létre egyet, majd módosítsa külső illesztéssé.
Belső illesztés átalakítása külső illesztéssé
- A lekérdezés Tervező nézetében kattintson duplán a módosítani kívánt illesztésre.
Megjelenik az Illesztési tulajdonságok párbeszédpanel. - Az Illesztési tulajdonságok 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 nyilat jelenít meg, amely az adatforrásból mutat, ahol az összes sor az adatforrásba kerül, ahol csak az illesztési feltételnek megfelelő sorok fognak szerepelni.
Ambiguous outer joins
Ha olyan lekérdezést hoz létre, amely LEFT JOIN és INNER JOIN műveletet tartalmaz, előfordulhat, hogy az Access nem tudja megállapítani, hogy melyik illesztési műveletet hajtsa végre először. Mivel az eredmények eltérőek attól függően, hogy a bal oldali illesztést vagy a belső illesztést hajtja végre először, az Access a következő hibaüzenetet jeleníti meg:
A hiba kijavításához módosítania kell a lekérdezést úgy, hogy egyértelmű legyen, melyik illesztést kell először végrehajtani.
Külső illesztés SQL-szintaxisa
A külső illesztések az SQL FROM záradékában adhatók meg az alábbiak szerint:
FROM tábla1 [ LEFT | RIGHT ] JOIN tábla2
ON tábla1.mező1 hasonlít tábla2.mező2
A 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 ugyanolyan adattípusúaknak kell lenniük, és ugyanolyan jellegű adatokat kell tartalmazniuk, de a nevük lehet különböző. |
| ö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 műveletek témakörében talál.
Mindkét tábla összes sorának megjelenítése, és összekapcsolása közös értékek megléténél
Ha két táblázat összes sorát meg szeretné jeleníteni, és közös értékek alapján szeretné összekapcsolni őket, akkor teljes külső illesztést kell használnia. Az Access nem támogatja explicit módon a teljes külső illesztéseket, de ugyanez a hatás elérhető egy egyesítő lekérdezéssel. A következő eljárás ismerteti ennek módját, ha azonban az egyesítő lekérdezésekkel kapcsolatban további információra van szüksége, tanulmányozza a Lásd még című szakaszt.
Teljes külső illesztés végrehajtása egyesítő lekérdezéssel:
Hozzon létre egy olyan lekérdezést, amelynek bal oldali külső illesztése van a teljes külső illesztéshez használni kívánt mezőn.
A Kezdőlap lap Nézetek csoportjában kattintson a Nézet gombra, majd az SQL nézet parancsra.
Másolja az SQL-kódot a CTRL+C billentyűkombináció lenyomásával.
Törölje a FROM záradék végén lévő 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, amikor egyesítő lekérdezést használ teljes külső illesztés végrehajtására.
A 3. lépésben másolt SQL-kód beillesztéséhez nyomja le a CTRL+V billentyűkombinációt.
A beillesztett kódban módosítsa a LEFT JOIN függvényta következőre: RIGHT JOIN.
Törölje a második FROM záradék végén lévő pontosvesszőt, majd nyomja le az ENTER billentyűt.
Vegyen fel egy WHERE záradékot, amely megadja, hogy az illesztési mező értéke NULL legyen a FROM záradékban felsorolt első táblában (a bal oldali táblában).
Ha például a FROM záradék: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ére az egyesítő lekérdezés végének jelzéséhez.
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 külső illesztésektől, hogy nincsenek explicit módon megadva az Accessben. Keresztillesztés esetén az egyik táblázat minden egyes sora kombinálódik egy másik tábla mindegyik sorával, így jön létre az úgynevezett keresztszorzat vagy derékszögű szorzat. Ha olyan lekérdezést futtat, amelyben nincsenek explicit módon összekapcsolt táblák szerepelnek, az eredmény keresztszorzat lesz. A keresztillesztés általában véletlen, de vannak esetek, amikor hasznos lehet.
Miért érdemes keresztillesztést használni?
Ha a két tábla vagy lekérdezés sorainak minden lehetséges kombinációját meg szeretné vizsgálni, használjon keresztillesztést. Tegyük fel például, hogy vállalkozásának látványos éve van, és azt fontolgatja, hogy visszatérítést nyújt ügyfeleinek. Létrehozhat egy lekérdezést, amely összegzi az egyes vevők vásárlásait, létrehozhat egy kis táblát több lehetséges visszatérítési százalékkal, és a kettőt kombinálhatja egy másik, keresztillesztést végrehajtó lekérdezésben. Ekkor egy olyan lekérdezés érkezik, amely minden vevő esetében hipotetikus visszatérítéseket jelenít meg.
Hogyan hogyan kell használni a keresztillesztést?
Keresztillesztés akkor jön létre, ha a lekérdezésbe táblákat vagy lekérdezéseket is felvesz, és nem hoz létre legalább egy explicit illesztést minden egyes táblához vagy lekérdezéshez. Az Access az eredményben minden olyan tábla vagy lekérdezés minden sorát egyesíti, amely nincs explicit módon összekapcsolva egyetlen másik táblához sem. Vegyük például az előző bekezdésben bemutatott 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 eredményez (a 91 és az 5 szorzata).
Ahogy az elképzelhető, a véletlen keresztillesztések hatalmas számú sort hozhatnak létre a lekérdezés eredményeiben. Ráadásul ezek az eredmények általában értelmetlenek, mert ha nem szeretne minden sort a többi sorral egyesíteni, akkor az eredményben megjelenő kombinált sorok többségének értelme lesz. Végezetül pedig a nem szándékos keresztillesztést használó lekérdezések futtatása nagyon hosszú időt vehet igénybe.
1. A bekarikázott mezőket egymáshoz kell illeszteni.
1. Figyelje meg a rekordok igen nagy számát.
1. Figyelje meg, hogy a rekordok száma jóval kisebb.
Táblázatok összekapcsolása a mezőértékek egyenlőtlenségének alapján
Az illesztéseknek nem kell az illesztett mezők ekvivalenciáján alapulniuk. Az illesztések bármilyen összehasonlító operátoron alapulhatnak, mint például a nagyobb mint (),> kisebb mint (<) vagy nem egyenlő (<>). A nem egyenlőértékűségen alapuló illesztéseket nem egyenlő illesztéseknek nevezzük.
Ha két adatforrás sorait szeretné egyesíteni nem egyenlő mezőértékek alapján, használjon nem egyenlő illesztést. Az egyenlőtlen illesztések jellemzően a nagyobb (),> kisebb mint (<), nagyobb vagy egyenlő (>=), illetve kisebb vagy egyenlő (<=) összehasonlító operátorokon alapulnak. A nem egyenlő (<>) operátoron alapuló nem egyenlő illesztések majdnem annyi sort adhatnak vissza, mint a keresztillesztések, és az eredmény nehezen értelmezhető.
Hogyan nem egyenlő illesztést használok?
Az egyenlőtlen illesztések nem támogatottak Tervező nézetben. Ha használni szeretné őket, azt SQL nézetben kell megtennie. Létrehozhat azonban egy illesztést Tervező nézetben, átválthat SQL nézetre, megkeresheti az egyenlőségjelet (=) összehasonlító operátort, és a 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 először visszaállítja az összehasonlító operátort egyenlőségjelre (=) az SQL nézetben.
Illesztés törlése
Ha az Access automatikusan létrehoz egy olyan illesztést, amelyre nincs szüksége, vagy ha tévedésből hoz létre illesztést – például két, különböző 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.
Rekordok felvétele táblába hozzáfűző lekérdezésselTöbb választó lekérdezés eredményének egyesítése egyesítő lekérdezéssel Lekérdezéslétrehozása több tábla alapjánKapcsolat létrehozása, szerkesztése és törlése