Egy adatbázis adatait a Structured Query Language, azaz az SQL nyelv segítségével kérheti le. Az SQL egy olyan programnyelv, amely nagyon hasonlít az angol nyelvhez, azonban ezt az adatbázis-kezelő programok is megértik. Minden futtatott lekérdezés a háttérben SQL-t használ.
Az SQL megértésével sikeresebb lekérdezéseket hozhat létre, emellett egyszerűbben kijavíthatja azokat, amelyek nem a kívánt eredményeket adják.
Ez a témakör az Access SQL használatával foglalkozó témakörsorozatunk része. Ez a cikk az SQL adatkijelöléshez használatos alapvető funkcióit ismerteti, valamint példákkal illusztrálja az SQL szintaxisát.
Tartalom
Az SQL nyelv bemutatása
Az SQL egy programnyelv, amellyel műveleteket végezhet tényhalmazokkal és a közöttük fennálló kapcsolatokkal. A relációsadatbázis-kezelő programok, például az Access, az adatok kezelésére SQL nyelvet használnak. Számos programnyelvvel ellentétben az SQL könnyen olvasható és megérthető még a kezdő felhasználók számára is. Más programnyelvekhez hasonlóan az SQL is nemzetközi szabvány, amelyet az ISO és az ANSI szabványozó testület is elismer.
Az SQL segítségével adathalmazokat írhat le, amelyekkel kérdéseket válaszolhat meg. Az SQL nyelv alkalmazásakor helyes szintaxist kell használni. A szintaxis az a szabálykészlet, amely biztosítja a nyelv elemeinek helyes összetételét. Az SQL szabályai az angol nyelv szabályain alapulnak, és a Visual Basic for Applications (VBA) nyelv számos szintaktikai elemét is tartalmazzák.
Az alábbi például egy egyszerű SQL-utasítás, amely a partnerek közül listába rendezi azokat, akiknek Mary a keresztneve:
SELECT Last_Name
FROM Contacts WHERE First_Name = 'Mary';
Megjegyzés: Az SQL nemcsak adatok kezelésére használható, hanem adatbázis-objektumok, például táblák létrehozására és táblatervek módosítására is. Az SQL nyelvnek azt a részét, amelyet adatbázis-objektumok létrehozására és módosítására használnak, adatdefiníciós nyelvnek (DDL) nevezik. Ebben a témakörben nem lesz szó a DDL nyelvről. További információ: Táblák vagy indexek létrehozása, illetve módosítása adatdefiníciós lekérdezéssel.
SELECT utasítások
Ha egy adatkészletet szeretne leírni az SQL nyelv segítségével, ehhez SELECT utasítást kell írnia. Egy SELECT utasítás az adatbázisból kinyerni kívánt adathalmaz teljes leírását tartalmazza. Ez a következőket foglalja magában:
-
Mely táblák tartalmazzák az adatokat.
-
Hogyan kapcsolódnak egymáshoz a különböző forrásokból származó adatok
-
Milyen mezők vagy számítások eredményeképpen jönnek létre az adatok.
-
Feltételek, melyek alapján az adatok bekerülnek az eredmények közé.
-
Szükséges-e az eredményeket rendezni, és ha igen, hogyan.
SQL-záradékok
A mondatokat alkotó mellékmondatokhoz hasonlóan az SQL-utasításokban is vannak záradékok. Minden egyes záradék egy bizonyos funkciót hajt végre az SQL-utasítás számára. Bizonyos záradékokat kötelező megadni a SELECT utasításban. Az alábbi táblázat a leggyakoribb SQL-záradékokat tartalmazza.
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 |
SQL-kifejezések
A beszédrészekhez hasonlóan mindegyik SQL-záradék kifejezésekből áll. Az alábbi táblázat az SQL-kifejezések típusait mutatja be.
SQL-kifejezés |
Megfelelő szófaj a beszédben |
Leírás |
Példa |
identifier |
főnév |
Az adatbázis-objektum azonosítására szolgáló név, például egy mező neve. |
Vásárlók.[Telefonszám] |
operator |
ige vagy határozószó |
Műveletet jelző vagy azt módosító kulcsszó. |
AS |
constant |
főnév |
Nem változó érték, például egy szám, vagy a NULL. |
42 |
expression |
melléknév |
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] |
Alapvető SQL-záradékok: SELECT, FROM és WHERE
Egy SQL-utasítás az alábbi általános formában írható fel:
SELECT field_1
FROM table_1 WHERE criterion_1 ;
Megjegyzések:
-
Az Access nem veszi figyelembe az SQL-utasításban elhelyezett sortöréseket. Érdemes azonban minden záradékot új sorban kezdeni az utasítások áttekinthetősége érdekében.
-
Minden SELECT utasítás végén pontosvessző (;) áll. A pontosvesszőt elhelyezheti az utolsó záradék végén vagy új sorban az SQL-utasítás végén.
Egy példa az Access programból
Az alábbi ábra bemutatja, hogy egy egyszerű kiválasztásos lekérdezés hogyan jelenik meg az Access programban:
1. SELECT záradék
2. FROM záradék
3. WHERE záradék
Ez az SQL-utasítás a következőt jelenti: „Válassza ki azokat adatokat, amelyek a Partnerek táblában az E-mail-cím és a Cég nevű mezőben vannak, különösképp azokat a rekordokat, amelyekben a Város mező értéke Seattle.”
Tekintse át a példát, és az egyes záradékokon keresztül figyelje meg, hogyan használható az SQL szintaxisa.
A SELECT záradék
SELECT [E-mail Address], Company
Ez a SELECT záradék. Egy műveletből áll (SELECT), melyet két azonosító ([E-mail-cím] és Cég) követ.
Ha egy azonosítóban szóközök vagy más speciális karakterek szerepelnek (például az E-mail cím azonosítóban), szögletes zárójelbe kell tenni.
A SELECT záradékban nem kell feltétlenül megadni, hogy a mezők melyik táblában vannak, és nem lehet meghatározni, hogy az adatokat milyen feltételek szerint választja ki.
A SELECT záradék mindig a FROM záradék előtt áll a SELECT utasításban.
A FROM záradék
FROM Contacts
Ez a FROM záradék. Egy műveletből áll (FROM), melyet egy azonosító (Partnerek) követ.
A FROM záradék nem sorolja fel a kiválasztandó mezőket.
A WHERE záradék
WHERE City="Seattle"
Ez a WHERE záradék. Egy műveletből áll (WHERE), melyet egy kifejezés követ (City="Seattle").
Megjegyzés: A SELECT és a FROM záradékoktól eltérően a WHERE záradék a SELECT utasításnak nem kötelező része.
Az SQL által felkínált műveletek legnagyobb része elvégezhető a SELECT, FROM és WHERE záradék alkalmazásával. E záradékok használatáról további információt az alábbi cikkekben találhat:
Az eredmények rendezése: ORDER BY
A Microsoft Excelhez hasonlóan az Access lehetővé teszi a lekérdezési eredmények adatlapon történő rendezését. Azt is megadhatja a lekérdezésben, hogy hogyan szeretné rendezni az eredményeket a lekérdezés futtatásakor egy ORDER BY záradékkal. Order BY záradék használata esetén ez az SQL-utasítás utolsó záradéka.
Az ORDER BY záradék tartalmazza a rendezés alapjául szolgáló mezők listáját, mégpedig ugyanabban a sorrendben, amelyben a rendezési műveleteket alkalmazni szeretné.
Tegyük fel például, hogy az eredményeket először a Cég mező értékei szerint csökkenő sorrendbe szeretné rendezni, majd – ha ugyanazon Cég értékeken belül több érték is található – az E-mail cím mezőben szereplő értékek szerint növekvő sorrendbe. Ebben az esetben az ORDER BY záradék a következőképpen néz ki:
ORDER BY Company DESC, [E-mail Address]
Megjegyzés: Alapértelmezés szerint az Access az értékeket növekvő sorrendbe rendezi (A–Z, kisebbtől a nagyobb felé). Ha inkább csökkenő sorrendbe rendezné az elemeket, használja a DESC kulcsszót.
Az ORDER BY záradékról további információt Az ORDER BY záradék című témakörben talál.
Összesített adatok használata: GROUP BY és HAVING
Előfordulhat, hogy összesített adatokat szeretne alkalmazni: ilyen például a havi teljes forgalom vagy a készlet legdrágább árucikke. Ehhez a SELECT záradékban egy összesítő függvény kell alkalmazni a megfelelő mezőn. Ha például azt szeretné, hogy a lekérdezés megmutassa az egyes cégekhez felsorolt e-mail-címek számát, a SELECT záradék a következőképpen néz ki:
SELECT COUNT([E-mail Address]), Company
Az, hogy milyen összesítő függvényeket alkalmazhat, attól függ, hogy a felhasználandó mezőben vagy kifejezésben milyen adattípusok szerepelnek. A rendelkezésre álló összesítő függvényekkel kapcsolatban további információt Az SQL összesítő függvényei című cikkben találhat.
Az összesítő függvényekből kihagyott mezők megadása: a GROUP BY záradék
Ha összesítő függvényeket alkalmaz, általában létre kell hoznia a GROUP BY záradékot is. A GROUP BY felsorolja mindazokat a mezőket, amelyekre nem alkalmazta az összesítő függvényt. Ha az összesítő függvényt az adott lekérdezésben szereplő összes mezőre alkalmazza, nincs szükség a GROUP BY záradékra.
A GROUP BY záradék közvetlenül a WHERE záradékot követi, vagy ha ilyen nincs, akkor a FROM záradékot. A GROUP BY záradék annak megfelelően sorolja fel a mezőket, ahogyan a SELECT záradékban azt megadta.
Az előző példát folytatva, ha a SELECT záradékban összesítő függvényt alkalmaz az [E-mail-cím] mezőre, de a Cég mezőre nem, a GROUP BY záradék a következőképpen alakul:
GROUP BY Company
A GROUP BY záradékkal kapcsolatban további információt A GROUP BY záradék című témakörben talál.
Az összegző értékek korlátozása csoportos feltételek használatával: a HAVING záradék
Ha az eredményeket bizonyos feltételek szerint szeretné megjeleníteni, de az adott mezőt, amelyre a feltételek vonatkoznak, egy összesítő függvényben használja, a WHERE záradék nem használható. Ehelyett a HAVING záradékot kell alkalmazni. A HAVING záradék funkciója hasonlít a WHERE záradékhoz, de ez összesített adatok esetében használható.
Tegyük fel például, hogy az AVG függvényt alkalmazza (átlagértéket számít) a SELECT záradékban megadott első mezőn:
SELECT COUNT([E-mail Address]), Company
Ha a lekérdezés eredményeit a COUNT függvény értékeinek alapján szeretné korlátozni, a WHERE záradékban nem adhat meg feltételt az adott mezőre vonatkozóan. A feltételeket ehelyett a HAVING záradékban kell megadni. Ha például azt szeretné, hogy a lekérdezés csak olyan sorokat adjon vissza, amelyeknél egy céghez több e-mail-cím is társítható, a HAVING záradék a következőképpen néz ki:
HAVING COUNT([E-mail Address])>1
Megjegyzés: Egy lekérdezésben egyaránt szerepelhet WHERE záradék és HAVING záradék – az összesítő függvényekben nem használt mezőkre vonatkozó feltételek a WHERE záradékban vannak, a többi mezőre vonatkozó feltételek pedig a HAVING záradékban szerepelnek.
A HAVING záradékról további információt A HAVING záradék című témakörben talál.
A lekérdezések eredményeinek összefűzése: UNION
Ha egyszerre szeretné áttekinteni az összes adatot, amelyet több hasonló, választó lekérdezés adott vissza, akkor használja a UNION műveletet.
A UNION művelet több SELECT utasítást egyesít. Az egyesítendő SELECT utasításoknak ugyanannyi kimeneti mezővel, ugyanolyan sorrenddel és ugyanolyan vagy kompatibilis adattípussal kell rendelkezniük. A lekérdezés futtatásakor az egyes kapcsolódó mezőhalmazok adatai egyetlen kimeneti mezőbe kerülnek, ezért a lekérdezés eredménye mindig ugyanannyi mezőt tartalmaz, mint az egyes SELECT utasításoké.
Megjegyzés: Egyesítő lekérdezések esetében a Szám és a Szöveg adattípus kompatibilis egymással.
A UNION művelet alkalmazásakor azt is megadhatja, hogy a lekérdezési eredmények között megjelenjenek-e az ismétlődő sorok (ha a lekérdezés ilyen eredményt adott). Ehhez használja az ALL kulcsszót.
Az egyesítő lekérdezések SQL-alapszintaxisa a következő (két SELECT utasítás egyesítése):
SELECT field_1
FROM table_1 UNION [ALL] SELECT field_a FROM table_a ;
Tegyük fel, hogy van egy Termékek és egy Szolgáltatások nevű táblája. Mindkét tábla rendelkezik olyan mezőkkel, amelyek a termék vagy szolgáltatás nevét, árát, jótállását, garanciális lehetőségeit, illetve a termék vagy szolgáltatás kizárólagos értékesítési állapotát tartalmazzák. Bár a Termékek tábla jótállási adatokat, míg a Szolgáltatások tábla garanciális adatokat tartalmaz, a lényeg ugyanaz (rendelkezik-e az adott termék vagy szolgáltatás minőségi szavatossággal). A két tábla négy mezőjének egyesítéséhez használjon az alábbihoz hasonló egyesítő lekérdezéseket:
SELECT name, price, warranty_available, exclusive_offer
FROM Products UNION ALL SELECT name, price, guarantee_available, exclusive_offer FROM Services ;
A SELECT utasítások egyesítéséről és a UNION művelet használatáról további tudnivalókat a Több választó lekérdezés eredményének egyesítése egyesítő lekérdezéssel című cikkben találhat.