Egy rugalmas lekérdező nyelv - SQL |
||||||||||||||||||||||||
Az SQL (Structured Query
Language, struktúrát lekérdező nyelv) nyelv a relációs adatbázisokhoz
kifejlesztett, szabványos, könnyen tanulható lekérdező nyelv, amely lehetővé
teszi, hogy csak a feltételeknek megfelelő rekordokat lássuk, akár úgy is,
hogy bizonyos tulajdonságokat elrejtünk a megjelenítés elől. Ezen a feladaton
kívül lehetőséget nyújt táblák összekapcsolására, valamint azok adatainak
módosítására is. Ebből a kis bevezetőből is látható már, hogy egy összetett
eszközről van szó, amelynek a használatát a cikksorozatból ismerhetik meg. A
cikkben feltételezem, hogy a kedves Olvasó ismeri az adatbázisokkal
kapcsolatos alapfogalmakat, valamit a relációs adattáblákra vonatkozó
követelményeket. A nyelv elsajátítását teszi lehetővé az a kis program, amit
megtalálhatnak a CD mellékletén, illetve letölthetnek az internetről is.
Akinek ez nem szimpatikus, elérhetővé teszem az adattáblát tartalmazó
Microsoft Access adatbázist is, a feladatokat ebben is gyakorolhatják. Nézzük
meg, hogy mi is lesz a sorozat tematikája:
|
||||||||||||||||||||||||
Kezdjünk bele... |
||||||||||||||||||||||||
Mielőtt elkezdenénk a
nyelvvel való ismerkedést, fontos, hogy megismerjük, hogy milyen adatokkal
fogunk dolgozni. A feladatok végrehajtásához elsőként egy országok adatait
tartalmazó relációt fogunk felhasználni, majd a későbbiekben áttérünk egy
négytáblás adatbázisra. Vizsgáljuk
meg, hogy milyen adatszerkezettel rendelkezik a country.dbf (vagy
country.mdb, amelyen belül van egy country nevű tábla) elnevezésű relációnk.
Ennek az adatszerkezete a következő:
Amint látható, ez nem túl
bonyolult szerkezet, a NEV mező egyben az elsődleges kulcs szerepét is
betöltheti, mert két egyforma nevű ország nem létezik. Most,
hogy már ismerjük az adatforrást, el is kezdhetünk foglalkozni a lekérdező
nyelvünkkel. |
||||||||||||||||||||||||
Az SQL utasítások szerkezete |
||||||||||||||||||||||||
Annak ellenére, hogy az SQL
elnevezés elsősorban adatok lekérdezésére, kigyűjtésére utal, maga a nyelv
ettől sokkal többre képes, sokkal robosztusabb eszköz lehet a kezünkben. Maga az SQL nyelv két nagy csoportba
sorolható utasításokat tartalmaz, így tulajdonképpen két nyelv
összetételeként is felfogható. Az
első csoportba tartoznak az adatokat kezelő parancsok (Data Manipulation
Language, DML), melyek lehetővé teszik az adatok lekérdezését (SELECT), módosítását (UPDATE),
törlését (DELETE), valamint természetesen új adat
beszúrását a táblába (INSERT INTO). A
másik csoportba az adatszerkezetet meghatározó parancsok (Data Definition
Language, DDL) tartoznak, melyek az adattáblákon tesznek lehetővé módosításokat,
segítségükkel táblákat hozhatunk létre (CREATE TABLE), módosíthatjuk a meglévő táblákat (ALTER TABLE), törölhetjük azokat (DROP
TABLE), indexet hozhatunk létre bizonyos mezőkhöz (CERATE INDEX), valamint ezeket törölhetjük is (DROP INDEX). Ezekkel
a parancsokkal természetesen mind meg fogunk ismerkedni, de mostani
cikkünkben még csak az adatok lekérdezését fogjuk gyakorolni, amelyhez a
SELECT parancsot fogjuk használni. |
||||||||||||||||||||||||
Készítsünk lekérdezéseket a
SELECT paranccsal |
||||||||||||||||||||||||
A lekérdezéseket mindig a
SELECT utasítással vezetjük be, amely után fel kell sorolni azoknak a
mezőknek a neveit, amelyekre szükségünk van, vagyis amelyeket szeretnénk most
megjeleníteni. Ehhez természetesen tisztában kell lennünk a reláció
szerkezetével, tudnunk kell a pontos mezőneveket. Amennyiben minden mezőre
szükségünk van, akkor azokat nem kell egyesével megadnunk, hanem egyszerűen
egy * karakterrel utasíthatjuk az SELECT-et, hogy minden mezőt vegyen
figyelembe. A meződefiníció után meg kell határoznunk, hogy melyik relációból
szedje az adatokat. Ezt a FROM foglalt szóval és az ezt követő táblanévvel
tehetjük meg. A fentieket mutatja az alábbi utasítássor: SELECT * FROM country.dbf Ezzel
tulajdonképpen már meg is van az első lekérdezésünk, amely a reláció minden
adatát megjeleníti a képernyőn. Az
alábbi példa megjeleníti a táblában lévő országok neveit: SELECT NEV FROM country.dbf Több
mezőt is megadhatunk a SELECT után,
ezeket vesszővel kell elválasztanunk egymástól. Az
előző példánál maradva jelenítsük meg az országok nevei mellett a területüket
és a népességüket is: SELECT NEV, TERULET, NEPESSEG FROM country.dbf A
mezőnevek felsorolásával lehetőségünk nyílik a mezősorrend befolyásolására.
Vizsgáljuk meg az alábbi parancs kimenetét: SELECT TERULET, NEPESSEG, NEV FROM country.dbf Amint
láthatjuk a mezők fizikai sorrendjétől függetlenül a lekérdezés
eredménylistájában a mezők pontosan azt a sorrendet követik, amelyet mi
meghatároztunk a parancsban. Így lehetőségünk van mindig a megfelelő
sorrendet kialakítani. A SELECT utasítás eddig arra használtuk, hogy a reláció
tulajdonságtípus halmazából megjelenítsünk valamennyi tulajdonságot, illetve
azoknak a sorrendjét meghatározzuk. Mi a helyzet akkor, amikor a rekordok
számát is korlátozni szeretnék azáltal, hogy a kimeneten csak bizonyos
feltételnek, vagy feltételeknek megfelelő rekordokat jelenítünk meg.? Természetesen
ilyen feladatot is megoldhatunk az SQL segítségével, hiszen ennek hiányában
nem is beszélhetnénk lekérdezésről. Ahhoz,
hogy feltételt adhassunk meg, szükségünk lesz a WHERE
utasításra, amely után egy vagy több feltételt adhatunk meg. A feltételek
lehetnek nagyon egyszerűek és nagyon bonyolultak egyaránt. Mind aritmetikai,
mind logikai kifejezések szerepelhetnek itt, de akár SQL utasításokat is
elhelyezhetünk a WHERE után. A legfontosabb operátorokat mutatja az alábbi
táblázat:
Jelenítsük meg azokat az
országok neveit és minden más adatukat is, amelyeknek a GDP-jüket nem
ismerjük, vagyis a GDP mező értéke 0. A számokkal történő összehasonlítás
borzasztó egyszerű, mivel egyszerűen csak le kell írni a relációt: SELECT * FROM country.dbf WHERE GDP=0 Jelenítsük
meg azokat az országoknak a nevét, amelyek Afrikában helyezkednek el: SELECT NEV FROM country.dbf WHERE REGIO="Afrika" Amint
látható, a szöveget ' ' (az adatbázis-kezelő rendszerek többsége elfogadja a
sztringeket " " között is, mi a példákban ezt fogjuk használni)
közé kell tennünk, ezt a sztringet fogja feltételként az SQL megkapni. Ha
kíváncsiak vagyunk arra, hogy tényleg csak az afrikai országokat látjuk,
akkor vegyük fel a megjelenített mezők közé a REGIO-t is: SELECT NEV, REGIO FROM country.dbf WHERE REGIO="Afrika" Számos
esetben előfordul, hogy nem teljes szövegre kell a szűrést elvégeznünk. Ilyen
esetekben az egyenlőségjelet nem használhatjuk, mert nem ismerjük a pontos
karaktersorozatot. Helyette használjuk a LIKE
parancsot, ami összehasonlítja a mező értékét a LIKE
után szereplő sztringgel. Ha nem tudjuk a pontos tartalmat, használhatjuk a %-jelet tetszőleges számú karakter helyettesítésére. Jelenítsük
meg azoknak az országoknak a neveit, amelyek neve B betűvel kezdődik: SELECT NEV FROM country.dbf WHERE NEV LIKE "B%" A
joker karakter nem csak a karakterek után helyezkedhet el, hanem meg is
előzheti azokat. A következő példában jelenítsük meg az Amerikában lévő
országok neveit és a népességüket: SELECT NEV, NEPESSEG FROM country.dbf WHERE REGIO LIKE
"%Amerika%" Az
eredmény ellenőrzéséhez megjeleníthetjük a REGIO
mezőt is, amivel láthatjuk, hogy minden olyan ország szerepel, amely Amerika
valamely részén található: SELECT NEV, NEPESSEG, REGIO FROM country.dbf WHERE REGIO LIKE
"%Amerika%" Abban
az esetben, ha számokat tartalmazó mező alapján szűrünk és két határérték
közötti adatokra vagyunk kíváncsiak, akkor használhatjuk a BETWEEN utasítást. A BETWEEN
után két határértéket kell megadni és ezek közé az AND
logikai operátort kell megadnunk. Jelenítsük
meg azokat az országokat, minden adatukkal együtt, amelyek területe nagyobb,
mint 50 000 km2, de kisebb, mint 500 000 km2: SELECT * FROM country.dbf WHERE TERULET BETWEEN 50000 AND 500000 Ugyanezt
az eredményt érhetjük el akkor is, ha a két feltételt összekapcsoljuk egy AND operátorral: SELECT * FROM country.dbf WHERE TERULET>50000 AND TERULET<500000 A
fenti információk ismeretében már bárki képes lehet egyszerű lekérdezéseket
készíteni bármilyen, egytáblás adatbázisból. A fentiek alapján a Kedves
Olvasók önállóan készíthetnek feladatokat. A cikksorozat következő részeiben
ezekre az információkra fogunk építkezni. |
||||||||||||||||||||||||
Markó Imre |