410 likes | 489 Views
SQL. 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).
E N D
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 • INTEGER egész szám (röviden INT) • REAL valós (lebegőpontos) szám, másnéven FLOAT • DECIMAL(n[,d]) n jegyű decimális szám, ebből d tizedesjegy • DATE dátum • TIME idő
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] oszloplista projekció FROM táblanévlista Descartes-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. FROM Descartes-szorzat 2. WHERE szelekció 3. GROUP BY csoportosítás 4. HAVING csoport-szelekció 5. SELECT projekció 6. ORDER BY rendezé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.