Ez a témakör az Access SQL használatával foglalkozó témakörsorozatunk része. A jelen témakör ismerteti, hogy hogyan írhat FROM záradékot, és példákkal szemlélteti a FROM záradékok írásakor használható különféle technikákat.
A SELECT utasításokban a FROM záradék segítségével tud adatforrásokat megadni. A FROM záradék JOIN műveletet is tartalmazhat. A JOIN művelettel egyeztetheti és kombinálhatja két adatforrás adatait, mely lehet például két tábla, illetve egy tábla és egy lekérdezés.
Az Access SQL áttekintését a következő témakörben találhatja meg: Access SQL: alapfogalmak, szókészlet és szintaxis.
Tartalom
Adatforrások megadása
A SELECT utasításban a FROM záradék határozza meg, hogy a SELECT záradékban felhasznált adatok melyik táblákból vagy lekérdezésekből származnak.
Tegyük fel, hogy egy adott ügyfele telefonszámát szeretné megtudni. Ha az adatot tároló mező a tblCustomer nevű táblában szerepel, a FROM záradék a következőképpen alakul:
FROM tblCustomer
A neveket szögletes zárójelekkel határolhatja. Ha a név nem tartalmaz egyetlen szóközt vagy speciális karaktert sem (például írásjeleket), akkor a szögletes zárójel használata nem kötelező. Ha azonban a név tartalmaz szóközt vagy speciális karaktert, muszáj szögletes zárójelek közé zárnia.
Tipp: A szóközt tartalmazó neveket egyszerűbb elolvasni, és időt spórolhat meg velük az űrlapok és jelentések tervezésekor, de előfordulhat, hogy emiatt többet kell majd gépelnie az SQL-utasítások megírásakor. Ne feledkezzen meg erről, amikor elnevezi az adatbázis objektumait.
Helyettesítő nevek használata adatforrásokhoz
A SELECT utasítás tábláira más néven is hivatkozhat, ha a FROM záradékban egy táblaaliast használ. A táblaalias olyan név, amelyet egy lekérdezésben egy adatforráshoz rendel hozzá, amikor kifejezést használ adatforrásként, vagy hogy az SQL-utasítás könnyebben beírható és olvasható legyen. Ez különösen akkor lehet hasznos, ha az adatforrás neve hosszú vagy nehezen írható be, különösen akkor, ha több mező is rendelkezik ugyanazzal a névvel a különböző táblákból.
Ha például két mezőből kell összegyűjteni az adatokat, és mindkét mező neve ID, de az egyik a tblCustomer nevű táblából, a másik a tblOrder nevű táblából származik, akkor a SELECT záradék a következőképpen néz ki:
SELECT [tblCustomer].[ID], [tblOrder].[ID]
Ha táblaaliast használ a FROM záradékban, egyszerűbbé válhat a lekérdezés beírása. Táblaaliasokkal a FROM záradék a következőképpen nézhet ki:
FROM [tblCustomer] AS [C], [tblOrder] AS [O]
Ezután a táblaaliasokat a SELECT záradékban is használhatja az alábbiak szerint:
SELECT [C].[ID], [O].[ID]
Megjegyzés: Táblaalias használata esetén az SQL-utasításban az aliasnévvel és a tábla teljes nevével is hivatkozhat az adott táblára.
Kapcsolódó adatok illesztése
Ha két adatforrásból származó rekordpárokat kell egyesítenie egy lekérdezésben, el elvégezheti illesztés végrehajtásával. Az illesztés olyan SQL-művelet, amely leírja, hogy két adatforrás hogyan kapcsolódik össze, és hogy az egyik forrásból származó adatot akkor is visszaadja-e a keresés, ha a másik adatforrásban nincs kapcsolódó adat.
Két adatforrásból származó információk egyesítését úgy végezheti el, ha illesztést hajt végre az adatforrások közös mezőjén. Ha a közös mezőben tárolt értékek megegyeznek, a rekordokból származó adatok egyesítve jelennek meg az eredményben.
Az adatok egyesítésén kívül az illesztés alkalmas arra is, hogy meghatározza, kell-e adatokat belefoglalni bármelyik táblából, ha a kapcsolódó táblában nincs vonatkozó rekord.
Tegyük fel például, hogy egy lekérdezésben két táblából származó adatokat kíván használni, a két tábla neve pedig: tblCustomer és tblOrder. Mindkét táblában van egy mező, a CustomerID mező, amely egy vevőt azonosít. A tblCustomer tábla minden egyes eleme kapcsolódik a tblOrder tábla egy vagy több eleméhez, és a kapcsolódó értékeket a CustomerID mező értékeivel lehet meghatározni.
Ha a táblákat illeszteni szeretné úgy, hogy a lekérdezés egyesítse a táblákból származó rekordokat, kizárva az egyik táblából származó rekordokat, ha a másik táblában nincs kapcsolódó rekord, a FROM záradék a következőképpen néz ki (az áttekinthetőség érdekében sortörést alkalmazva):
FROM [tblCustomer] INNER JOIN [tblOrder]
ON [tblCustomer].[CustomerID]=[tblOrder].[CustomerID]
Az Accessben az illesztések a SELECT utasítás FROM záradékában történnek. Az illesztéseknek kétféle típusa létezik: belső és külső illesztés. Az alábbi szakaszok ismertetik az illesztések kétféle típusát.
Belső illesztések
A belső illesztés az illesztések legáltalánosabb típusa. Amikor egy belső illesztést tartalmazó lekérdezést futtat, a lekérdezés csak azokat a mezőket veszi figyelembe, ahol mindkét illesztett táblában ugyanaz az érték szerepel a mezőkben.
A belső illesztés szintaxisa az alábbiak szerint alakul (az áttekinthetőség érdekében sortörést alkalmazva):
FROM table1 INNER JOIN table2
ON table1.field1 compopr table2.field2
Az alábbi táblázat az INNER JOIN művelet részeit ismerteti.
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ó operátor |
Bármely relációs összehasonlító operátor: =, <, >, <=, >= vagy <>. |
Külső illesztések
A külső illesztések a belső illesztésekhez hasonlóan azt határozzák meg, hogy egy lekérdezés hogyan egyesíti a két forrásból származó információt. A külső illesztések abban különböznek, hogy azt is megadják, hogy a lekérdezés figyelembe vegye-e az adatokat, ha nincsenek azonos értékek. A külső illesztések irányítottak: megadják, hogy a lekérdezés az illesztésben megadott első adatforrás összes rekordját tartalmazza (bal oldali illesztés), vagy az illesztésben megadott második adatforrás összes rekordját (jobb oldali illesztés).
A külső illesztések szintaxisa az alábbi:
FROM tábla1 [ LEFT | RIGHT ] JOIN tábla2
ON tábla1.mező1összehasonlító_operátor tábla2.mező2Az alábbi táblázat a LEFT JOIN és a RIGHT JOIN művelet részeit ismerteti.
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ők adattípusának egyeznie kell, a mezőknek ugyanolyan jellegű adatokat kell tartalmazniuk, de a nevük lehet különböző. |
összehasonlító operátor |
Bármely relációs összehasonlító operátor: "=", "<", ">", "<=", ">=" vagy "<>". |
Az illesztésekkel kapcsolatban további tájékoztatás olvasható a Táblák és lekérdezések illesztése című cikkben.