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: …
Adatdefiníciós utasítások Tábla létrehozása CREATE TABLE táblanév (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: SMALLINT=SHORT: INTEGER=LONG: DECIMAL (X, [y]): REAL: FLOAT=DOUBLE: DATE: TIME: CHAR(n)=TEXT(n): MEMO: CURRENCY: COUNTER: LOGICAL:
bájt egész hosszú egész decimális (X számjegyek száma, y tizedesjegyek száma) egyszeres (lebegőpontos) dupla (lebegőpontos) dátum időpont szöveg (n hosszúságú) feljegyzés pénznem számláló 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
PÉLDA: 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. PÉLDA: 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]); PÉLDA: 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. PÉLDA: 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. PÉLDA: 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); PÉLDA: 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]; PÉLDA: 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. PÉLDA: 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. PÉLDA: 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. PÉLDA: 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. PÉLDA: 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. PÉLDA: 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.