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

 

CREATE DATABASE adatbázisnév;

 

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

 

SHOW DATABASE;

 

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:

 

START DATABASE adatbázisnév;

 

Ha szeretnénk a megnyitott adatbázist bezárni, akkor azt a

 

STOP DATABASE;

 

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

 

DROP DATABASE adatbázisnév;

 

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:

 

CREATE TABLE táblanév (oszlopnév adattípus(méret)) [, oszlopnév adattípus(méret)…];

 

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

 

DROP TABLE táblanév;

 

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

 

ALTER TABLE táblanév

ADD (oszlopnév adattípus [,oszlopnév adattípus..]);

 

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.

 

ALTER TABLE táblanév

MODIFY (oszlopnév adattípus [,oszlopnév adattípus..]);

 

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

 

INSERT INTO táblanév

[(oszlopnevek)]

VALUES (értékek);

 

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

 

UPDATE táblanév

SET oszlopnév = kifejezés [,oszlopnév = kifejezés…]

[WHERE  logikai kifejezés ];

 

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ő:

 

DELETE FROM táblanév

[WHERE feltétel];

 

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