SQL
SQL = Structured Query Language (= struktúrált lekérdező nyelv). A relációs adatbázis-kezelés szabványos nyelve. Nem algoritmikus nyelv, de algoritmikus nyelvekbe beépíthető (beágyazott SQL). 1976: SEQUEL (= Structured English QUEry Language) az SQL eredeti változata, IBM-nél fejlesztették ki. 1986: szabvány SQL, az ANSI (= American National Standards Institute) definiálta. 1992: SQL2 szabvány. Továbbfejlesztés: SQL3 (rekurzió, triggerek, objektum-relációs modell)
SQL Az SQL utasításait két fő csoportba szokták sorolni: DDL (= Data Definition Language): adatstuktúra definiáló utasítások. DML (= Data Manipulation Language): adatokon műveletet végző utasítások. alábbi csoportokban tárgyaljuk az SQL utasításokat: - adatbázisséma definiálása (DDL), - adatok aktualizálása (DML), - lekérdezési lehetőségek (DML).
Szintaxis Kisbetű és nagybetű a nyelv alapszavaiban egyenértékű. Utasítások sorfolytonosan írhatók, lezárás pontosvesszővel. Szövegkonstans: 'szöveg' Változó nincs, csak tábla- és oszlopnevekre lehet hivatkozni. Kifejezésben hivatkozás egy tábla adott oszlopára: tábla.oszlop (ha a tábla egyértelmű, akkor elhagyható). Logikai műveletek: AND, OR, NOT Az utasítások szintaxisának leírásánál az elhagyható részleteket szögletes zárójellel jelöljük.
Speciális logikai kifejezések x IS NULL: igaz, ha az x mező értéke NULL. x BETWEEN a AND b: igaz, ha a x b. x IN halmaz: igaz, ha x megegyezik a megadott halmaz egy elemével. x relációjel ALL halmaz: igaz, ha x a halmaz minden elemével a megadott relációban van. x relációjel ANY halmaz: igaz, ha a halmaznak van olyan eleme, amellyel x a megadott relációban van. EXISTS halmaz: igaz, ha a halmaz nem üres. x LIKE minta: igaz, ha az x karaktersorozat megfelel a megadott mintának.
Relációsémák definiálása - DDL CREATE TABLE táblanév ( oszlopnév adattípus [feltétel],......, oszlopnév adattípus [feltétel] [, táblaFeltételek] );
Adattípusok CHAR(n)n hosszúságú karaktersorozat VARCHAR(n)legfeljebb n hosszúságú karaktersorozat INTEGERegész szám (röviden INT) REALvalós (lebegőpontos) szám, másnéven FLOAT DECIMAL(n[,d])n jegyű decimális szám, ebből d tizedesjegy DATEdátum TIMEidő
Alapértelmezett értékek NULL – nem ismert DEFAULT Típus definiálása után vagy lehet később módosítani
Táblák, relációsémák változtatása Táblák megszüntetése DROP Tábla;
Táblák, relációsémák változtatása Relációsémák módosítása ALTER TABLE táblanév [ADD (újelem,..., újelem)] [MODIFY (módosítás,..., módosítás)] [DROP (oszlop,..., oszlop)]; újelem: egy "oszlopnév adattípus [feltétel]” módosítás: "oszlopnév adattípus [feltétel]”
Indexek létrehozása nem része az SQL2 szabványnak CREATE [UNIQUE] INDEX indexnév ON tábla(oszloplista); DROP INDEX indexnév;
Megszorítások SQL -ben Elsődleges kulcs, kulcsok Külső kulcs – hivatkozási épség Attribútumértékekre vonatkozó megszorítások Globális megszorítások
Kulcsok megadása SQL -ben PRIMARY KEY - elsődleges kulcs CREATE TABLE utasításon belül kétféle módon: – Attribútum megadásakor – Egy újabb deklarációs sorral UNIQUE – kulcs (több is megadható)
Hivatkozási épség – idegen kulcs CREATE TABLE utasításon belül kétféle módon: – Attribútum megadásakor REFERENCES tábla(attribútum) – Egy újabb deklarációs sorral FOREIGN KEY (oszloplista) REFERENCES tábla(oszloplista) [ON-feltételek]
Hivatkozási épség fenntartása Ha a feltétel megsérülne visszautasítjuk a módosítást Továbbgyűrűző eljárás NULL értékre állítás módszere
Hivatkozási épség fenntartása ON UPDATE CASCADE: ha S egy sorában változik a kulcs értéke, akkor a rá való T-beli hivatkozások is módosulnak ON DELETE CASCADE: Ha S-ben törlünk egy sort, akkor T-ben is törlődnek a rá hivatkozó sorok ON UPDATE SET NULL: ha S egy sorában változik a kulcs értéke, akkor T-ben a rá való külső kulcs hivatkozások értéke NULL lesz. ON DELETE SET NULL: ha S-ben törlünk egy sort, akkor T-ben a rá való külső kulcs hivatkozások értéke NULL lesz.
Attribútumértékekre vonatkozó megszorítások Attribútumra vonatkozó megszorítás CREATE TABLE utasításban Értéktartományra vonatkozó megszorítás CREATE DOMAIN attribútum típus AS CHECK (VALUE IN (kifejezés)) CHECK (VALUE (kifejezés))
Globális meszorítások Sorokra vonatkozó CREATE TABLE utasításban Önálló megszorítások CREATE név ASSERTION CHECK feltétel
Megszorítások módosítása Megszorítások elnevezése CONSTRAINT kulcsszóval név CHAR(30) CONSTRAINT NévKulcs UNIQUE ALTER TABLE Dolgozó DROP CONSTRAINT NévKulcs ALTER TABLE Dolgozó ADD CONSTRAINT NévKulcs UNIQUE (név);
Adattábla aktualizálása (DML) táblába új sor felvétele Sor(ok) módosítása Sor(ok) törlése
táblába új sor felvétele INSERT INTO táblanév [(oszloplista)] VALUES (értéklista); Oszloplista megadása nélkül is lehet
Sor(ok) módosítása UPDATE táblanév SET oszlop = kifejezés,..., oszlop = kifejezés [ WHERE feltétel ]; Where feltétel nélkül minden sorra
Sor(ok) törlése DELETE FROM táblanév [ WHERE feltétel ]; Where feltétel nélkül minden sorra
Lekérdezés (DML) Egy vagy több adattáblából egy eredménytábla előállítása, amely a képernyőn listázásra kerül, vagy más módon használható fel. Egyetlen SELECT utasítás akár egy komplex felhasználói programot helyettesíthet
Lekérdezés (DML) SELECT [DISTINCT] oszloplista FROM táblanévlista [WHERE feltétel];
Lekérdezés (DML) "SELECT A1,...,An FROM T1,...,Tm WHERE feltétel" utasítás egyenértékű a következő relációs algebrai kifejezéssel: E = A1,...,An( feltétel(T1 x...x Tn))
A relációs algebra műveleteinek megvalósítása Projekció: SELECT [DISTINCT] A1,...,An FROM T; Szelekció: SELECT * FROM T WHERE feltétel;
A relációs algebra műveleteinek megvalósítása Descartes-szorzat: T1 x T2 SELECT * FROM T1,T2; Théta join: SELECT * FROM T1,T2 WHERE feltétel;
A relációs algebra műveleteinek megvalósítása Unió: (SELECT * FROM T1) UNION (SELECT * FROM T2); Metszet: (SELECT * FROM T1) INTERSECT (SELECT * FROM T2); Különbség: (SELECT * FROM T1) EXCEPT (SELECT * FROM T2);
Alias nevek SELECT után megadott oszloplista tetszőleges kifejezéseket is tartalmazhat az eredménytábla oszlopainak elnevezésére alias neveket adhatunk meg: FROM után megadott táblák esetében is használhatók, pl. ha egy táblára többször is haivatkozunk
Összesítő függvények függvénynév ( [DISTINCT] oszlopnév ) AVG: átlagérték. SUM: összeg. MAX: maximális érték. MIN: minimális érték. COUNT: elemek száma.
Csoportosítás GROUP BY oszloplista – csoportba azok a sorok melyeknél oszloplista értéke azonos. – eredménytáblában egy csoportból egy rekord – Az összesítő függvények csoportonként hajtódnak végre.
Csoportosítás HAVING feltétel – a feltételnek eleget tevő csoportok kerülnek összesítésre az eredménytáblába.
Eredménytábla rendezése ORDER BY oszlopnév [DESC],..., oszlopnév [DESC] Alapértelmezésben növekvő, ha fordítva akarjuk akkor DESC = descending
A SELECT utasítás általános alakja SELECT [DISTINCT] oszloplistaprojekció FROM táblanévlistaDescartes-szorzat [WHERE feltétel]szelekció [GROUP BY oszloplista]csoportosítás [HAVING feltétel]csoport-feltétel [ORDER BY oszloplista];rendezés
Végrehajtási sorrend 1. FROMDescartes-szorzat 2. WHERE szelekció 3. GROUP BYcsoportosítás 4. HAVING csoport-szelekció 5. SELECT projekció 6. ORDER BYrendezés
Alkérdések valamely SQL utasítás belsejében szereplő SELECT utasítás amely egy relációt vagy skalárt eredményez Halmazelméleti metszet művelet megvalósítása SELECT * FROM T1 WHERE EXISTS ( SELECT * FROM T2 WHERE T1.A1=T2.A1 AND... T1.An=T2.An );
Alkérdések INSERT utasítás is tartalmazhat alkérdést: INSERT INTO táblanév [(oszloplista)] SELECT... ; A SELECT annyi oszlopot kell hogy kiválasszon, amennyit oszloplista tartalmaz
Virtuális táblák A virtuális tábla (nézettábla, view) nem tárol adatokat Nézettáblák alkalmazási lehetőségei: - Származtatott adattáblák létrehozása, amelyek a törzsadatok módosításakor automatikusan módosulnak (pl. összegzőtáblák). - Bizonyos adatok elrejtése egyes felhasználók elől (adatbiztonság vagy egyszerűsítés céljából).
Virtuális táblák CREATE VIEW táblanév [(oszloplista)] AS alkérdés; SELECT utasítás eredménytáblája alkotja a nézettáblát ugyanúgy használhatók, mint a tárolt adattáblák
Virtuális táblák Nézettábla módosítása lehetséges kivéve: ha definíciója - DISTINCT opciót, - FROM után egynél több táblanevet (join művelet), - GROUP BY alparancsot tartalmaz.