Adatbázisok - 5.rész
Az adatbázisokról szóló cikksorozatom első négy részében a relációs
adatbázisok alapjairól, ezek tulajdonságairól valamint a relációs adatbázisok
szabványosított lekérdező nyelvéről, az SQL nyelvről volt szó. A mostani
cikkünkben már - remélhetőleg - gyakorlati ismereteket is szerzünk eddigi
elméleti tudásunk mellé, ugyanis megismerkedünk az SQL nyelv alapjaival.
Megtanulunk SQL parancsok segítségével adattáblákat létrehozni, módosítani
valamint feltölteni adatokkal.
(Kezdetben még csak
"elméletben", "papíron" hozunk létre adatbázist, de a
következő cikkekben később bemutatom azt is, hogy az egyes adatbáziskezelő
nyelvekkel "fizikailag" ez hogyan valósítható meg.)
Készítsünk
el egy adatbázist (a neve legyen: vallalat) és egy benne lévő táblát
(alkalmazottak). Az adattáblában a következő mezők szerepeljenek: (A kettőspont
után az oszlopok típusai szerepelnek. A típusokról nemsokára lesz szó.)
·
id: char(10) à az
alkalmazott azonosító kódja
·
veznev: char(30) à
vezetékneve
·
kernev: char(30) à
keresztneve
·
beosztas: char(30) à
foglalkozása
·
eletkor: smallint à
életkora
·
szulido: date à
születési ideje
·
fizetes: smallint à
fizetése
Első
lépésként létre kell hoznunk magát az adatbázist. Ezt a
paranccsal tehetjük meg.
Ez adatbázis a létrehozás után máris aktív, ezért nem szükséges kiadni a START
parancsot. (Lásd később.)
Ha szeretnénk egy
meglévő adatbázisról információkat kapni, akkor azt a
parancs kiadásával
tehetjük meg. Ha egy meglévő adatbázishoz szeretnék hozzáférni, akkor előbb az
adatbázist meg kell nyitnunk. Erre szolgál a következő parancs:
Ha szeretnénk a
megnyitott adatbázist bezárni, akkor azt a
utasítással tehetjük
meg. Ha egy adatbázisra többé már nincsen szükségünk akkor azt törölhetjük a
parancs kiadásával.
Ha elkészítettük a
használni kívánt adatbázist, akkor definiálnunk kell az adatbázisban szereplő
táblákat, valamint a táblákban szereplő oszlopok neveit, az oszlopok típusát
valamint az oszlopok méretét.
Nézzük, hogy mely
parancsot kell használnunk a táblák létrehozására:
Figyeljünk
arra, hogy egy tábla nevének mindig egyedinek kell lennie, valamint nem
használhatjuk táblanévként az SQL nyelv által fenntartott szavakat.
Az SQL nyelv 1989-es
szabványa (továbbiakban SQL89) szerint még csak max. 8 karakter hosszúságú
lehetett egy tábla neve, de az SQL92 (1992-ben elfogadott) szabványban
foglaltak szerint már 18 karakterből is állhatott egy táblanév. (Jelenleg egy
MsSQL Server 7.0-ben akár 128 karakter hosszúságú is lehet egy táblanév.)
Beszéljünk most egy
kicsit a típusokról. Azt mondtuk, hogy a táblák deklarálásánal kötelezően meg
kell adnunk az oszlopok típusát is. (Az oszlop azonosítója az SQL89 szabvány
szerint csak max. 10 karaktert tartalmazhatott. Ez az SQL92-es szabványban már
30 karakterre nőtt, de pl. MsSQL Server 7.0-ban már az oszlopnevek is 128
karakter hosszúak lehetnek.) Ez a típus határozza meg, hogy az adott mező
milyen értéket tárolhat. Ennek megfelelően több oszloptípust tudunk
megkülönböztetni. Lássuk a leggyakrabban előforduló típusokat.
Mielőtt
a típusokról beszélnénk, fontos megemlíteni azt, hogy az egyes SQL nyelvre épülő relációs adatbáziskezelő rendszerek bizonyos
tulajdonságai egymástól eltérő sajátosságokat mutatnak. (Lásd: pl. tábla-
és oszlopnevek hosszúsága.) Utaltam már az előző cikkemben is arra tényre, hogy
az egyes adatbáziskezelő rendszerek tartalmazhatnak olyan adattípusokat,
amelyek más rendszerekben nem találhatóak meg. Ez a megállapítás igaz az
parancsok egy részére is, amelyek eltérőek az egyes rendszerekben. Igyekszem
azokat az "alapparancsokat" bemutatni, amely a legtöbb rendszerben
megvannak és használhatóak.
Ebben a cikkben azonban
most csak olyan adattípusokkal foglalkozunk, amelyeket minden redszernél
megtalálhatóak. (Az egyes rendszerek oszloptípusainak sajátosságaira ebben a
cikkben nem térek ki.)
Nézzük tehát az SQL89-es
szabvány szerint oszloptípusokat:
·
Smallint: Értéke hat számjegyű egész szám lehet
előjellel együtt. A lehetséges értéktartománya -99 999 -től 999 999-ig terjed.
·
Integer: Értéke tizenegy jegyű egész szám lehet
(előjellel együtt) a - 9 999 999 999-től 99 999 999 999-ig eső tartományban.
·
Decimal(x,y): Értéke előjellel együtt x számjegyű
fixpontos decimális szám lehet y tizedesjeggyel., ahol 1 <= x <=19 és 0 <= y <= 18.
·
Numeric(x,y): Értéke előjellel és tizedesjeggyel x
számjegyű fixpontos decimális szám y tizedesjeggyel, ahol 0 <= x <=20 és
0 <= y <=18
·
Float(x,y): Értéke előjellel és tizedesjeggyel x
számjegyű lebegőpontos szám y tizedesjeggyel, ahol 0 <= x <=20, 0
<= y <=18.
·
Char(n): n karakter hosszú string (1 <= n <= 254)
·
Date: Dátum típusú oszlopot jelöl.
·
Logical: Logikai típusú oszlop, amelynek értéke
igaz(True) vagy hamis(False). Jelölése: .T. vagy .F., de használható a .I. vagy
.N. is.
Ennyi információ után
már képesek vagyunk elkészíteni a táblánkat. Nézzük meg, hogyan.
CREATE TABLE alkalmazottak
(id char(10) NOT NULL,
veznev char(30),
kernev char(30),
beosztas char(30),
eletkor smallint,
szulido date,
fizetes smallint);
A példából világosan
látszik, hogyan kell táblákat létrehoznunk. Ha egy tábla oszlopnevének
definiálásakor megadjuk a NOT NULL
attribútumot, akkor az adott mezőt mindig ki kell tölteni, vagyis ez a sor soha
nem lehet üres a relációban! Ellenkező esetben hibaüzenetet kapunk. Amennyiben
nincsen már szükségünk egy bizonyos táblára, akkor azt megszüntethetjük a
Parancs kiadásával.
Az adatfelvitel során
gyakran kerülhetünk olyan helyzetbe, hogy a táblák szerkezetét módosítanunk
kell. Sajnos az SQL-ben nincsen "igazi lehetőségünk" arra, hogy a
táblákban szereplő oszlopok nevét valamint tulajdonságát megváltoztassuk,
mindössze csak új oszlopot tudunk beilleszteni. Erre szolgál az
utasítás formátum.
(Minden egyéb változtatást csak úgy tudunk megcsinálni, hogy létrehozunk egy új
táblát, és a régi táblából feltöltjük adatokkal, majd szükség esetén a régi
táblát töröljük.)
Lássuk rá egy példát.
Adjuk az előbbi táblázathoz egy új oszlopot, amelyben a személy nemét logikai
típusként adjuk meg (Ha férfi akkor igaz, ha nő akkor hamis.)
ALTER TABLE alkalmazottak
ADD (neme logical)
(Szeretném megjegyezni,
hogy a mai modern adatbáziskezelő rendszerekben nagyon könnyen módosíthatjuk az
oszlopokat és azok tulajdonságait. Nagyon sok rendszer tartalmaz grafikus
kezelőfelületet az adatbázis szerkezetének testreszabásához, amely
használatával szinte minden módosítást képesek vagyunk végrehajtani. Ezekkel
pár cikkel később szintén megismerkedünk.)
Bizonyos rendszerekben a
táblák tulajdonságának a megváltoztatásához használhatjuk a következő parancsot
is.
Abban az esetben ha az
attribútum csak NULL értéket tartalmaz, akkor lehetőség van az adattípus
módosítására valamint a szélesség növelésre is. Ha sikerült létrehoznunk egy
adatbázist valamint benne egy adattáblát, akkor máris készen állunk arra, hogy
feltöltsük adatokkal. Adatokat az
Nézzük meg, mit jelent
ez a gyakorlatban. Vigyünk fel adatokat:
INSERT INTO alkalmazottak
(id, veznev,
kernev, beosztas, eletkor, szulido, fizetes, nem) VALUES ("0001",
"Adat", "Aladar", "programozó", 29, {73.12.10},
100000, .t.);
Nézzük meg a fenti
kódot. Mi derül ki belőle? Az utasításban felsorolt oszlopok sorrendben
felveszik az értéklistában szereplő értékeket. Természetesen az is módunkban
áll, hogy az oszlopneveket tetszőleges sorrend szerint felcseréljük, de ebben
az esetben figyeljünk arra, hogy hasonló változtatás történjen meg az
értéklistában is, mert egyes adattípusok mindig csak a megfelelő oszlopba
kerülhetnek bele. (Pl. a szulido oszlopba nem írhatjuk be beosztas oszlop
értékét.) Megtehetjük
azt is, hogy elhagyjuk az oszlopnevek felsorolását, de ebben az esetben
figyelnünk kell arra, hogy az egyes értékek az oszlopok neveinek megfelelő
sorrendben kövessék egymást. Nézzük meg a kódban azt is, miként adtuk meg az
egyes értékeket.
Egy tábla rekordjait
bármikor könnyen módosíthatjuk az
Elemezzük egy kicsit az
UPDATE parancs formátumát. Legelőszöris meg kell határoznunk azt, hogy melyik
táblán szeretnénk módosítást végrehajtani, majd ezután meg kell adnunk azoknak
az oszlopoknak a nevét, amelyek értékein szeretnék módosításokat végrehajtani.
A kifejezés jelenti magát a módosítás
értékét, vagyis ez lesz majd az adott oszlop új értéke. Az egyenlőség jobb
oldalán a reláció attribútumaiból álló kifejezés is állhat. Ilyenkor az
aktuális sor tartalma alapján értékelődik ki a kifejezés. (Lásd lenti példa.)
Kapcsos zárójelek között
szerepel a "WHERE logikai kifejezés", amelynek a megadása nem
kötelező. Ha ezt elhagyjuk akkor "kifejezés"-ben definiált módosítás
az adott oszlop minden során végrehajtódik. De ha szeretnénk leszűkíteni azt,
hogy csak bizonyos rekordok értékeiben történjen változás, akkor megadhatunk logikai feltételeket is. (Ezek között
használhatjuk az AND, OR, NOT stb. logikai kifejezéseket, valamint relációs
operátorokat is : <, =, >, >=, <=, !=)
A parancs használatára
mutat példát a következő feladat: Növeljük meg az alkalmazottak táblában
15%-kal azoknak a személyeknek a fizetését, akiknek jelenlegi fizetése kisebb
mint 50.000.
UPDATE alkalmazottak
SET fizetes = 1,15 * fizetes
Where fizetes < 50000;
A relációk(táblák)
sorait(rekordjait) természetesen törölni is tudjuk. Erre szolgál a DELETE
parancs. A parancs formátuma a következő:
Töröljük ki a táblából
azokat a személyeket, akik a idősebbek 45 évnél és fizetésük nagyobb mint
70.000.
DELETE FROM alkalmazottak
WHERE eletkor > 45 AND fizetes >
70000;
Mára ennyit az SQL
nyelvről. A következő cikkben folytatom az SQL nyelv bemutását, és bemutatom
azt, hogyan tudunk lekérdezni az adatbázisból.
Kiszely Gábor - kg@kgb.hu