Adatbázis rendszerek I Az SQL nyelv elemei I Általános Informatikai Tsz. Dr. Kovács László
rendszerek igényelnek egy parancsnyelvet A T SQL ‘autók és tulajdonosok’ Az elkészített RDBMS rendszerek igényelnek egy parancsnyelvet A T SEQUEL SQL (86,89,99,3) DB create table A (R char(6) primary key,.. SQL KL
SQL A SQL jellemzése: - a relációs algebrára épül - kiterjed az adatkezelő tevékenységekre: - adatdefiniáló (DDL) - adatkezelő (DML) - lekérdező (DQL) - vezérlő (DCL) - descriptiv, a műveleti lépéseket kell megadni - magasszintű parancsok - nem tartalmaz vezérlési, IO elemeket - halmazorientált - bővülő nyelv - van interaktív és beépülő változata Az SQL nem DBMS KL
Tipikus műveleti sorrend: - objektumok, táblák létrehozása SQL Tipikus műveleti sorrend: - objektumok, táblák létrehozása - adatok felvitele - adatok lekérdezése - adatok módosítása - szerkeztek módosítása - működési környezet beállítása Termék Termék kód név ár dátum 1233 Alma 23 98.V.3 01.I.8 1253 Dió 783 4433 Mogyi 97.II.11 6233 Bab 79 1233 Alma 75.X.2 23 98.V.3 KL
SQL Utasítások csoportosítása DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER DML: - rekord felvitel INSERT - rekord törlés DELETE - rekord módosítás UPDATE DQL: - lekérdezés SELECT DCL: - védelem GRANT,.. - tranzakció kezelés COMMIT,.. KL
SQL Objektum létrehozása: CREATE objektumtípus azonosító paraméterek; CREATE TABLE tnév (mnev1 tipus1 intfelt1, …,intfelt) ... ; CHAR(n) NUMBER(n,m) DATE PRIMARY KEY NOT NULL UNIQUE CHECK felt REFERENCING tabla PRIMARY KEY(m1,m2) FOREIGN KEY(m1,m2) REFERENCING tabla CHECK felt CREATE TABLE AUTO (RSZ CHAR(6) PRIMARY KEY, AR NUMBER(9) NOT NULL, IDO DATE); KL
SQL Objektum megszüntetése: DROP objektumtípus azonosító paraméterek; DROP TABLE tnév ; Objektum séma módosítás: ALTER objektumtípus azonosító paraméterek; ALTER TABLE tnév ADD | MODIFY (mnev tip intfelt | intfelt); DROP TABLE AUTO; ALTER TABLE AUTO ADD (TULAJ REFERENCING EMBER); A műveletek nem tranzakció hatáskörben futnak le! Séma lekérdezése lsd. SELECT KL
SQL Rekord felvitele: INSERT INTO tabla VALUES (ert1, ert2, …,ertn); INSERT INTO tabla SELECT …; INSERT INTO tabla VALUES (mezo=ertek,…); Az érték lehet NULL is. Nem maradhat ki mező. Fontos a mezősorrend INSERT INTO AUTO VALUES (“bju564”,234,”FIAT”); INSERT INTO AUTO VALUES (“bju564”,234,NULL); INSERT INTO AUTO VALUES (RSZ=“bju564”,...); Dátumok felvitele konverziós függvénnyel: INSERT INTO AUTO VALUES(DATUM = TO_DATE(“2002.02.12”,”YYYY.MM.DD”),…); KL
SQL Rekord törlése: DELETE FROM tabla WHERE feltétel; A feltételnek eleget tevő rekordok törlődnek Ha elmarad a WHERE tag, minden rekord törlődik A feltétel rész részletesen a SELECT-nél jön DELETE FROM AUTO WHERE AR<1200000; Rekord módosítása: UPDATE tabla SET mezo= érték,... WHERE feltétel; A feltételnek eleget tevő rekordok módosulnak Ha elmarad a WHERE tag, minden rekord módosul UPDATE AUTO SET AR = AR * 1.2 WHERE AR<1200000; KL
SQL Adatok lekérdezése: SELECT mezőlista FROM tabla1,tabla2, ...OUTER JOIN... WHERE feltétel …(SELECT…) ... GROUP BY cskif HAVING feltétel UNION | INTERSECT | MINUS … SELECT … … ORDER BY INTO ... az SQL ereje igen összetett is lehet sokkal hatékonyabb, mint algoritmust irni KL
SQL SELECT - a projekció megadása jele: mlista(r) SELECT mlista FROM tábla; SELECT RSZ, TIPUS FROM AUTO; Az mlista helyén * áll, ha minden mező kell KL
SQL SELECT - a szelekció megadása jele: felt(r) SELECT mlsita FROM tábla WHERE feltétel; SELECT * FROM AUTO WHERE SZIN = ”PIROS” OR TIPUS = ”MAZDA”; KL
SQL Műveletek kombinálása: SELECT RSZ FROM AUTO WHERE SZIN = ”PIROS” OR SZIN=”KEK”; KL
SQL SELECT - a join megadása jele: r1 r2 SELECT mlista FROM tabla1, tabla2,.. WHERE feltétel; Ha a feltétel elmarad Descartes szorzatot kapunk Kettőnél több tábla is összekapcsolható KL
SQL Szelekciós join: SELECT * FROM AUTO, EMBER WHERE TULAJ = IGSZ; Ha több táblában is azonos elnevezésű mező van, akkor a kibővitett mezőnevet használjuk: tábla.mező SELECT * FROM AUTO, EMBER WHERE AUTO.TULAJ = EMBER.IGSZ; Ha hosszú a táblanév, alias nevet használhatunk: tábla alias SELECT * FROM AUTO A, EMBER E WHERE A.TULAJ = E.IGSZ; KL
SQL SELECT - az outer-join megadása SELECT mlista FROM tábla1 LEFT RIGTH | FULL | OUTER JOIN tábla2 ON feltétel WHERE felt; SELECT * FROM AUTO A RIGHT OUTER JOIN EMBER E ON A.TULAJ = E.IGSZ WHERE A.AR > 6000000; SELECT .. FROM tabla1,tabla2 WHERE t1.m1 (+)= t1.m2; T1 +T1.A = T2.A T2 T1 T2 A B A C A B A C 1 C 3 L 1 C 1 T 2 G 1 T 2 G 3 U 5 P 3 U 3 L KL
SQL SELECT - a kiterjesztés megadása jele: mlista(r) SELECT kif név,... FROM …; Az előállító kifejezés A mezőkhöz új nevet is rendelhetünk SELECT AR/100 UJAR FROM AUTO; KL
SQL SELECT - az aggregáció megadása jele: aggregációs-lista (r) SELECT aggregációs-lista FROM tábla; SUM(mez.kif) AVG(mez.kif) COUNT(mez.kif) MAX(mez.kif) MIN(mez.kif) SELECT COUNT(*) FROM AUTO; KL
SQL SELECT - az aggregáció és csoportképzés megadása jele: csoport képzési kifejezésaggregációs-lista (r) SELECT aggregációs-lista FROM tábla GROUP BY csopképzkif; SELECT TIPUS, AVG(AR) FROM AUTO GROUP BY TIPUS; KL
SQL SELECT - szűrés az elkészült csoportokból SELECT agg-lista FROM tábla GROUP BY cskif HAVING feltétel; SELECT TIPUS FROM AUTO GROUP BY TIPUS HAVING AVG(AR) > 10000000; A csoportképzés előtti és utáni szelekció együttesen is szerepelhet: SELECT TIPUS FROM AUTO WHERE SZIN=”PIROS” GROUP BY TIPUS HAVING AVG(AR) > 10000000; WHERE HAVING KL
SQL SELECT - eredmény rekordok rendezése SELECT mlista FROM tábla ORDER BY mezo1 mod1, mezo2 ...; ASC DESC Nem része a relációs algebrának A második mező szerinti szempont csak az első egyezősége esetén lényeges SELECT RSZ, TIPUS, AR FROM AUTO ORDER BY AR DESC, TIPUS; Lehet sorszámmal is hivatkozni a mezőkre SELECT RSZ, TIPUS, AR FROM AUTO ORDER BY 3 DESC, 2; KL
SQL SELECT - speciális szelekciós operátorok kif LIKE minta sztring kifejezés illeszkedése egy mintára Speciális karaketerek a mintában: % több karaktert helyettesít _ egy karaktert helyettesít … WHERE NEV LIKE ”%PETER%” ... kif IS [NOT] NULL üres-e a kifejezés kif BETWEEN kif2 AND kif3 köztes érték vizsgálat KL
SQL Mintapélda BOROK(kod, nev, gyarto, fajta, ar) VEVO(vkod, nev, cim) RENDELES(vevo, bor, mennyiseg,datum) 1. azon vevők, akik rendeltek Bikavért SELECT V.NEV FROM VEVO V, RENDELES R, BOROK B WHERE V.VKOD = R.VEVO AND R.BOR = B.KOD AND B.NEV LIKE ”BIKAVER%”; 2. Melyik gyártó termel 5-nél több vörös bort gyarto(count(*)>5 (gyartogyarto,count(*)( fajta=‘voros’(BOROK)))) SELECT GYARTO FROM BOROK WHERE FAJTA = ”VOROS” GROUP BY GYARTO HAVING COUNT(*) > 5; KL
SQL Gyakorlati eszköz: Oracle RDBMS Felület: interaktív SQL: sqlplus Gép: ekrazit Név/jelszó: Fontosabb, nem szabvány parancsok: - exit - describe tnev - ALTER USER unev IDENTIFIED BY jelszo - SPOOL fnev - SPOOL OFF - SET PAGESIZE sor - SET PAUSE ON KL