Adatbázis rendszerek I Kovács László Az SQL nyelv alapjai
SQL kialakulása 1974 : System/R mintarendszer (IBM) Új parancsnyelv kidolgozása meglévő rekord orientált új halmazorientált FIND KIADO FIRST FOR C=„H” DO WHILE STATUS_OK IF L> 100 SET l = l –10 STORE KIADO ENDIF FIND KIADO NEXT ENDDDO ? képek: wikipedia igények: - relációs algebrán alapuljon - egyszerűség - hatékony implementáció
SQL kialakulása 1975: SEQUEL Structured English Query Language magas szintű műveletek egymásba ágyazható műveletek természetes nyelvhez közelít FIND KIADO FIRST FOR C=„H” DO WHILE STATUS_OK IF L> 100 SET l = l –10 STORE KIADO ENDIF FIND KIADO NEXT ENDDDO D. Chamberlin UPDATE KIADO SET L = L-10 WHERE C = „H” aktualizáld a KIADO-t, legyen L = L-10, ahol C = „H”
SQL kialakulása Több-résztvevős folyamat a fejlődése termékek 1975: SEQUEL 1977: SEQUEL/2 (SQL) 1979: system/38 SQL 1979: Oracle SQL 1983: DB2 SQL Ingres Oracle IBM DB2 Sybase Informix MS SQLServer PostgresSQL mySQL Access szabványok 1986: ANSI SQL 1987: ISO SQL 1989: ANSI89 1992: SQL92 1999: SQL1999 2003: SQL2003 igények aktív elemek, OO, OLAP, ..
SQL elemei SQL Műveletek típusai: - adatdefiniáló (DDL) struktúra létrehozás (CREATE) struktúra módosítás (ALTER) struktúra megszüntetés (DROP) - adatkezelő (DML) adat felvitel (INSERT) adat módosítás (UPDATE) adat törlés (DELETE) - lekérdező (DQL) adat kiolvasása (SELECT) - vezérlő (DCL)
DDL utasítások A táblák struktúrájának kezelése Kezdetben vala az üresség … És először létrehozánk egy táblát … Milyen mezői legyenek? Minek nevezzem el? Milyen megkötéseket teszel? Jó, hozz létre egy KÖNYV nevű táblát, melynek van egy cím nevű 20 hosszú szöveges, és egy ár nevű numerikus mezője! CREATE TABLE KÖNYV (cím CHAR(20), ár INTEGER); létrehozás: CREATE TABLE név paraméterek; tábla megszüntetés: DROP TABLE név; szerkezet módosítás: ALTER TABLE név paraméterek;
DML utasítások A táblák adatinak kezelése Az üres tábla minek lészen vala ? Töltsd meg adatokkal, ami jó lesz neki … Mely táblába helyezzük el? Milyen adatok kerülnek át az egyes mezőkbe? INSERT INTO KÖNYV (‘Lepkefogó’, 2340); rekord felvitele: INSERT INTO név (értékek); rekord törlése: DELETE FROM név WHERE feltétel; rekordérték módosítása: UPDATE név SET értékadás WHERE feltétel ;
DQL utasítások A táblák adatinak lekérdezése Az feltöltött tábla minek lészen vala ? Meríts az adatokból, hagy sokasodjanak … Mely táblákból vesszük az adatokat? Mely rekordokat vegyük figyelembe? Milyen számításokat végezzek az adatokon? SELECT * FROM KÖNYV WHERE ár > 3300; rekordok lekérdezése: SELECT mezőlista FROM táblalista WHERE feltétel GROUP BY csoportképzés … ORDER BY rendezés
SQL felületek Mily módon adhatók át a DBMS-nek az SQL utasítások? parancsértelmező DBMS DB segédprogram ESQL CLI / ODBC alkalmazói program JDBC / ADO 4GL
kép Rippl-Rónai József (1861-1927): Kalitkás nő (1892)
DDL utasítások 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); A műveletek nem tranzakció hatáskörben futnak le!
DDL utasítások 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!
DML utasítások Rekord felvitele: INSERT INTO tabla VALUES (ert1, ert2, …,ertn); INSERT INTO tabla (mezo1,..) VALUES (ert1,..); INSERT INTO tabla VALUES (mezo=ertek,…); INSERT INTO tabla SELECT …; Fontos a mezősorrend Minden szükséges mező kapjon értéket INSERT INTO AUTO VALUES (‘bju564’,234,’FIAT’); INSERT INTO AUTO (rsz, tipus) VALUES (‘bju564’,’FIAT’); INSERT INTO AUTO VALUES (RSZ=‘bju564’,...); A műveletek tranzakció hatáskörben futnak le!
DML utasítások 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; DELETE FROM AUTO WHERE AR<1200000; DELETE FROM AUTO WHERE (SELECT … ) ; A műveletek tranzakció hatáskörben futnak le!
DML utasítások 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 DOLGOZO SET KOR = KOR + 1, FIZ = 10000; UPDATE AUTO SET AR = AR * 1.2 WHERE AR<1200000; A műveletek tranzakció hatáskörben futnak le!
DML utasítások Speciális értékek kezelése Üres, nem ismert érték jelölése: NULL INSERT INTO AUTO VALUES(12,’ALMA’, NULL,..); DEFAULT érték szerepe A ” és ‘ határolók eltérő szereppel bírnak INSERT INTO AUTO(”SZUL. HELY”,..) VALUES(‘OZD’,..); Dátumok felvitele konverziós függvénnyel: INSERT INTO AUTO(DATUM,..) VALUES( TO_DATE(‘2002.02.12’,’YYYY.MM.DD’),…); INSERT INTO AUTO(DATUM,..) VALUES( CTOD(‘2002.02.12’),…);
DQL utasítások A lekérdezés alapjai: SELECT m_kif1,… FROM t_kif WHERE feltétel GROUP BY cskif HAVING feltétel UNION | INTERSECT | MINUS SELECT … ORDER BY rkif; A relációs algebrán alapszik Tartalmaz nem relációs elemeket is (pl. ORDER BY) Állandóan bővül, az SQL központi eleme SELECT nev FROM dolgozo;
DQL utasítások A projekció megadása mlista(r) SELECT mlista FROM tábla; Az mlista helyén * áll, ha minden mező kell SELECT RSZ, TIPUS FROM AUTO; SELECT * FROM AUTO;
DQL utasítások A szelekció megadása felt(r) SELECT mlsita FROM tábla WHERE feltétel; SELECT * FROM AUTO WHERE SZIN = ‘PIROS’ OR TIPUS = ‘MAZDA’;
DQL utasítások A kiterjesztés megadása mlista(r) SELECT kif név,... FROM …; Az előállító kifejezés A mezőkhöz új nevet is rendelhetünk SELECT SAL FIZETES, AGE KOR FROM EMP; SELECT AR/100 UJAR FROM AUTO; A SELECT eredmény táblája a fenti esetekben a képernyőre kerül. Így ez az alak csak a parancsfelületen használható.
Oracle PL/SQL Gyakorlati eszköz: Oracle RDBMS Felület: interaktív SQL: sqlplus (Sun gépek, 105-ös lab.) WEB-es SQL felület: ISqlplus regisztáció: https://www-db.iit.uni-miskolc.hu/dbreg/ sqlplus: sun> export ORACLE_HOME=/opt/OraHome1 sun> export PATH=${PATH}:${ORACLE_HOME}/bin sun> sqlplus név@info isqlplus: http://arrakis.iit.uni-miskolc.hu:5560/isqlplus
kép Rippl-Rónai József: Zorka(1916)
A relációs adatmodell Egyedi elemek - összetett kulcsok használata - LOCAL | GLOBAL TEMPORARY TABLE - CONSTRAINT - DEFFERABLE - INITIALLY DEFERRED - INITIALLY IMMEDIATE - SET CONSTRAINTS IMMEDIATE | DEFFERED - érték megadás SELECT-tel - A SELECT használata a CHECK-ben - REFERENCES tabla(mezo) - REFERENCES t(m) ON DELETE | UPDATE RESTRICT | SET NULL | CASCADE | NO ACTION
kép Rippl-Rónai József: Vörössapkás önarckép (1924)