Ha a lekérdezések nem nyújtják a kívánt teljesítményt, akkor néhány alapvető SQL-utasítással tovább finomíthatja őket. Az alábbiakban áttekintünk néhány SQL-utasítástípust és a hozzájuk tartozó záradékokat és részeket, amelyek szerkesztésével esetleg elérhető a kívánt eredmény.
Megjegyzés: Ez a témakör nem vonatkozik az Access-webappokra, vagyis az Access használatával tervezett és online közzétett adatbázisokra.
Tartalom
Select utasítás létrehozása
Minden SQL-utasításhoz két vagy három záradék tartozik. A SELECT záradék közli az adatbázissal, hogy hol keresse az adatokat, valamint meghatározza a visszaadandó adatok körét.
Megjegyzés: A SELECT utasításokat mindig pontosvessző (;) zárja le, amely vagy az utolsó záradék végén, vagy az SQL-utasítás utolsó sorát követő külön sorban állhat.
Az alábbi SELECT utasítás arra utasítja az Accesst, hogy olvassa be a Contacts (Névjegyek) táblájának E-mail Address (E-mail cím) és Company (Vállalat) oszlopában található adatokat, mégpedig azokból a sorokból, amelyekben a City (Település) oszlopban „Seattle” szerepel.
A fenti lekérdezésnek három záradéka van: SELECT, FROM és WHERE.
1. A SELECT záradék felsorolja azokat az oszlopokat, amelyekben a használni kívánt adat, valamint egy operátor (SELECT) és két ezt követő azonosító található. Ha egy azonosítóban szóközök vagy más speciális karakterek szerepelnek (például az E-mail Address azonosítóban), az azonosítót szögletes zárójelbe kell tenni.
2. A FROM záradék a forrástáblát azonosítja. Ebben a példában egy operátort (FROM) tartalmaz, amelyet egy azonosító (Contacts) követ.
3. A WHERE záradék megadása nem kötelező. A példában egy operátort (WHERE) tartalmaz, amelyet egy kifejezés (City="Seattle") követ.
A lekérdezések kiválasztásával kapcsolatos további információkért lásd: Egyszerű választó lekérdezés létrehozása.
A leggyakoribb SQL-záradékok listája az alábbi:
SQL-záradék neve |
Rendeltetés |
Kötelező ? |
SELECT |
A vizsgált adatokat tartalmazó mezőket sorolja fel. |
Igen |
FROM |
A SELECT záradékban felsorolt mezőket tartalmazó táblákat sorolja fel. |
Igen |
WHERE |
Meghatározza azokat a mezőfeltételeket, amelyek alapján az egyes rekordok bekerülnek az eredmények közé. |
Nem |
ORDER BY |
Megadja az eredmények rendezésének módját. |
Nem |
GROUP BY |
Az összegző függvényeket tartalmazó SQL-utasításokban felsorolja azokat a mezőket, amelyek a SELECT záradékban nem szerepeltek. |
Csak ha létezik ilyen mező |
HAVING |
Összegző függvényeket tartalmazó SQL-utasításokban megadja a SELECT utasításban összegzett mezőkre vonatkozó feltételeket. |
Nem |
Mindegyik SQL-záradék kifejezésekből áll. Az alábbi lista bemutat néhány gyakori SQL-kifejezést.
SQL-kifejezés |
Definíció |
Példa |
azonosító |
Egy adatbázis-objektum, például oszlop azonosítására szolgáló név. |
[E-mail cím] és Vállalat |
operátor |
Műveletet jelző vagy azt módosító kulcsszó. |
AS |
állandó (konstans) |
Nem változó érték, például egy szám, vagy a NULL. |
42 |
kifejezés |
Azonosítók, operátorok, állandók és függvények kombinációja, amellyel értéket ad egy számnak. |
>= Termékek.[Egységár] |
A SELECT záradék testreszabása
Testreszabás |
Példa |
Csak a különböző értékek megjelenítése. Használja a DISTINCT kulcsszót a SELECT záradékban. |
Ha például vevői különböző fiókirodákból származnak, és közülük többnek megegyezik a telefonszáma, de Ön mindegyik telefonszámot csak egyszer szeretné megjeleníteni, a következőhöz hasonló SELECT záradékot alkalmazhat:
|
Az azonosító megjelenésének módosítása, hogy könnyebben lehessen olvasni az Adatlap nézetben. A SELECT záradékban használja az AS operátort (műveletet megjelenítő vagy módosító kulcsszó) mezőaliasszal. A mezőalias egy név, amelyet az eredmények olvashatóbbá tétele érdekében rendel hozzá a mezőhöz. |
|
A FROM záradék testreszabása
A testreszabás célja |
Példa |
Táblaalias, azaz másik név hozzárendelése a táblákhoz a SELECT utasításban. A táblaaliasokat akkor érdemes alkalmazni, ha a táblák nevei hosszúak, de még inkább akkor, ha a különböző táblákban egyező nevű mezők vannak. |
Ha két mezőből szeretné ö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:
Az AS operátorral táblaaliasokat határozhat meg a FROM záradékban:
Ezeket a táblaaliasokat ezután felhasználhatja a SELECT záradékban az alábbiak szerint:
|
A két adatforrásból származó rekordpárok összevonása illesztésekkel, vagy annak megadása, hogy valamelyik táblából akkor is szerepeljen rekord az eredmények között, ha a kapcsolódó táblában nincs hozzá tartozó rekord. Illessze a táblákat úgy, hogy a lekérdezés összevonja a táblákból származó elemeket, és kizárja azokat, amelyeknek a másik táblában nincs megfelelője. |
A FROM záradék a következőhöz hasonló lehet:
|
Az illesztésekkel kapcsolatos tudnivalók
Az illesztéseknek két típusa létezik: belső és külső illesztés. A lekérdezésekben a belső illesztés gyakoribb. Ha belső illesztéssel futtat egy lekérdezést, akkor az eredmények között csak azok a tételek jelennek meg, amelyeknek mindkét illesztett táblájában van közös értéke.
A külső illesztések azt határozzák meg, hogy a lekérdezés figyelembe vegye-e az adatokat, ha nincsenek azonos értékek. A külső illesztések irányítottak, tehát megadható, hogy a lekérdezés az illesztésben megadott első tábla összes rekordját (bal oldali illesztés) vagy az illesztésben megadott második tábla összes rekordját (jobb oldali illesztés) tartalmazza-e. Egy külső illesztésnek a következő az SQL-szintaxisa:
FROM table1 [ LEFT | RIGHT ] JOIN table2
ON table1.field1 = table2.field2
Az illesztések lekérdezésekben való használatáról további információt a Táblák és lekérdezések összekapcsolása című témakörben talál.
A WHERE záradék testreszabása
A WHERE záradékba olyan feltételek foglalhatók, amelyekkel korlátozható a lekérdezés által visszaadott elemek száma. Ezek leírása és működése a lekérdezésfeltételek példáit bemutató témakörben található.
Az alapszintű WHERE záradék testreszabására példa a lekérdezés eredményeinek korlátozása; Tegyük fel, hogy meg szeretné keresni egy ügyfél telefonszámát, és csak a vezetéknevét tudja megjegyezni Bagel néven. Ebben a példában a vezetéknevek egy Vezetéknév mezőben vannak tárolva, így az SQL szintaxisa a következő:
WHERE [LastName]='Bagel'
A WHERE záradékkal olyan oszlopok adatforrásait is egyesítheti, amelyek egymásnak megfeleltethető adatokat tartalmaznak, de az adattípusuk különbözik. Ez a lehetőség azért hasznos, mert a táblák nem illeszthetők különböző adattípusú mezőkön keresztül. Ilyenkor a LIKE kulcsszóval az egyik mezőt a másik mezőre vonatkozó feltételként határozhatja meg. Ha például az Assets (Eszközök) tábla és az Employees (Alkalmazottak) tábla azon adatait szeretné használni, amelyeknél az Assets tábla eszköztípus mezőjében szereplő értékhez az Employees tábla Quantity (Mennyiség) mezőjében a 3-as érték tartozik, akkor a következő WHERE záradékot használhatná:
WHERE field1 LIKE field2
Fontos: Ha a mező összesítő függvényben szerepel a WHERE záradékon belül, akkor nem határozhatók meg rá feltételek. Az összesített mezőkön a HAVING záradékot kell alkalmazni.
Testreszabás a UNION operátorral
A UNION operátort akkor kell alkalmazni, ha több hasonló választó lekérdezés eredményét összevontan szeretné megjeleníteni. Ha például az adatbázisnak van egy Termékek és egy Szolgáltatások táblája, és mindkettőnek három mezője: kizárólagos ajánlat, illetve termék vagy szolgáltatás, ár, valamint jótállás, illetve garancia. Ebben az esetben a Termékek tábla jótállás mezője és a Szolgáltatások tábla garancia mezője lényegében ugyanazt az információt tartalmazza. Ekkor a két tábla három mezőjét a következőképpen egyesítheti egy egyesítő lekérdezéssel:
SELECT name, price, warranty, exclusive_offer
FROM Products UNION ALL SELECT name, price, guarantee, exclusive_offer FROM Services;
A lekérdezés futtatásakor az egyes kapcsolódó mezőhalmazok egyetlen kimeneti mezőbe kerülnek. Ha az eredmények között a többször előforduló elemeket is meg szeretné jeleníteni, akkor használja az ALL operátort.
Megjegyzés: A két SELECT utasításban ugyanannyi kimeneti mezőnek kell lennie, ugyanabban a sorrendben, és a mezőpárok adattípusának meg kell egyeznie vagy egymással kompatibilisnek kell lennie. Egyesítő lekérdezésekben a Szám és a Szöveg adattípus kompatibilisnek számít.
Az egyesítő lekérdezésekről a Több lekérdezés eredményének együttes megjelenítése egyesítő lekérdezéssel című témakörben olvashat bővebben.