Az SQL nyelv Structured Query Language (Struktúrált lekérdező nyelv) Az SQL a relációs adatbázis-kezelő rendszerek ma legelterjedtebb szabványosított adatbáziskezelő nyelve. Az IBM dolgozta ki 1983-ban, a DB2 adatbázis-kezelőjéhez. Tulajdonságai és szerepe: - szabványosított lekérdező nyelv, melyet több relációs adatbázis-kezelő ismer, különböző operációsrendszerű környezetben - nem algoritmikus nyelv (nem tartalmaz algoritmus szerkezeteket: ciklus, elágazás, stb) - halmazorientált nyelv (mely relációkon dolgozik) - két felhasználási lehetősége van: önálló SQL, vagy beágyazott SQL - alapegységeket épít fel (kulcsszavak, azonosítók, műveleti jelek, literátok (szöveg szám, dátum, konstans)), és azokat elválasztójelek határolják (tab, szóköz, soremelés, aposztróf, idézőjel, zárójel, pontosvessző) - nem tesz különbséget a kulcsszóban a kis- és nagybetű között - az utasítások végén pontosvessző szerepel Azonosító: objektumok, változók, eljárások, adatszerkezetek, programok szimbolikus nevei. Legfeljebb 30 karakterből állhat, kötelezően betűvel kezdődik. Tartalmazhat: kis- és nagybetűket, aláhúzást, #, @, $ jeleket, számjegyeket. Kifejezés: numerikus, szöveges, dátumjellegű és logikai adatmezőkből, literátorokból, operátorokból, programozási nyelvi változókból és SQL kulcsszókból áll. Kifejezés része lehet kifejezés is. Az utasítások értelmes angol felszólító mondatok, melyek igével kezdődnek. Ezt követik a záradékok, melyeket kulcsszó vezet be. A záradékok leírják az utasítás végrehajtásának körülményeit, feltételeit. Az SQL a nevével ellentétben komplett adatbázis-kezelő nyelv, amely tartalmaz: adatdefiníciós nyelvet (DDL) adatmanipulációs (adatkezelő) nyelvet (DML) adatbiztonsági nyelvet (DLL) körébe tartozó utasításokat is. Az SQL utasításai Adatdefiníciós utasítások: táblák és állományok létrehozására, megszüntetésére, módosítására használhatók CREATE (létrehozás), ALTER (módosítás), DROP (törlés) Adatkezelő utasítások: adatok kiválogatására, törlésére és tartalmának módosítására szolgálnak SELECT (visszakeresés), INSERT (beszúrás), UPDATE (módosítás), DELETE (törlés) Adatbiztonsági utasítások: hozzáférési jogok szabályozására GRANT (jogok adására), REVOKE (jogok visszavonására), LOCK (zárolásra) SQL parancsokon belüli fix szöveg: nagybetűs felhasználó által megadható részek: kisbetűs parancsok elhagyható részei: szögletes zárójelben [] előző rész ismételhetősége:
Tábla létrehozása CREATE TABLE táblanév Adatdefiníciós utasítások (mezőnév adattípus [feltétel],, mezőnév adattípus [feltétel] [, táblafeltételek] Az utasítás részei: táblanév: a létrehozandó tábla neve mezőnév: az új tábla egy mezőjének neve (legalább egy mezőt létre kell hoznunk) adattípus: az új tábla mezőjének adattípusa feltételek: csak egy adott mezőre vonatkoznak táblafeltételek: egész táblára vonatkoznak Adattípusok: BYTE: bájt SMALLINT=SHORT: egész INTEGER=LONG: hosszú egész DECIMAL (X, [y]): decimális (X számjegyek száma, y tizedesjegyek száma) REAL: egyszeres (lebegőpontos) FLOAT=DOUBLE: dupla (lebegőpontos) DATE: dátum TIME: időpont CHAR(n)=TEXT(n): szöveg (n hosszúságú) MEMO: feljegyzés CURRENCY: pénznem COUNTER: számláló LOGICAL: logikai Beállíthatunk alapértelmezett értéket a DEFAULT parancs segítségével. feltételek: PRIMARY KEY elsődleges kulcs, UNIQUE kulcs, REFERENCES tábla(mező) külső kulcs táblafeltételek: PRIMARY KEY (mezőlista) elsődleges kulcs, UNIQUE (mezőlista) kulcs, FOREIGN KEY (mezőlista) REFERENCES tábla(mezőlista) külső kulcs
Hozzuk létre az OSZTÁLY (osztálykód, osztálynév, vezadószám) DOLGOZÓ (adószám, név, lakcím, osztálykód) táblákat! (az aláhúzott az elsőgleges kulcs, a dőlt betűs a külső kulcs!!!) CREATE TABLE Osztály (osztálykód Text(3) PRIMARY KEY, osztálynév Text(20), vezadószám Decimal(10) CREATE TABLE Dolgozó (adószám Decimal(10) PRIMARY KEY, név Text(30), lakcím Text(40) DEFAULT ismeretlen, osztálykód Text(3) REFERENCES Osztály(osztálykód) A dolgozó táblát így is létre lehet hozni: CREATE TABLE Dolgozó (adószám Decimal(10), név Text(30), lakcím Text(40), osztálykód Text(3), PRIMARY KEY (adószám), FOREIGN KEY (osztálykód) REFERENCES Osztály(osztálykód) Teljes tábla törlése DROP TABLE táblanév; A tábla összes adata elvész és tárterület szabadul fel a rendszer számára. Töröljük a Dolgozó nevű táblát! DROP TABLE Dolgozó; Tábla szerkezetének módosítása ALTER TABLE táblanév ADD (mezőnév adattípus [feltétel],, mezőnév adattípus [feltétel] ALTER TABLE táblanév MODIFY (mezőnév adattípus [feltétel],, mezőnév adattípus [feltétel] ALTER TABLE Dolgozó ADD (szüldátum DATE A dolgozó táblához hozzáadtunk egy új születési dátum mezőt. ALTER TABLE Dolgozó MODIFY (lakcím Text(60) A dolgozó tábla lakcím mezőjének méretét 60 karakterre módosítottuk. ALTER TABLE Osztály MODIFY (vezadószám REFERENCES Dolgozó(adószám) Az osztály tábla vezadószám mezőjéből külső kulcsot készítettünk.
Index létrehozása CREATE [UNIQUE] INDEX indexnév ON tábla(mezőlista Az utasítás részei: indexnév: a létrehozandó index neve tábla: A tábla neve, melyet indexelni akarunk. mezőlista: Az indexelendő mezők nevei. Egymezős index esetén írjuk a mező nevét zárójelben a tábla neve után. Többmezős index esetén soroljuk fel azokat a mezőket, amelyekre az index vonatkozik, vesszővel elválasztva. Csökkenő sorrend létrehozásához használjuk a DESC foglalt szót; egyébként a sorrend növekvő. Az UNIQUE foglalt szó egyedi indexre utal. CREATE INDEX DolgInd ON Dolgozó(név, osztálykód Az index megszüntetése DROP INDEX indexnév ON táblanév(mezőlista Egy utasításban csak egy indexet szüntethetünk meg. DROP INDEX DolgInd ON Dolgozó(név, osztálykód Adatmanipulációs (adatkezelő) utasítások Új rekord felvétele INSERT INTO táblanév [(mezőlista)] VALUES (értéklista INSERT INTO Dolgozó (név, adószám) VALUES ( Tóth Aladár, 1111 Az mezőlistában nem szereplő mezők NULL értéket kapnak. INSERT INTO Dolgozó VALUES (1111, Tóth Aladár,, 12 Rekord módosítása (frissítő lekérdezés) UPDATE táblanév SET mező = kifejezés,, mező = kifejezés [WHERE feltétel]; UPDATE Dolgozó SET lakcím = Szeged, Rózsa u. 5. WHERE név = Kovács József ; UPDATE Dolgozó SET osztálykód = 003 WHERE osztálykód = 012 ; Rekord törlése (törlő lekérdezés) DELETE FROM táblanév [WHERE feltétel]; Ha a WHERE feltételt elhagyjuk, az összes rekord törlődik a táblából. DELETE FROM Dolgozó WHERE név = Kovács József ; DELETE FROM Osztály;
Lekérdezések (választó lekérdezések) A lekérdezéseket mindig a SELECT igével kezdjük, és ezt követik a záradékok, melyek sorrendje kötött. SELECT mezőlista FROM táblanév[lista] [WHERE feltétel]; Ha minden mezőre szeretnénk vonatkoztatni a lekérdezést, akkor a mezőlista helyére *-ot írunk. SELECT lakcím FROM Dolgozó WHERE név = Kovács József ; SELECT * FROM Dolgozó WHERE név = Kovács József ; Rendezés lekérdezésben (ORDER BY) ORDER BY mezőnév [DESC],, mezőnév [DESC]; Az ORDER BY záradékában megadott mezők szerint növekvő sorrendben jelennek meg a rekordok. Amennyiben csökkenő sorrendet szeretnénk használjuk a DESC záradékot. SELECT osztálykód, név, fizetés FROM Dolgozó ORDER BY osztálykód, fizetés DESC; Oszlopfüggvények lekérdezésben (GROUP BY) Az SQL-ben olyan függvények is rendelkezésre állnak, amelyek nem a lekérdezett mezők elemeire egyenként, hanem a vizsgált oszlop egészére vonatkoznak. Leggyakrabban használt függvények: SUM, AVG, COUNT, MIN, MAX. GROUP BY mezőlista; A GROUP BY záradékot használjuk, ha csoportosítani akarjuk a talált sorokat és a műveleteket, minden egyes csoportban külön-külön végre akarjuk hajtani az oszlop függvényekkel. SELECT osztálykód, AVG(fizetés) FROM Dolgozó GROUP BY osztálykód; HAVING záradék lekérdezésben A HAVING záradék hatására a rendszer kizárja a csoportosítás során keletkezett azon sorokat a végeredményből, amelyek nem felelnek meg a HAVING kulcsszó után megadott feltételnek. SELECT osztálykód, AVG(fizetés) FROM Dolgozó GROUP BY osztálykód HAVING AVG(fizetés) > 80000; Allekérdezés WHERE feltételben megadott SELECT. Táblakészítő lekérdezés INSERT INTO táblanév [mezőlista] SELECT ; Létrehozza a táblanév nevű táblát és feltölti a mezőlistát a SELECT-ben kiválogatott rekordokkal. Hozzáfűző lekérdezés SELECT mezőlista INTO táblanév FROM táblanév; Az első táblanévből kiválogatott rekordokat a második táblanévhez fűzi.