Tartalmi kivonat
ADATBÁZIS- ADATBÁZIS-KEZELÉS Segédanyag a gyakorlathoz Összeállította: Várady Lajos varadyl@math.kltehu 1 TARTALOM 1. RELÁCIÓKON VÉGEZHETŐ MŰVELETEK 31 1.1 PROJEKCIÓ (EGY TÁBLA VERTIKÁLIS MEGSZORÍTÁSA) 31 1.2 SZELEKCIÓ (EGY TÁBLA HORIZONTÁLIS MEGSZORÍTÁSA) 31 1.3 UNIÓ 31 1.4 METSZET 31 1.5 KÜLÖNBSÉG 31 1.6 DESCARTES SZORZÁS 32 1.7 ÖSSZEKAPCSOLÁS 32 2. AZ ORACLE SQL 33 2.1 SQL PARANCSOK 33 2.2 SZERKESZTŐ PARANCSOK 33 2.3 SZÜKSÉGES ALAPFOGALMAK 34 2.31 Literál 34 2.32 Kifejezés 34 2.33 Változó 34 2.34 Operátorok 34 2.4 QUERY NYELV 36 2.41 Projekció megvalósítása 36 2.42 Szelekció megadása 36 2.43 A kiválasztott sorok rendezése 37 2.44 Csoportok képzése 37 2.45 JOIN 39 2.46 Egymásbaágyazott lekérdezések 40 2.47 Táblákban kódolt hierarchiák 41 2.5 ADATDEFINÍCIÓS NYELV 46 2.51 Adattípusok 46 2.52 Táblák létrehozása, törlése, módosítása 46 2.6 ADATMANIPULÁCIÓS NYELV 47 2.7 ADATVEZÉRLŐ NYELV
50 2.71 Tranzakció-kezelés 50 2.72 Privilégiumok és hozzáférési jogok 50 3. TOVÁBBI INFORMÁCIÓK 52 4. FÜGGELÉK 53 FÜGGELÉK A A CREATE TABLE UTASÍTÁS . 53 FÜGGELÉK B A “SULI KÖNYVTÁR” ADATBÁZIS . 53 FÜGGELÉK C RÖVIDÍTÉSEK . 57 2 1. Relációkon végezhető műveletek 1 Projekció (egy tábla vertikális megszorítása) Def: Legyen R ⊆ D1 ×.× Dn , akkor R projekciója Di ,, Di -ra Ekkor 1 k Π i1,.,ik ( R) = {s| ∃s2 ∈ R úgy, hogy s2|( Di1 ,., Dik ) = s} Példa: Az OLVASO (o azon, vnev, unev, lakcim, kiad azon, beir dat, okod) tábla projekciója a vnev, unev, lakcim attribútumokra. VNEV GIPSZ KEMENY MINTA KEREK POR UNEV JAKAB HELEN MOKUS ERNO OSZKAR LAKCIM DEBRECEN FAL U. 1 APAFA FA U. 12 SARAND FELFAL U. 9 SZOB TINTA U.13 EGER DOBO U.21 2 Szelekció (egy tábla horizontális megszorítása) Jelölése: σ Ψ (R ) , ahol Ψ SQL keresési feltétel A szelekció a reláció azon elemei (sorok), amelyek eleget tesznek a Ψ SQL keresési
feltételnek. Példa: Szelekció az OLVASO (o azon, vnev, unev, lakcim, kiad azon, beir dat, okod) táblából, feltétel: vnev=’GIPSZ’ and unev=’JAKAB’. O AZON 001 VNEV GIPSZ UNEV JAKAB LAKCIM DEBRECEN FAL U. 1 BEIR DAT 04-JAN-90 OKOD Az unió, metszet és különbség műveletek csak pontosan azonos attribútumokat tartalmazó táblákon végezhetők. Mivel a reláció egy halmaz, ezek a műveletek a halmazelméletben tanultakkal megegyező eredményt szolgáltatnak. 3 Unió Példa Q(A,B,C) R(D,A,E) relációk uniója az S reláció. Q A a a B a c C b b R D a b e A a c f E b d g S a a b e 4 Metszet Példa Q R = S S a a b 5 Különbség QR=S 3 a c c f b b d g S a c b 6 Descartes szorzás Példa Q× R = S S Q.A a a a a a a B a a a c c c C b b b b b b D a b e a b e R.A a c f a c f E b d g b d g 7 Összekapcsolás összekapcsolás/join, a Descartes szorzással kapott halmaz egy részhalmaza Def: Legyen R1 ⊆ D1 ×.× Dm ; R2 ⊆ D1 ××
Dn Legyen Di = D j = D A R1 és R2 relációk összekapcsolása a D kapcsoló attribútum szerint az a D( , R2 ), amire | (d1,.,diD( R1 , R2 )={(d1,,di-1,d,di+1,,dm,d1`,,dj-1`,dj+1`,,dn`) 1,d,di+1,.,dm,) ∈ R1 ; és (d1`,,dj-1`,d,dj+1`,,dn`) ∈ R2 } R1 Két kiinduló táblát használ. Az eredmény a két tábla soraiból épül fel Mindkét kiinduló táblában ki kell jelölni egy attribútumot (kapcsoló attribútum). Az eredménytábla sorai a következőképpen keletkeznek: a) Válasszuk ki az első tábla első sorát (aktuális sor). b) Keressük meg a második táblában azokat a sorokat, amelyek kapcsoló attribútuma ugyanazt az értéket tartalmazza, mint az aktuális sor kapcsoló attribútuma. Ha van ilyen sor, akkor folytassuk a következő lépéssel, ha nincs válasszuk a következő aktuális sort. c) Az eredménytábla sorait úgy kapjuk, hogy az aktuális sort az összes lehetséges módon folytatjuk az előző lépésben megkeresett kapcsolódó sorokkal.
d) Az eredménytábla összes sorát úgy kapjuk, ha az első tábla összes során mint aktuális soron végiglépkedünk. Ez volt az equijoin. (kapcsoló attribútumok értékegyenlőségén alapszik) A nem equijoin a kapcsoló attribútumok egyenlőségtől eltérő relációján alapszik. A külső join nemcsak a kapcsolódó sorokat teszi az eredménytáblába, hanem az első tábla azon sorait is, amelyhez nem létezett kapcsolódó sor a második táblából. Példa equijoinra S Q.A a a kiad azon K001 K001 K002 K002 K003 B a c C b b D a a R.A a a kiad nev TANKONYVKIADO TANKONYVKIADO AKADEMIAI KIADO AKADEMIAI KIADO GONDOLAT KIADO E b b varos LONDON LONDON NEW YORK NEW YORK LONDON 4 isbn 100002 100003 100001 100005 100004 cim EGRI CSILLAGOK KOSZIVU EMBER FIAI TUSKEVAR ANATOMIA EMPATIA K003 GONDOLAT KIADO LONDON 100006 RECEPTEK varos LONDON LONDON NEW YORK NEW YORK LONDON LONDON LONDON isbn 100002 100003 100001 100005 100004 100006 Példa külső joinra kiad
azon K001 K001 K002 K002 K003 K003 K004 kiad nev TANKONYVKIADO TANKONYVKIADO AKADEMIAI KIADO AKADEMIAI KIADO GONDOLAT KIADO GONDOLAT KIADO KOSSUTH KIADO cim EGRI CSILLAGOK KOSZIVU EMBER FIAI TUSKEVAR ANATOMIA EMPATIA RECEPTEK 2. Az oracle sql Négy résznyelve bontható: 1. lekérdező QUERY Language 2. adatdefiníciós DDL (Data Definition Language) 3. adatmanipulációs DML (Data Manipulation Language) 4. adatvezérlő DCL (Data Control Language 1 SQL parancsok SQLPLUS EXIT vagy QUIT CONN[ECT] [felh név[/jelszó]]| [felh név[/jelszó@adatbázis]] DISCONNECT ; HELP parancsnév /* Megjegyzés / Az SQL parancsokat ;-vel kell lezárni. 2 Szerkesztő parancsok SET PAUSE ON/OFF LIST [szám] A[PPEND] C[HANGE] ksor1/ksor2 I[NPUT] DEL SAVE fnev [CRE|REP|APP] GET EDIT [fnev] DEF[INE] változó=érték DEF[INE] változó UNDEF[INE] változó DEFINE EDITOR=’editor név’ @|STA[RT] fnev p1[ p2] RUN vagy / SPOOL [ON/OFF/OUT] | [fnev] HOST DESC[RIBE] [felhasználói
név]tábla[@adatbázis] Képernyőgörgetés laponkénti megállással. SQL buffer listázása. Aktuláis sor végére karakterek fűzése. Bufferben lévő SQL parancshoz új sor hozzáfűzése. Az aktuális sort törli a bufferből. A buffer tartalmát fájlba írja. Kimentett SQL fájlt bufferbe visszatölt. Az op.r editorát hívja meg fnev szerkesztésre Változót definiálhatunk Megjeleníti a változó értékét Megszünteti a változót Megadhatjuk, mely editor használja a rendszer az EDIT paranccsal SQL kiterjesztésű fnev parancsfájlt futtat, p1,p2,,pn paraméterek, amelyekre a parancsfájlban &1,&2,,&n -nel lehet hivatkozni. a buffer tartalmát futtaja Fájlba menti a képernyő tartalmát Kilépés az op.r-be Tábla szerkezetét írja ki. 5 Ábra 2.1 Az aktuális buffer és a külső editor EDIT Külsõ editor az editor SAVE parancsa EDIT fájl az editor SAVE parancsa GET fájl Kurrens buffer Operációs rendszer fájl SAVE fájl START fájl 3
Szükséges alapfogalmak .1 Literál A CHAR, DATE, NUMBER standard ORACLE adattípusok értékeinek konstans alakja. Pl: ‘karaktersorozat’ -123.45 ‘01-JAN-97’ .2 Kifejezés • Literál, változó, függvény, mezőnév magában is, vagy ezeknek operátorokkal való összekapcsolása kifejezést alkot. • A kifejezésnek értéke van: pl. egy szám, szöveg, dátum, vagy igaz, hamis • Az igaz, hamis értékű kifejezést logikai kifejezésnek, vagy feltételnek hívjuk. .3 Változó • Neve van • Értéket adhatunk neki (DEF[INE] változó = érték, vagy a @|RUN parancsfájl p1[ p2] paraméterek segítségével, lásd 2.2 részben) • Hivatkozhatunk rá (ACCEPT vagy DEFINE által létrehozott változóra &változónév, az @|RUN parancsfájl p1[ p2] paraméterekre &1, &2 stb. lásd 22) • A változóknak csak literálokat adhatunk értékül. (Lásd 22 rész) Pl:’&varos’ .4 Operátorok Lekérdező szelekciós utasítás UNION
szelekciós utasítás szelekciós utasítás eredményét halmazt kell felfogni. -“-“- szelekciós utasítás MINUS szelekciós utasítás szelekciós ut. INTERSECT szelekciós ut Logikai NOT AND OR Nem És Vagy 6 mint Minden. Előtte szerepelnie kell relációs operátornak. Valamelyik. Előtte szerepelnie kell relációs operátornak. ALL(kifejezés[,kifejezés] | szelekciós utasítás) ANY(kifejezés[,kifejezés] | szelekciós utasítás) BETWEEN kifejezés AND kifejezés EXISTS (szelekciós utasítás) Igaz, ha a szelekciós utasítás ad vissza értéket IN(kifejezés[,kifejezés] | szelekciós utasítás) kifejezés IS NOT NULL kifejezés IS NULL LIKE kifejezés NOT BETWEEN kifejezés AND kifejezés NOT EXISTS (szelekciós utasítás) NOT IN(kifejezés[,kifejezés] | szelekciós utasítás) NOT LIKE kifejezés %=*, =? Numerikus +,-,*,/ Relációs vagy összehasonlító operátor = !=, <>, ^= > < >= <= Dátumra jelentés dátumkifejezés -
dátumkifejezés napok száma a két dátum között Sztringekre karakterkifejezés || karakterkifejezés Konkatenáció 7 4 QUERY nyelv .1 Projekció megvalósítása SELECT [DISTINCT] kifejezés [aliasnév][, kifejezés [aliasnév]] FROM táblanév; Példa SELECT Vnev, Unev, lakcim FROM olvaso; SELECT * FROM konyv; SELECT * FROM tab; (csak az Oracle-nél) SELECT varos FROM kiado; SELECT DISTINCT varos FROM kiado; varos varos LONDON LONDON NEW YORK NEW YORK LONDON LONDON .2 Szelekció megadása SELECT [DISTINCT] kifejezés [aliasnév][, kifejezés [aliasnév]] FROM táblanév WHERE keresési feltétel; .1 Keresési feltétel (logikai kifejezés) • egyszerű összehasonlítás • összehasonlítás egy halmaz elemeivel • összehasonlítás NULL értékkel • összetett keresési feltétel Egyszerű összehasonlítás oszlopnév relációs operátor kifejezés|konstans Összehasonlítás egy halmaz elemeivel oszlopnév összehasonlító operátor halmaz
definíció operátor jelentés BETWEEN kif. AND kif IN (lista) LIKE kar minta ,% Összehasonlítás NULL értékkel oszlopnév IS NULL Összetett keresési feltételek operátor jelentés NOT AND OR A használható operátorokról bővebben a 2.34 részben olvashatunk 8 Példa ORACLE SELECT o azon, Vnev, Unev, lakcim FROM olvaso WHERE lakcim like ‘EGER%’ AND okod=6; MSSQL SELECT o azon, Vnev, Unev, lakcim FROM olvaso WHERE lakcim like "EGER*" AND okod=6; o azon Vnev Unev lakcim 005 POR OSZKÁR EGER DOBO U.21 SELECT isbn,cim, kiad dat FROM konyv WHERE kiad dat BETWEEN ‘01/01/94’ AND ‘01/01/98’; isbn cim kiad dat 100002 EGRI CSILLAGOK 2/12/97 100003 KOSZIVU EMBER 7/1/94 SELECT * FROM olvaso WHERE okod IS NULL; o azon vnev unev lakcim beir dat okod 001 GIPSZ JAKAB DEBRECEN FAL U. 1 1/4/90 002 KEMENY HELEN APAFA FA U. 12 2/27/95 .3 A kiválasztott sorok rendezése SELECT [DISTINCT] kifejezés [aliasnév][, kifejezés [aliasnév]] FROM táblanév [WHERE
keresési feltétel] ORDER BY kifejezés [DESC] [, kifejezés[DESC]]; Példa SELECT isbn, cim,kiad dat FROM konyv WHERE kiad azon=’K001’ /* MSACCESS-ben ‘ helyett “/ ORDER BY cim; isbn cim kiad dat 100002 EGRI CSILLAGOK 2/12/97 100003 KOSZIVU EMBER FIAI 6/21/94 SELECT isbn, lelt szam,kolcs e FROM peldany ORDER BY isbn, lelt szam; .4 Csoportok képzése SELECT [DISTINCT] kifejezés [aliasnév][, kifejezés [aliasnév]] FROM táblanév [WHERE keresési feltétel] GROUP BY kifejezés [,kifejezés] [HAVING csopkiv. feltétel] [ORDER BY kifejezés [DESC] [, kifejezés[DESC]]]; 9 .1 Csoportfüggvények (Oracle-nél és az Access-nél is ugyanaz) AVG([DISTINCT|ALL] kifejezés) A Null értéket figyelmen kívül hagyja. COUNT([DISTINCT|ALL] {*|kifejezés}) A Null értéket figyelmen kívül hagyja. MAX([DISTINCT|ALL] kifejezés) MIN([DISTINCT|ALL] kifejezés) SUM([DISTINCT|ALL] kifejezés) A függvények NUMBER típusú adatokra alkalmazhatók, kivéve a MAX(), MIN(), COUNT()
függvényeket, amelyek CHAR és DATE típusú adatokra is működnek. Példa SELECT okod, min(beir dat), max(beir dat), COUNT(*) FROM olvaso GROUP BY okod HAVING COUNT(*)>1; okod min(beir dat) max(beir dat) COUNT(*) 1/4/90 2/27/95 2 6 5/12/93 5/22/93 2 .2 Sztringátalakító függvények INITCAP(kifejezés) INSTR(kifejezés,’sztring’) LENGTH(kifejezés) LOWER(kifejezés) SUBSTR(kifejezés, kp, hossz) UPPER(kifejezés) .3 Aritmetikai függvények ABS(kifejezés) GREATEST(kifejezés,kif2) LEAST(kifejezés,kif2) MOD(kifejezés, osztó) POWER(kifejezés,kitevő) ROUND(kifejezés,szám) SIGN(kifejezés) SQRT(kifejezés) TRUNC(kifejezés,szám) egyéb műveletek:*,/,+,- .4 Dátumkezelő függvények ADD MONTHS(dát,hónapszám) GREATEST(d1,d2) LEAST(d1,d2) MONTHS BETWEEN(d1,d2) ROUND(dátum,formátum) TO DATE(sztring) TO CHAR(dátum[,formátum]) SYSDATE Példa ORACLE MSACCESS SELECT lelt szam, o azon, SYSDATE-kolcs dat ota kint van SELECT lelt szam, o azon, nowkolcs dat as ota
kint van 10 FROM kolcson; lelt szam L002 L003 L004 L005 L007 L008 o azon 002 003 002 001 002 001 FROM kolcson; ota kint van 259.991331018522 55.991331018522 92.991331018522 41.991331018522 37.991331018522 212.991331018522 .5 Az NVL függvény NVL(oszlopkif, kif) =oszlopkif, ha az nem NULL, egyébként =kif Példa: SELECT NVL(ar,0) FROM peldany; .5 JOIN SELECT [DISTINCT] kifejezés [aliasnév][, kifejezés [aliasnév]] FROM táblanév [aliasnév], táblanév [aliasnév] WHERE kapcs oszlop1 összehas operátor kapcs oszlop2 AND további feltétel [GROUP BY kifejezés [,kifejezés]] [HAVING csopkiv feltétel] [ORDER BY kifejezés [DESC] [, kifejezés[DESC]]]; Példa ORACLE MSACCESS SELECT Vnev, Unev, lakcim, kolcs dat FROM olvaso o, kolcson k WHERE o.o azon=ko azon AND SYSDATE-kolcs dat>30; SELECT Vnev, Unev, lakcim, kolcs dat FROM olvaso INNER JOIN kolcson ON olvaso.o azon=kolcsono azon WHERE now-kolcs dat>30; Vnev KEMENY MINTA KEMENY GIPSZ Unev HELEN MOKUS HELEN
JAKAB lakcim APAFA FA U. 12 SARAND FELFAL U. 9 APAFA FA U. 12 DEBRECEN FAL U. 1 kolcs dat 1/5/97 7/28/97 6/21/97 2/21/97 ORACLE MSACCESS SELECT a.kiad azon, kiad nev, varos, isbn,cim FROM konyv k, kiado a WHERE a.kiad azon=kkiad azon; SELECT kiado.kiad azon, kiad nev, varos, isbn, cim FROM kiado INNER JOIN konyv ON kiado.kiad azon=konyvkiad azon ; kiad azon kiad nev K001 TANKONYVKIADO K001 TANKONYVKIADO K002 AKADEMIAI KIADO K002 AKADEMIAI KIADO K003 GONDOLAT KIADO K003 GONDOLAT KIADO varos LONDON LONDON NEW YORK NEW YORK LONDON LONDON 11 isbn 100002 100003 100001 100005 100004 100006 cim EGRI CSILLAGOK KOSZIVU EMBER FIAI TUSKEVAR ANATOMIA EMPATIA RECEPTEK Outer Join(+) azt a táblát egészíti ki NULL értékekkel, amely a kapcsoló oszlop mellett van. ORACLE MSACCESS SELECT a.kiad azon, kiad nev, varos, isbn, cim FROM kiado a, konyv k WHERE a.kiad azon=kkiad azon (+); SELECT kiado.kiad azon, kiad nev, varos, isbn, cim FROM kiado LEFT JOIN konyv ON kiado.kiad
azon=konyvkiad azon ; kiad azon K001 K001 K002 K002 K003 K003 K004 kiad nev TANKONYVKIADO TANKONYVKIADO AKADEMIAI KIADO AKADEMIAI KIADO GONDOLAT KIADO GONDOLAT KIADO KOSSUTH KIADO varos LONDON LONDON NEW YORK NEW YORK LONDON LONDON LONDON isbn 100002 100003 100001 100005 100004 100006 cim EGRI CSILLAGOK KOSZIVU EMBER FIAI TUSKEVAR ANATOMIA EMPATIA RECEPTEK Példa nem equijoinra Listázzuk ki azokat, akik később iratkoztak be, mint GIPSZ JAKAB. ORACLE MSACCESS SELECT x.vnev,xunev,xlakcim, y.vnev,yunev FROM olvaso x,olvaso y WHERE x.beir dat>ybeir dat AND UPPER(y.vnev)=’GIPSZ’ AND UPPER(y.unev)=’JAKAB’; SELECT x.vnev,xunev,xlakcim, y.vnev,yunev FROM olvaso as x,olvaso as y WHERE x.beir dat>ybeir dat AND y.vnev="GIPSZ" AND y.unev="JAKAB"; Pl: Listázzuk ki, hogy az egyes olvasóknál hány könyv van. ORACLE MSACCESS SELECT vnev, unev, count(k.lelt szam) FROM olvaso o, kolcson k WHERE o.o azon=ko azon (+) group by o.o azon,vnev,unev; SELECT
vnev, unev, count(kolcson.lelt szam) FROM olvaso left join kolcson on olvaso.o azon=kolcsono azon group by olvaso.o azon,vnev,unev; .6 Egymásbaágyazott lekérdezések Az első SELECT WHERE részében újabb SELECT, össz. 15 A beágyazott SELECT egyszerre több rekordot is visszaadhat. Ezek kezelésére használhatók a következők: ANY ALL EXISTS A belső SELECT-ből átvehetünk több oszlopot is. Példa Listázzuk ki azokat, akik később iratkoztak be, mint GIPSZ JAKAB. ORACLE SELECT vnev,unev,lakcim FROM olvaso MSACCESS SELECT vnev,unev,lakcim FROM olvaso 12 WHERE beir dat>(select beir dat From olvaso where vnev=’GIPSZ’ AND unev=’JAKAB’); WHERE beir dat>(select beir dat From olvaso where vnev="GIPSZ" AND unev="JAKAB"); Listázzuk ki azon könyveket (ISBN, cim), amelyek Gipsz Jakabnál vannak. ORACLE SELECT v.isbn,cim FROM konyv v, peldany p WHERE v.isbn=pisbn AND lelt szam IN (SELECT lelt szam FROM kolcson k, olvaso o WHERE k.o azon=oo
azon AND UPPER(vnev)=’GIPSZ’ AND UPPER(unev)=’JAKAB’); MSACCESS SELECT konyv.isbn,cim FROM konyv inner join peldany ON konyv.isbn=peldanyisbn where lelt szam IN (SELECT lelt szam FROM kolcson inner join olvaso ON kolcson.o azon=olvasoo azon where vnev="GIPSZ" AND unev="JAKAB"); isbn cim 100002 EGRI CSILLAGOK 100005 ANATOMIA Példa korrelált lekérdezésre: a belső SELECT hivatkozik a külsőre. Listázzuk ki azokat a könyveket, amelyeknek az ára nagyobb a könyv kiadója által kiadott könyvek átlagáránál. ORACLE SELECT lelt szam,k.isbn,cim,ar,kiad az on FROM konyv k,peldany p WHERE p.isbn=kisbn and ar>(SELECT avg(ar) FROM peldany, konyv WHERE k.kiad azon=kiad azon); lelt szam --------L001 L002 L003 L004 L005 L006 isbn -----100001 100001 100001 100002 100002 100003 MSACCESS SELECT lelt szam,k.isbn,cim,ar,kiad az on FROM konyv as k,peldany as p WHERE p.isbn=kisbn and ar>(SELECT avg(ar) FROM peldany, konyv WHERE k.kiad azon=kiad azon); cim
-------------------TUSKEVAR TUSKEVAR TUSKEVAR EGRI CSILLAGOK EGRI CSILLAGOK KOSZIVU EMBER FIAI ar -------1100 1100 1150 800 800 1200 kiad azon --------K002 K002 K002 K001 K001 K001 Pl: Lisázzuk ki azokat a műveket, amelyek kölcsönözhetők. SELECT szerzo,cim FROM konyv WHERE isbn in (select isbn From peldany where kolcs e=1); Listázzuk ki azokat a műveket, amelyeket Londonban adtak ki, és van kölcsönözhető példány belőlük. .7 Táblákban kódolt hierarchiák SELECT [ALL] | [DISTINCT] {*| kifejezés [aliasnév]} [,kifejezés [aliasnév]]. FROM táblanév 13 CONNECT BY PRIOR oszlopnév1= oszlopnév2 START WITH oszlopnév=kifejezés; A CONNECT BY részben adható meg a hierarchiát kódoló két oszlop neve (az oszlopnév1 az alacsonyabb, míg a oszlopnév2 a magasabb szinten lévő adat a hierarchiában). A visszakeresés kiindulási pontját a START WITH után lehet megadni. Példa: Listázzuk ki NAGY KLARA összes beosztottját! SELECT LPAD( ,
2*LEVEL)||VNEV||UNEV STRUKTURA,LEVEL,D AZON,FONOK FROM DOLGOZO CONNECT BY PRIOR D AZON = FONOK START WITH VNEV=NAGY AND UNEV=’KLARA’; STRUKTURA LEVEL D AZON FONOK -------------------------------------NAGY KLARA 1 D01 KISS TEREZ 2 D02 D01 SZILARD ISTVAN 3 D04 D02 BARNA PETER 2 D03 D01 KEREK EMIL 3 D05 D03 FUTO ERZSEBET 2 D06 D01 Listázzuk ki NAGY KLARA összes közvetlen beosztottját! SELECT LPAD( , 2*LEVEL)||VNEV||UNEV STRUKTURA,LEVEL,D AZON,FONOK FROM DOLGOZO WHERE level=2 CONNECT BY PRIOR D AZON = FONOK START WITH VNEV=NAGY AND UNEV=’KLARA’; Számítsuk ki a különböző vezetői szinteken az átlagfizetést! SELECT LEVEL,AVG(FIZETES) FROM DOLGOZO CONNECT BY PRIOR D AZON = FONOK START WITH VNEV=NAGY AND UNEV=’KLARA’ GROUP BY LEVEL; 14 FELADATOK 1. Határozzuk meg, hány londoni kiadó van az adatbázisunkban. 2. Határozzuk meg, kik azok a debreceniek, akik 1990 februárjában iratkoztak be. 3. Határozzuk meg, hány darab kölcsönözhető, és hány darab
köteles példány van a könyvtárunkban. 4. Határozzuk meg, hány darab 1994 január 1-től régebbi kölcsönözhető mű (létezik kölcsönözhető példánya) van a könyvtárunkban. 5. Melyik kiadótól van a legrégebbi könyvünk. 6. Listázzuk ki az olvasókat és adataik mellet azt, hogy az általuk legrégebben kivitt példány hány hete van náluk, névsor szerint rendezve. 7. Listázzuk ki a FEKETE ISTVAN által írt könyveket. 8. Irassuk ki azokat a könyveket, amelyekre egynél több előjegyzés van. 9. Irassuk ki azokat a könyveket, amelyek drágábbak, mint a TANKONYVKIADO által kiadott könyvek átlagára. 10. Irassuk ki, hogy az egyes szerzők hány könyvet írtak, névsor szerint rendezve 11. Irassuk ki, hogy az egyes olvasóknál hány példány van kint, darabszám szerint csökkenően rendezve, és a listában csak azok legyenek benne, akiknél legalább két könyv van. 12. Irassuk ki, hogy az egyes olvasók hány könyvre jegyeztek elő 13.
Hány olvasónak nincs még figyelmeztetése (okod IS NULL) 14. Mennyi pénz szükséges a jelenlegi dolgozók havi bérének 10 %-os emeléséhez 15. Irassuk ki, hogy az EGRI CSILLAGOKra jegyeztek-e elő, és ha igen, akkor ki(k) 16. Határozzuk meg a könyvtárosok átlagfizetését 17. Irassuk ki BARNA PETER szintjén az átlagfizetést 18. Irassuk ki az EGRI CSILLAGOK című könyv bent lévő példányait 19. Kiviheti-e GIPSZ JAKAB az TUSKEVAR című könyvet? És az EGRI CSILLAGOKat 20. Listázzuk ki a CIMVAL változó által meghatározott könyvből bent lévő kivihető (kölcsönözhető és nincs kikölcsönözve) példányokat. 15 MEGOLDÁSOK 1. SELECT COUNT(kiad azon) FROM kiado WHERE varos=’LONDON’; 2. SELECT * FROM olvaso WHERE lakcim LIKE ‘DEBRECEN %’ AND beir dat<’01-MAR1990’ AND beir dat>=’01-FEB-1990’; 3. SELECT kolcs e, COUNT(*) FROM peldany GROUP BY kolcs e; 4. SELECT COUNT(ISBN) FROM konyv WHERE kiad dat<’01-JAN-1994’ AND
ISBN IN (SELECT ISBN FROM peldany WHERE kolcs e=1); 5. SELECT cim,kiad dat,a.* FROM kiado a, konyv k WHERE k.kiad azon=akiad azon AND kiad dat=(SELECT MIN(kiad dat) FROM konyv); 6. SELECT o.*, (sysdate-kolcs dat)/7 FROM olvaso o,kolcson k WHERE o.o azon=ko azon AND kolcs dat = (SELECT MIN(kolcs dat) FROM kolcson WHERE o azon=o.o azon); 7. SELECT * FROM konyv WHERE ISBN IN (SELECT ISBN FROM irta i, szerzo s WHERE i.szerzo azon=sszerzo azon AND vnev=’FEKETE’ AND unev=’ISTVAN’); 8. SELECT * FROM konyv WHERE ISBN IN (SELECT ISBN FROM elojegy GROUP BY ISBN HAVING COUNT(ISBN)>1); 9. SELECT * FROM konyv WHERE ar>(SELECT AVG(NVL(ar,0)) FROM konyv k, kiado a WHERE a.kiad azon=kkiad azon (+) AND kiad nev=’TANKONYVKIADO’); {ez a megoldás akkor is helyes, ha a KOSSUTH KIADO szerepelt volna a kérdésben} 10. SELECT MAX(vnev), MAX(unev), COUNT(sszerzo azon) FROM szerzo s, irta i WHERE s.szerzo azon=iszerzo azon GROUP BY s.szerzo azon ORDER BY MAX(vnev), MAX(unev); 11.
SELECT MAX(vnev), MAX(unev), COUNT(NVL(lelt szam,0)) FROM olvaso o, kolcson k WHERE o.o azon=ko azon (+) GROUP BY o.o azon HAVING COUNT(NVL(lelt szam,0))>1 ORDER BY COUNT(NVL(lelt szam,0)) DESC; 12. SELECT MAX(vnev), MAX(unev),COUNT(NVL(ISBN,0)) FROM olvaso o, elojegy e WHERE o.o azon=eo azon (+) GROUP BY o.o azon; 13. SELECT * FROM olvaso WHERE okod IS NULL OR okod=0; 14. SELECT SUM(11*fizetes-fizetes) FROM dolgozo; 15. SELECT * FROM olvaso WHERE o azon in (SELECT o azon FROM elojegy e,konyv k WHERE k.ISBN=eISBN AND cim=’EGRI CSILLAGOK’); 16. SELECT AVG(fizetes) FROM dolgozo WHERE beosztas=’KONYVTAROS’; 17. SELECT AVG(fizetes) FROM dolgozo WHERE LEVEL=(SELECT LEVEL FROM dolgozo CONNECT BY PRIOR d azon=fonok START WITH vnev=’BARNA’ AND unev=’PETER’) CONNECT BY PRIOR d azon=fonok START WITH vnev=’BARNA’ AND unev=’PETER’; 18. SELECT lelt szam FROM peldany MINUS SELECT klelt szam FROM kolcson k, peldany p WHERE k.lelt szam=plelt szam AND ISBN = (SELECT ISBN FROM
konyv WHERE cim=’EGRI CSILLAGOK’); 19. GIPSZ JAKABnál kint lévő könyvek száma kisebb-e, mint a maximálisan kivihető könyvek száma (3)? SELECT COUNT(NVL(lelt szam,0))<3 FROM olvaso o, kolcson k WHERE o.o azon=ko azon (+) AND vnev=’GIPSZ’ AND unev=’JAKAB’ Van-e jelenleg az TUSKEVAR ból példány GIPSZ JAKABnál? SELECT vnev,unev FROM olvaso o, kolcson k 16 WHERE o.o azon=k o azon AND vnev=’GIPSZ’ AND unev=’JAKAB’ AND lelt szam IN (SELECT lelt szam FROM konyv k, peldany p WHERE k.ISBN=pISBN AND cim=’TUSKEVAR’); Az előjegyzési sorban GIPSZ JAKAB előtt lévők száma kisebb-e, mint ahány szabad, kivihető példány van az TUSKEVARból jelenleg a könyvtárban? Az előjegyzési sorban GIPSZ JAKAB előtt lévők száma: SELECT COUNT(e.o azon) FROM olvaso o, elojegy e WHERE oo azon=eo azon AND ISBN=(SELECT ISBN FROM konyv WHERE cim=’ TUSKEVAR’) AND eloj dat < (SELECT eloj dat FROM olvaso o, elojegy e WHERE o.o azon=eo azon AND
vnev=’GIPSZ’ AND unev=’JAKAB’); Hány szabad, kivihető példány van az TUSKEVARból? SELECT COUNT(p.lelt szam) FROM peldany p, kolcson k WHERE plelt szam =k.lelt szam (+) AND kolcs e=1 AND o azon is NULL AND ISBN = (SELECT ISBN FROM konyv WHERE cim=’ TUSKEVAR’); Az EGRI CSILLAGOK című könyv esetén a megoldás ugyanez, érdemes ilyen esetekben változókat használni (cim=&CIMVALT). 20. SELECT plelt szam FROM peldany p, kolcson k WHERE plelt szam =klelt szam (+) AND kolcs e=1 AND o azon is NULL AND ISBN = (SELECT ISBN FROM konyv WHERE cim=&CIMVAL); 17 5 Adatdefiníciós nyelv .1 Adattípusok CHAR NUMBER[(n[)]][,d)} DATE LONG RAW VARCHAR LONG VARCHAR DECIMAL INTEGER SMALLINT FLOAT LONG RAW .2 Táblák létrehozása, törlése, módosítása CREATE TABLE táblanév (oszlopnév adattípus (szélesség) [NOT NULL], oszlopnév adattípus (szélesség) [NOT NULL], oszlopnév adattípus (szélesség) [NOT NULL]); Táblanév: max 30 karakter, egyedi, a
névképzési szabályoknak megfelelő. A CREATE TABLE utasítás teljes leírását lásd a Függelék A-ben. Példa Lásd Függelék B. ALTER TABLE táblanév ADD oszlopnév adattípus (szélesség); [DROP megszorítás] Új oszlop táblához adása. ALTER TABLE táblanév MODIFY oszlopnév adattípus (új szélesség) [NOT NULL|NULL]; [DROP megszorítás] Meglévő oszlop szélesítése. Példa ALTER TABLE kiado ADD telefon NUMBER(10); ALTER TABLE kiado MODIFY varos CHAR(20); • Táblában lévő oszlopot nem lehet direkt módon törölni. (Helyette: Új tábla létrehozása kevesebb oszloppal, értékek átmásolása, régi tábla törlése.) • Csak olyan oszlop típusát lehet megváltoztatni, illetve méretét csökkenteni, amelyben minden sor értéke NULL. • Egy létező oszlop csak akkor változtatható NOT NULL típusúvá, ha minden sorában nem NULL érték áll. DROP TABLE táblanév; Példa A Suli-könyvtár adatbázisának törlése (a táblák törlési
sorrendje lényeges) drop drop drop drop drop drop table table table table table table elojegy; kolcson; peldany; konyv; kiado; olvaso; CREATE VIEW nézetnév [aliasnév] AS szelekciós utasítás; ORDER BY rész nem lehet benne, több táblára is működik. 18 DROP VIEW nézetnév; CREATE [UNIQUE] INDEX indnév. ON tábnév (oszlnév [ASC|DESC]); DROP INDEX indnév.[ON tábnév]; 6 Adatmanipulációs nyelv INSERT INTO tábnév [(on1,on2,)] VALUES (e1,e2,e3,) | szelekciós utasítás; UPDATE tábnév SET on1=e1,on2=e2,. WHERE keresési felt. | szelekciós utasítás; DELETE FROM tábnév [WHERE keresési felt. | szelekciós utasítás}; Csak teljes sor törlése. Ha nincs WHERE vagy szelekciós, akkor minden sort töröl. 19 FELADATOK Képzeljük el, hogy egy könyvesboltot vezetünk. Készítsünk egy olyan adatbázist, amelyben nyilvántarthatjuk a készleten lévő könyveket, a rendeléseket, és az eladásokat. 1. Hozzuk létre a következő táblákat. 2.
Vigyünk fel néhány szállítót a szallito táblába. 3. Rendeljünk könyveket. 4. A rendelés megérkezésekor, állítsuk be a teljesítés dátumát az adott napi dátumra, és aktualizáljuk a készletet, ahol az egységárat a beszerzési ártól (rendeles tábla egysegar mezője) állítsuk nagyobbra. 5. Az egyes könyvek eladásakor aktualizáljuk a készletet (darab mező), és bővítsük az eladás táblát. 6. Kérdezzük le, hogy milyen könyvekből kell új rendelést feladni (pl. darab<2) 20 MEGOLDÁSOK 1. CREATE TABLE szallito (szall azon CHAR(3) NOT NULL PRIMARY KEY, szall nev CHAR(20) CHECK (szall nev=UPPER(szall nev)), cim CHAR(30) CHECK (cim=UPPER(cim)) ); CREATE TABLE rendeles (rend szam CHAR(4) NOT NULL PRIMARY KEY, ISBN CHAR(6) NOT NULL, rend dat DATE DEFAULT SYSDATE NOT NULL, szall azon NOT NULL REFERENCES szallito, telj dat DATE, egysegar NUMBER (4) NOT NULL, mennyiseg NUMBER (4)); CREATE TABLE keszlet (ISBN CHAR(6) NOT NULL, besz dat DATE
DEFAULT SYSDATE NOT NULL, PRIMARY KEY(ISBN, besz dat), cim CHAR(20) NOT NULL CHECK (cim=UPPER(cim)), szerzo CHAR(25) CHECK (szerzo=UPPER(szerzo), egysegar NUMBER(4) NOT NULL, darab NUMBER(4) NOT NULL); CREATE TABLE eladas (ISBN CHAR(6) NOT NULL, egysegar NUMBER(4) NOT NULL, besz dat DATE DEFAULT SYSDATE NOT NULL); 2. INSERT INTO szallito VALUES (‘001’,’FOSPED’,’BUDAPEST’); 3. INSERT INTO rendeles VALUES (‘0001’, ‘100001’,SYSDATE,’001’,NULL,1300,10); 4. UPDATE rendeles SET telj dat=SYSDATE WHERE rend szam=’0001’; 5. 21 7 Adatvezérlő nyelv .1 Tranzakció-kezelés Tranzakció: Tetszőleges adatmanipulációs utasítások egy sorozata. • lefutott a tranzakció ellentmondásmentes adatbázis • nem futott le a tranzakció ellentmondásos adatbázis COMMIT A tranzakció utáni állapotot rögzíti. ROLLBACK A tranzakció előtti állapotot állítja vissza. Ezek a parancsok automatikusan és expliciten is meghívásra kerülnek. .2
Privilégiumok és hozzáférési jogok .1 Jogok Az Oracle rendszerbe történő bejelentkezéshez szükséges • felhasználói név • jelszó • jogok A jogok lehetnek • a rendszer használatával kapcsolatos jogok (privilégiumok) • a táblák használatával kapcsolatos jogok (hozzáférési jogok) .2 Privilégiumok • Connect • Resource • Dba CONNECT • bejelentkezhet az Oracle RDBMS-be és használhatja • betekinthet táblákba, amelyekre SELECT jogot kapott • betekinthet a Public minősítésű táblákba • az adatmanipulációs utasításokat használhatja azokra a táblákra, amelyekre a tábla tulajdonosa megfelelő jogokat adott (INSERT, DELETE, UPDATE) • nézettáblákat (view) definiálhat RESOURCE • minden CONNECT jog • táblák, indexek létrehozása és törlése • az általa létrehozott táblákra vonatkozóan jogokat adhat tovább más felhasználóknak • az általa létrehozott táblákra, indexekre
igénybe veheti a rendszer AUDITING szolgáltatását DBA 22 • minden RESOURCE jog • bármely felhasználó adataiba betekinthet, és lekérdezést hajthat végre • jogokat adhat és vonhat vissza bárkitől • PUBLIC-nak minősíthet adatokat • rendszer AUDITING • teljes adatbázis export/import .3 Táblákra vonatkozó hozzáférési jogok SELECT INDEX INSERT ALTER DELETE UPDATE REFERENCES A tábla tulajdonosa vagy DBA jogú felhasználó adhatja illetve vonhatja vissza ezeket a hozzáférési jogokat. .4 Privilégiumok és hozzáférési jogok adása és visszavonása Privilégiumok és hozzáférési jogok adása illetve visszavonása a GRANT illetve a REVOKE utasítással történik. .1 Privilégiumok adása és visszavonása (csak DBA) GRANT privilégium TO felhasználó IDENTIFIED BY jelszó; REVOKE privilégium FROM felhasználó; .2 Hozzáférési jogok adása és visszavonása GRANT ALL | hozzáférési jog [,hozzáférési jog ] ON
táblanév TO PUBLIC | felhaszáló [,felhaszáló] [WITH GRANT OPTION]; GRANT oszlop jog (oszlop)[, oszlop jog (oszlop) ] ON táblanév TO PUBLIC | felhaszáló [,felhaszáló] [WITH GRANT OPTION]; REVOKE ALL | hozzáférési jog [,hozzáférési jog ] ON táblanév FROM PUBLIC | felhaszáló; A felhasználó helyett állhat a PUBLIC is, ekkor mindenki számára biztosítjuk a jogokat. Az összes hozzáférési jog helyett állhat ALL. oszlop jog: UPDATE, REFERENCES [WITH GRANT OPTION] ha megadjuk, a felhasználó továbbadhatja a jogokat. 23 3. További információk Quittner Pál: Adatbázis-kezelés a gyakorlatban, Akadémiai kiadó, Budapest, 1993 Dr. Halassy Béla: Az adatbázisok kezelésének alapvető kérdései, 1978, Budapest, KSH Priskinné R. Zsuzsa és Erdélyiné: Építsünk könnyen és lassan adatmodellt, 1997, Veszprém Váthy Ágnes, Németh Krisztián: Adatmodellezési feladatok I., Veszprém 1996, Veszprémi Egyetem Stolnicki Gyula: SQL kézikönyv,
ComputerBooks (http://www.computerbookshu/sqlhtm) Juhász I., Almási B, Márton Á, Balogh J,: ORACLE 60 referencia kézikönyv Balogh Judit, Rutkovszky Edéné: SQL Példatár, 1994 Teach Yourself SQL in 21 Days, Second Edition ftp://pc123a.mathkltehu/anonymous/Adatb/sql21/indexhtm Introduction to Structured Query Language ftp://pc123a.mathkltehu/anonymous/Adatb/SQLTut/sqltuthtm SQLFAQ: Table of Contents http://epoch.CSBerkeleyEDU:8000/sequoia/dba/montage/FAQ/SQL TOChtml SQLReference Page http://www.contribandrewcmuedu/~shadow/sqlhtml SQLStandards Home Page http://www.jcccom/sql stndhtml SQLTutorial http://w3.onenet/~jhoffman/sqltuthtm miniSQL http://www.Hughescomau/ 24 4. Függelék Figure A A SELECT utasítás SELECT [ALL] | [DISTINCT] {*|[tábla.]*|[tábla.]kifejezés [aliasnév]} [,[tábla.]kifejezés [aliasnév]] FROM [felhasználó.]tábla [aliasnév] [,[felhasználó]tábla [aliasnév]] WHERE feltétel CONNECT BY feltétel START WITH feltétel GROUP BY
kifejezés[,kifejezés]. HAVING feltétel UNION | INTERSECT | MINUS SELECT. ORDER BY kifejezés | ASC | DESC,. FOR UPDATE OF oszlop, oszlop. NOWAIT; Függelék A A CREATE TABLE utasítás CREATE TABLE [felhasználó.]tábla (oszlopelem|táblamegszorítás [,oszlopelem|táblamegszorítás] ); oszlopelem: név típus [DEFAULT kifejezés] [oszlopmegszorítás] oszlopmegszorítás: [NULL | NOT NULL | [CONSTRAINT megszorítás] ] [UNIQUE | PRIMARY KEY [CONSTRAINT megszorítás] ] [REFERENCES [felhasználó.] tábla [(oszlop)] [CONSTRAINT megszorítás] ] [CHECK (feltétel) [CONSTRAINT megszorítás] ] táblamegszorítás: [UNIQUE | PRIMARY KEY (oszlop[,oszlop])[CONSTRAINT megszorítás] ] [FOREIGN KEY (oszlop [,oszlop])] [REFERENCES [felhasználó.]tábla [oszlop[,oszlop] [CONSTRAINT megszorítás] ] [CHECK (feltétel) [CONSTRAINT megszorítás] ] Függelék B A “Suli könyvtár” adatbázis A táblák létrehozása create table szerzo ( szerzo azon char(3) not null primary key, Vnev
char(15) not null check (Vnev = UPPER(Vnev)), Unev char(10) not null check (Unev = UPPER(Unev)), telszam char (12) null ); create table olvaso ( o azon char(3) not null primary key, Vnev char(15) not null check (Vnev = UPPER(Vnev)), Unev char(10) not null check (Unev = UPPER(Unev)), lakcim char (20) not null, beir dat date not null, okod number(2) null ); create table kiado ( kiad azon char(4) not null primary key, kiad nev char(15) not null check (kiad nev=upper(kiad nev)), varos char(15) null 25 ); create table konyv ( isbn char(6) not null primary key, cim char(20) not null check (cim=upper(cim)), kiad azon char(4) not null references kiado(kiad azon), kiad dat date null ); create table peldany ( lelt szam char(4) not null primary key, isbn char(6) not null references konyv(isbn), kolcs e number(1) not null check (kolcs e=0 or kolcs e=1), ar number(4) not null ); create table kolcson ( lelt szam char(4) not null references peldany(lelt szam), o azon char(3) not null references
olvaso(o azon), primary key (lelt szam), kolcs dat date not null ); create table elojegy ( isbn char(6) not null references konyv(isbn), o azon char(3) not null references olvaso(o azon), primary key (isbn,o azon), eloj dat date default sysdate not null ); create table irta ( szerzo azon char(3) not null references szerzo(szerzo azon), isbn char(6) not null references konyv(isbn), primary key (szerzo azon,isbn) ); create table dolgozo ( d azon char(3) not null primary key, Vnev char(15) not null check (Vnev = UPPER(Vnev)), Unev char(10) not null check (Unev = UPPER(Unev)), beosztas char(20), belepes date default sysdate not null, fizetes number(6), fonok char(3) ); grant ALL on irta to PUBLIC; grant ALL on szerzo to PUBLIC; grant ALL on elojegy to PUBLIC; grant ALL on kolcson to PUBLIC; grant ALL on peldany to PUBLIC; grant ALL on konyv to PUBLIC; grant ALL on kiado to PUBLIC; grant ALL on olvaso to PUBLIC; grant ALL on dolgozo to PUBLIC; 26 Kapcsolatok A táblák adatai OLVASO O
AZON VNEV ------ --------------001 GIPSZ 002 KEMENY 003 MINTA 004 KEREK 005 POR KIADO KIAD AZON --------K001 K002 K003 K004 UNEV ---------JAKAB HELEN MOKUS ERNO OSZKAR KIAD NEV --------------TANKONYVKIADO AKADEMIAI KIADO GONDOLAT KIADO KOSSUTH KIADO LAKCIM -------------------DEBRECEN FAL U. 1 APAFA FA U. 12 SARAND FELFAL U. 9 SZOB TINTA U.13 EGER DOBO U.21 VAROS --------------LONDON NEW YORK LONDON LONDON KONYV ISBN CIM KIAD DAT -----100001 100002 100003 100004 100005 100006 --------01-JAN-93 12-FEB-97 21-JUN-94 24-NOV-91 01-JUL-90 01-JUL-92 KIAD AZON -------------------- ---TUSKEVAR K002 EGRI CSILLAGOK K001 KOSZIVU EMBER FIAI K001 EMPATIA K003 ANATOMIA K002 RECEPTEK K003 PELDANY LELT SZAM --------L001 L002 L003 L004 L005 L006 ISBN KOLCS E AR ------ --------- ---------- 100001 1 1100 100001 1 1100 100001 1 1150 100002 1 800 100002 1 800 100003 0 1200 27 BEIR DAT OKOD --------- ------------04-JAN-90 27-FEB-95 30-NOV-94 7 22-MAY-93 6 12-MAY-93 6 L007 L008 L009 L010 L011
L012 L013 100004 100005 100004 100004 100005 100006 100006 KOLCSON LELT SZAM --------L002 L003 L004 L005 L007 L008 O AZON -----002 003 002 001 002 001 ELOJEGY ISBN O AZON ------ -----100002 003 100005 002 1 1 0 1 0 1 1 300 650 300 340 680 600 600 KOLCS DAT --------05-JAN-97 28-JUL-97 21-JUN-97 11-AUG-97 15-AUG-97 21-FEB-97 ELOJ DAT --------22-AUG-97 21-JUN-97 SZERZO SZERZO AZON ----------S01 S02 S03 S04 S05 S06 S07 VNEV --------------FEKETE GARDONYI JOKAI BUDA TARSOLY KUDLIK PSOTA IRTA SZERZO AZON ----------S01 S02 S03 S04 S04 S05 S06 S07 ISBN -----100001 100002 100003 100004 100005 100005 100006 100006 DOLGOZO d azon Vnev ------- ------D01 NAGY D02 KISS D03 BARNA D04 SZILARD D05 KEREK D06 FUTO Unev -------KLARA TEREZ PETER ISTVAN EMIL ERZSEBET UNEV TELSZAM ---------- -----------ISTVAN GEZA MOR BELA EMIL JULIA IREN beosztas ------------IGAZGATO OSZTALYVEZETO OSZTALYVEZETO KONYVTAROS KONYVTAROS ELJARO belepes ---------30-NOV-92 13-JAN-94 23-SEP-93 17-MAR-91 10-OCT-92
01-FEB-96 28 fizetes ------110000 82000 79000 28000 31000 30000 fonok ----NULL D01 D01 D02 D03 D01 Függelék C Rövidítések ABR Adatbázisrendszer DDL Data Definition Language (adatdefiníciós nyelv) DML Data Manipulation Language (adatmanipulációs nyelv) DCL Data Control Language (adatvezérlő nyelv) SQL Structured Query Language (struktúrált lekérdező nyelv) DB Data Base (adatbázis) DBA Data Base Administrator (adatbázis adminisztrátor) DBMS Data Base Management System (adatbázis-kezelő rendszer) RDBMS Relational Data Base Management System (relációs adatbázis-kezelő rendszer) KEZELÉS Segédanyag a gyakorlathoz Összeállította: Várady Lajos varadyl@math.kltehu 29 TARTALOM 1. RELÁCIÓKON VÉGEZHETŐ MŰVELETEK 31 1.1 PROJEKCIÓ (EGY TÁBLA VERTIKÁLIS MEGSZORÍTÁSA) 31 1.2 SZELEKCIÓ (EGY TÁBLA HORIZONTÁLIS MEGSZORÍTÁSA) 31 1.3 UNIÓ 31 1.4 METSZET 31 1.5 KÜLÖNBSÉG 31 1.6 DESCARTES SZORZÁS 32 1.7 ÖSSZEKAPCSOLÁS
32 2. AZ ORACLE SQL 33 2.1 SQL PARANCSOK 33 2.2 SZERKESZTŐ PARANCSOK 33 2.3 SZÜKSÉGES ALAPFOGALMAK 34 2.31 Literál 34 2.32 Kifejezés 34 2.33 Változó 34 2.34 Operátorok 34 2.4 QUERY NYELV 36 2.41 Projekció megvalósítása 36 2.42 Szelekció megadása 36 2.43 A kiválasztott sorok rendezése 37 2.44 Csoportok képzése 37 2.45 JOIN 39 2.46 Egymásbaágyazott lekérdezések 40 2.47 Táblákban kódolt hierarchiák 41 2.5 ADATDEFINÍCIÓS NYELV 46 2.51 Adattípusok 46 2.52 Táblák létrehozása, törlése, módosítása 46 2.6 ADATMANIPULÁCIÓS NYELV 47 2.7 ADATVEZÉRLŐ NYELV 50 2.71 Tranzakció-kezelés 50 2.72 Privilégiumok és hozzáférési jogok 50 3. TOVÁBBI INFORMÁCIÓK 52 4. FÜGGELÉK 53 FÜGGELÉK A A CREATE TABLE UTASÍTÁS . 53 FÜGGELÉK B A “SULI KÖNYVTÁR” ADATBÁZIS . 53 FÜGGELÉK C RÖVIDÍTÉSEK . 57 30 5. Relációkon végezhető műveletek 1 Projekció (egy tábla vertikális megszorítása) Def: Legyen R ⊆ D1 ×.× Dn ,
akkor R projekciója Di ,, Di -ra Ekkor 1 k Π i1,.,ik ( R) = {s| ∃s2 ∈ R úgy, hogy s2|( Di1 ,., Dik ) = s} Példa: Az OLVASO (o azon, vnev, unev, lakcim, kiad azon, beir dat, okod) tábla projekciója a vnev, unev, lakcim attribútumokra. VNEV GIPSZ KEMENY MINTA KEREK POR UNEV JAKAB HELEN MOKUS ERNO OSZKAR LAKCIM DEBRECEN FAL U. 1 APAFA FA U. 12 SARAND FELFAL U. 9 SZOB TINTA U.13 EGER DOBO U.21 2 Szelekció (egy tábla horizontális megszorítása) Jelölése: σ Ψ (R ) , ahol Ψ SQL keresési feltétel A szelekció a reláció azon elemei (sorok), amelyek eleget tesznek a Ψ SQL keresési feltételnek. Példa: Szelekció az OLVASO (o azon, vnev, unev, lakcim, kiad azon, beir dat, okod) táblából, feltétel: vnev=’GIPSZ’ and unev=’JAKAB’. O AZON 001 VNEV GIPSZ UNEV JAKAB LAKCIM DEBRECEN FAL U. 1 BEIR DAT 04-JAN-90 OKOD Az unió, metszet és különbség műveletek csak pontosan azonos attribútumokat tartalmazó táblákon végezhetők. Mivel a
reláció egy halmaz, ezek a műveletek a halmazelméletben tanultakkal megegyező eredményt szolgáltatnak. 3 Unió Példa Q(A,B,C) R(D,A,E) relációk uniója az S reláció. Q A a a B a c C b b R D a b e A a c f E b d g S a a b e 4 Metszet Példa Q R = S S a a b 5 Különbség QR=S 31 a c c f b b d g S a c b 6 Descartes szorzás Példa Q× R = S S Q.A a a a a a a B a a a c c c C b b b b b b D a b e a b e R.A a c f a c f E b d g b d g 7 Összekapcsolás összekapcsolás/join, a Descartes szorzással kapott halmaz egy részhalmaza Def: Legyen R1 ⊆ D1 ×.× Dm ; R2 ⊆ D1 ×× Dn Legyen Di = D j = D A R1 és R2 relációk összekapcsolása a D kapcsoló attribútum szerint az a D( , R2 ), amire | (d1,.,diD( R1 , R2 )={(d1,,di-1,d,di+1,,dm,d1`,,dj-1`,dj+1`,,dn`) 1,d,di+1,.,dm,) ∈ R1 ; és (d1`,,dj-1`,d,dj+1`,,dn`) ∈ R2 } R1 Két kiinduló táblát használ. Az eredmény a két tábla soraiból épül fel Mindkét kiinduló táblában ki kell
jelölni egy attribútumot (kapcsoló attribútum). Az eredménytábla sorai a következőképpen keletkeznek: e) Válasszuk ki az első tábla első sorát (aktuális sor). f) Keressük meg a második táblában azokat a sorokat, amelyek kapcsoló attribútuma ugyanazt az értéket tartalmazza, mint az aktuális sor kapcsoló attribútuma. Ha van ilyen sor, akkor folytassuk a következő lépéssel, ha nincs válasszuk a következő aktuális sort. g) Az eredménytábla sorait úgy kapjuk, hogy az aktuális sort az összes lehetséges módon folytatjuk az előző lépésben megkeresett kapcsolódó sorokkal. h) Az eredménytábla összes sorát úgy kapjuk, ha az első tábla összes során mint aktuális soron végiglépkedünk. Ez volt az equijoin. (kapcsoló attribútumok értékegyenlőségén alapszik) A nem equijoin a kapcsoló attribútumok egyenlőségtől eltérő relációján alapszik. A külső join nemcsak a kapcsolódó sorokat teszi az eredménytáblába, hanem az
első tábla azon sorait is, amelyhez nem létezett kapcsolódó sor a második táblából. Példa equijoinra S Q.A a a kiad azon K001 K001 K002 K002 K003 B a c C b b D a a R.A a a kiad nev TANKONYVKIADO TANKONYVKIADO AKADEMIAI KIADO AKADEMIAI KIADO GONDOLAT KIADO E b b varos LONDON LONDON NEW YORK NEW YORK LONDON 32 isbn 100002 100003 100001 100005 100004 cim EGRI CSILLAGOK KOSZIVU EMBER FIAI TUSKEVAR ANATOMIA EMPATIA K003 GONDOLAT KIADO LONDON 100006 RECEPTEK varos LONDON LONDON NEW YORK NEW YORK LONDON LONDON LONDON isbn 100002 100003 100001 100005 100004 100006 Példa külső joinra kiad azon K001 K001 K002 K002 K003 K003 K004 kiad nev TANKONYVKIADO TANKONYVKIADO AKADEMIAI KIADO AKADEMIAI KIADO GONDOLAT KIADO GONDOLAT KIADO KOSSUTH KIADO cim EGRI CSILLAGOK KOSZIVU EMBER FIAI TUSKEVAR ANATOMIA EMPATIA RECEPTEK 6. Az oracle sql Négy résznyelve bontható: 5. lekérdező QUERY Language 6. adatdefiníciós DDL (Data Definition Language) 7.
adatmanipulációs DML (Data Manipulation Language) 8. adatvezérlő DCL (Data Control Language 1 SQL parancsok SQLPLUS EXIT vagy QUIT CONN[ECT] [felh név[/jelszó]]| [felh név[/jelszó@adatbázis]] DISCONNECT ; HELP parancsnév /* Megjegyzés / Az SQL parancsokat ;-vel kell lezárni. 2 Szerkesztő parancsok SET PAUSE ON/OFF LIST [szám] A[PPEND] C[HANGE] ksor1/ksor2 I[NPUT] DEL SAVE fnev [CRE|REP|APP] GET EDIT [fnev] DEF[INE] változó=érték DEF[INE] változó UNDEF[INE] változó DEFINE EDITOR=’editor név’ @|STA[RT] fnev p1[ p2] RUN vagy / SPOOL [ON/OFF/OUT] | [fnev] HOST DESC[RIBE] [felhasználói név]tábla[@adatbázis] Képernyőgörgetés laponkénti megállással. SQL buffer listázása. Aktuláis sor végére karakterek fűzése. Bufferben lévő SQL parancshoz új sor hozzáfűzése. Az aktuális sort törli a bufferből. A buffer tartalmát fájlba írja. Kimentett SQL fájlt bufferbe visszatölt. Az op.r editorát hívja meg fnev szerkesztésre Változót
definiálhatunk Megjeleníti a változó értékét Megszünteti a változót Megadhatjuk, mely editor használja a rendszer az EDIT paranccsal SQL kiterjesztésű fnev parancsfájlt futtat, p1,p2,,pn paraméterek, amelyekre a parancsfájlban &1,&2,,&n -nel lehet hivatkozni. a buffer tartalmát futtaja Fájlba menti a képernyő tartalmát Kilépés az op.r-be Tábla szerkezetét írja ki. 33 Ábra 2.1 Az aktuális buffer és a külső editor EDIT Külsõ editor az editor SAVE parancsa EDIT fájl az editor SAVE parancsa GET fájl Kurrens buffer Operációs rendszer fájl SAVE fájl START fájl 3 Szükséges alapfogalmak .1 Literál A CHAR, DATE, NUMBER standard ORACLE adattípusok értékeinek konstans alakja. Pl: ‘karaktersorozat’ -123.45 ‘01-JAN-97’ .2 Kifejezés • Literál, változó, függvény, mezőnév magában is, vagy ezeknek operátorokkal való összekapcsolása kifejezést alkot. • A kifejezésnek értéke van: pl. egy szám, szöveg,
dátum, vagy igaz, hamis • Az igaz, hamis értékű kifejezést logikai kifejezésnek, vagy feltételnek hívjuk. .3 Változó • Neve van • Értéket adhatunk neki (DEF[INE] változó = érték, vagy a @|RUN parancsfájl p1[ p2] paraméterek segítségével, lásd 2.2 részben) • Hivatkozhatunk rá (ACCEPT vagy DEFINE által létrehozott változóra &változónév, az @|RUN parancsfájl p1[ p2] paraméterekre &1, &2 stb. lásd 22) • A változóknak csak literálokat adhatunk értékül. (Lásd 22 rész) Pl:’&varos’ .4 Operátorok Lekérdező szelekciós utasítás UNION szelekciós utasítás szelekciós utasítás eredményét halmazt kell felfogni. -“-“- szelekciós utasítás MINUS szelekciós utasítás szelekciós ut. INTERSECT szelekciós ut Logikai NOT AND OR Nem És Vagy 34 mint Minden. Előtte szerepelnie kell relációs operátornak. Valamelyik. Előtte szerepelnie kell relációs operátornak.
ALL(kifejezés[,kifejezés] | szelekciós utasítás) ANY(kifejezés[,kifejezés] | szelekciós utasítás) BETWEEN kifejezés AND kifejezés EXISTS (szelekciós utasítás) Igaz, ha a szelekciós utasítás ad vissza értéket IN(kifejezés[,kifejezés] | szelekciós utasítás) kifejezés IS NOT NULL kifejezés IS NULL LIKE kifejezés NOT BETWEEN kifejezés AND kifejezés NOT EXISTS (szelekciós utasítás) NOT IN(kifejezés[,kifejezés] | szelekciós utasítás) NOT LIKE kifejezés %=*, =? Numerikus +,-,*,/ Relációs vagy összehasonlító operátor = !=, <>, ^= > < >= <= Dátumra jelentés dátumkifejezés - dátumkifejezés napok száma a két dátum között Sztringekre karakterkifejezés || karakterkifejezés Konkatenáció 35 4 QUERY nyelv .1 Projekció megvalósítása SELECT [DISTINCT] kifejezés [aliasnév][, kifejezés [aliasnév]] FROM táblanév; Példa SELECT Vnev, Unev, lakcim FROM olvaso; SELECT * FROM konyv; SELECT * FROM tab;
(csak az Oracle-nél) SELECT varos FROM kiado; SELECT DISTINCT varos FROM kiado; varos varos LONDON LONDON NEW YORK NEW YORK LONDON LONDON .2 Szelekció megadása SELECT [DISTINCT] kifejezés [aliasnév][, kifejezés [aliasnév]] FROM táblanév WHERE keresési feltétel; .1 Keresési feltétel (logikai kifejezés) • egyszerű összehasonlítás • összehasonlítás egy halmaz elemeivel • összehasonlítás NULL értékkel • összetett keresési feltétel Egyszerű összehasonlítás oszlopnév relációs operátor kifejezés|konstans Összehasonlítás egy halmaz elemeivel oszlopnév összehasonlító operátor halmaz definíció operátor jelentés BETWEEN kif. AND kif IN (lista) LIKE kar minta ,% Összehasonlítás NULL értékkel oszlopnév IS NULL Összetett keresési feltételek operátor jelentés NOT AND OR A használható operátorokról bővebben a 2.34 részben olvashatunk 36 Példa ORACLE SELECT o azon, Vnev, Unev, lakcim FROM olvaso WHERE lakcim
like ‘EGER%’ AND okod=6; MSSQL SELECT o azon, Vnev, Unev, lakcim FROM olvaso WHERE lakcim like "EGER*" AND okod=6; o azon Vnev Unev lakcim 005 POR OSZKÁR EGER DOBO U.21 SELECT isbn,cim, kiad dat FROM konyv WHERE kiad dat BETWEEN ‘01/01/94’ AND ‘01/01/98’; isbn cim kiad dat 100002 EGRI CSILLAGOK 2/12/97 100003 KOSZIVU EMBER 7/1/94 SELECT * FROM olvaso WHERE okod IS NULL; o azon vnev unev lakcim beir dat okod 001 GIPSZ JAKAB DEBRECEN FAL U. 1 1/4/90 002 KEMENY HELEN APAFA FA U. 12 2/27/95 .3 A kiválasztott sorok rendezése SELECT [DISTINCT] kifejezés [aliasnév][, kifejezés [aliasnév]] FROM táblanév [WHERE keresési feltétel] ORDER BY kifejezés [DESC] [, kifejezés[DESC]]; Példa SELECT isbn, cim,kiad dat FROM konyv WHERE kiad azon=’K001’ /* MSACCESS-ben ‘ helyett “/ ORDER BY cim; isbn cim kiad dat 100002 EGRI CSILLAGOK 2/12/97 100003 KOSZIVU EMBER FIAI 6/21/94 SELECT isbn, lelt szam,kolcs e FROM peldany ORDER BY isbn, lelt szam; .4 Csoportok
képzése SELECT [DISTINCT] kifejezés [aliasnév][, kifejezés [aliasnév]] FROM táblanév [WHERE keresési feltétel] GROUP BY kifejezés [,kifejezés] [HAVING csopkiv. feltétel] [ORDER BY kifejezés [DESC] [, kifejezés[DESC]]]; 37 .1 Csoportfüggvények (Oracle-nél és az Access-nél is ugyanaz) AVG([DISTINCT|ALL] kifejezés) A Null értéket figyelmen kívül hagyja. COUNT([DISTINCT|ALL] {*|kifejezés}) A Null értéket figyelmen kívül hagyja. MAX([DISTINCT|ALL] kifejezés) MIN([DISTINCT|ALL] kifejezés) SUM([DISTINCT|ALL] kifejezés) A függvények NUMBER típusú adatokra alkalmazhatók, kivéve a MAX(), MIN(), COUNT() függvényeket, amelyek CHAR és DATE típusú adatokra is működnek. Példa SELECT okod, min(beir dat), max(beir dat), COUNT(*) FROM olvaso GROUP BY okod HAVING COUNT(*)>1; okod min(beir dat) max(beir dat) COUNT(*) 1/4/90 2/27/95 2 6 5/12/93 5/22/93 2 .2 Sztringátalakító függvények INITCAP(kifejezés) INSTR(kifejezés,’sztring’)
LENGTH(kifejezés) LOWER(kifejezés) SUBSTR(kifejezés, kp, hossz) UPPER(kifejezés) .3 Aritmetikai függvények ABS(kifejezés) GREATEST(kifejezés,kif2) LEAST(kifejezés,kif2) MOD(kifejezés, osztó) POWER(kifejezés,kitevő) ROUND(kifejezés,szám) SIGN(kifejezés) SQRT(kifejezés) TRUNC(kifejezés,szám) egyéb műveletek:*,/,+,- .4 Dátumkezelő függvények ADD MONTHS(dát,hónapszám) GREATEST(d1,d2) LEAST(d1,d2) MONTHS BETWEEN(d1,d2) ROUND(dátum,formátum) TO DATE(sztring) TO CHAR(dátum[,formátum]) SYSDATE Példa ORACLE MSACCESS SELECT lelt szam, o azon, SYSDATE-kolcs dat ota kint van SELECT lelt szam, o azon, nowkolcs dat as ota kint van 38 FROM kolcson; lelt szam L002 L003 L004 L005 L007 L008 o azon 002 003 002 001 002 001 FROM kolcson; ota kint van 259.991331018522 55.991331018522 92.991331018522 41.991331018522 37.991331018522 212.991331018522 .5 Az NVL függvény NVL(oszlopkif, kif) =oszlopkif, ha az nem NULL, egyébként =kif Példa: SELECT NVL(ar,0) FROM
peldany; .5 JOIN SELECT [DISTINCT] kifejezés [aliasnév][, kifejezés [aliasnév]] FROM táblanév [aliasnév], táblanév [aliasnév] WHERE kapcs oszlop1 összehas operátor kapcs oszlop2 AND további feltétel [GROUP BY kifejezés [,kifejezés]] [HAVING csopkiv feltétel] [ORDER BY kifejezés [DESC] [, kifejezés[DESC]]]; Példa ORACLE MSACCESS SELECT Vnev, Unev, lakcim, kolcs dat FROM olvaso o, kolcson k WHERE o.o azon=ko azon AND SYSDATE-kolcs dat>30; SELECT Vnev, Unev, lakcim, kolcs dat FROM olvaso INNER JOIN kolcson ON olvaso.o azon=kolcsono azon WHERE now-kolcs dat>30; Vnev KEMENY MINTA KEMENY GIPSZ Unev HELEN MOKUS HELEN JAKAB lakcim APAFA FA U. 12 SARAND FELFAL U. 9 APAFA FA U. 12 DEBRECEN FAL U. 1 kolcs dat 1/5/97 7/28/97 6/21/97 2/21/97 ORACLE MSACCESS SELECT a.kiad azon, kiad nev, varos, isbn,cim FROM konyv k, kiado a WHERE a.kiad azon=kkiad azon; SELECT kiado.kiad azon, kiad nev, varos, isbn, cim FROM kiado INNER JOIN konyv ON kiado.kiad azon=konyvkiad
azon ; kiad azon kiad nev K001 TANKONYVKIADO K001 TANKONYVKIADO K002 AKADEMIAI KIADO K002 AKADEMIAI KIADO K003 GONDOLAT KIADO K003 GONDOLAT KIADO varos LONDON LONDON NEW YORK NEW YORK LONDON LONDON 39 isbn 100002 100003 100001 100005 100004 100006 cim EGRI CSILLAGOK KOSZIVU EMBER FIAI TUSKEVAR ANATOMIA EMPATIA RECEPTEK Outer Join(+) azt a táblát egészíti ki NULL értékekkel, amely a kapcsoló oszlop mellett van. ORACLE MSACCESS SELECT a.kiad azon, kiad nev, varos, isbn, cim FROM kiado a, konyv k WHERE a.kiad azon=kkiad azon (+); SELECT kiado.kiad azon, kiad nev, varos, isbn, cim FROM kiado LEFT JOIN konyv ON kiado.kiad azon=konyvkiad azon ; kiad azon K001 K001 K002 K002 K003 K003 K004 kiad nev TANKONYVKIADO TANKONYVKIADO AKADEMIAI KIADO AKADEMIAI KIADO GONDOLAT KIADO GONDOLAT KIADO KOSSUTH KIADO varos LONDON LONDON NEW YORK NEW YORK LONDON LONDON LONDON isbn 100002 100003 100001 100005 100004 100006 cim EGRI CSILLAGOK KOSZIVU EMBER FIAI TUSKEVAR ANATOMIA EMPATIA
RECEPTEK Példa nem equijoinra Listázzuk ki azokat, akik később iratkoztak be, mint GIPSZ JAKAB. ORACLE MSACCESS SELECT x.vnev,xunev,xlakcim, y.vnev,yunev FROM olvaso x,olvaso y WHERE x.beir dat>ybeir dat AND UPPER(y.vnev)=’GIPSZ’ AND UPPER(y.unev)=’JAKAB’; SELECT x.vnev,xunev,xlakcim, y.vnev,yunev FROM olvaso as x,olvaso as y WHERE x.beir dat>ybeir dat AND y.vnev="GIPSZ" AND y.unev="JAKAB"; Pl: Listázzuk ki, hogy az egyes olvasóknál hány könyv van. ORACLE MSACCESS SELECT vnev, unev, count(k.lelt szam) FROM olvaso o, kolcson k WHERE o.o azon=ko azon (+) group by o.o azon,vnev,unev; SELECT vnev, unev, count(kolcson.lelt szam) FROM olvaso left join kolcson on olvaso.o azon=kolcsono azon group by olvaso.o azon,vnev,unev; .6 Egymásbaágyazott lekérdezések Az első SELECT WHERE részében újabb SELECT, össz. 15 A beágyazott SELECT egyszerre több rekordot is visszaadhat. Ezek kezelésére használhatók a következők: ANY ALL EXISTS
A belső SELECT-ből átvehetünk több oszlopot is. Példa Listázzuk ki azokat, akik később iratkoztak be, mint GIPSZ JAKAB. ORACLE SELECT vnev,unev,lakcim FROM olvaso MSACCESS SELECT vnev,unev,lakcim FROM olvaso 40 WHERE beir dat>(select beir dat From olvaso where vnev=’GIPSZ’ AND unev=’JAKAB’); WHERE beir dat>(select beir dat From olvaso where vnev="GIPSZ" AND unev="JAKAB"); Listázzuk ki azon könyveket (ISBN, cim), amelyek Gipsz Jakabnál vannak. ORACLE SELECT v.isbn,cim FROM konyv v, peldany p WHERE v.isbn=pisbn AND lelt szam IN (SELECT lelt szam FROM kolcson k, olvaso o WHERE k.o azon=oo azon AND UPPER(vnev)=’GIPSZ’ AND UPPER(unev)=’JAKAB’); MSACCESS SELECT konyv.isbn,cim FROM konyv inner join peldany ON konyv.isbn=peldanyisbn where lelt szam IN (SELECT lelt szam FROM kolcson inner join olvaso ON kolcson.o azon=olvasoo azon where vnev="GIPSZ" AND unev="JAKAB"); isbn cim 100002 EGRI CSILLAGOK 100005
ANATOMIA Példa korrelált lekérdezésre: a belső SELECT hivatkozik a külsőre. Listázzuk ki azokat a könyveket, amelyeknek az ára nagyobb a könyv kiadója által kiadott könyvek átlagáránál. ORACLE SELECT lelt szam,k.isbn,cim,ar,kiad az on FROM konyv k,peldany p WHERE p.isbn=kisbn and ar>(SELECT avg(ar) FROM peldany, konyv WHERE k.kiad azon=kiad azon); lelt szam --------L001 L002 L003 L004 L005 L006 isbn -----100001 100001 100001 100002 100002 100003 MSACCESS SELECT lelt szam,k.isbn,cim,ar,kiad az on FROM konyv as k,peldany as p WHERE p.isbn=kisbn and ar>(SELECT avg(ar) FROM peldany, konyv WHERE k.kiad azon=kiad azon); cim -------------------TUSKEVAR TUSKEVAR TUSKEVAR EGRI CSILLAGOK EGRI CSILLAGOK KOSZIVU EMBER FIAI ar -------1100 1100 1150 800 800 1200 kiad azon --------K002 K002 K002 K001 K001 K001 Pl: Lisázzuk ki azokat a műveket, amelyek kölcsönözhetők. SELECT szerzo,cim FROM konyv WHERE isbn in (select isbn From peldany where kolcs e=1); Listázzuk
ki azokat a műveket, amelyeket Londonban adtak ki, és van kölcsönözhető példány belőlük. .7 Táblákban kódolt hierarchiák SELECT [ALL] | [DISTINCT] {*| kifejezés [aliasnév]} [,kifejezés [aliasnév]]. FROM táblanév 41 CONNECT BY PRIOR oszlopnév1= oszlopnév2 START WITH oszlopnév=kifejezés; A CONNECT BY részben adható meg a hierarchiát kódoló két oszlop neve (az oszlopnév1 az alacsonyabb, míg a oszlopnév2 a magasabb szinten lévő adat a hierarchiában). A visszakeresés kiindulási pontját a START WITH után lehet megadni. Példa: Listázzuk ki NAGY KLARA összes beosztottját! SELECT LPAD( , 2*LEVEL)||VNEV||UNEV STRUKTURA,LEVEL,D AZON,FONOK FROM DOLGOZO CONNECT BY PRIOR D AZON = FONOK START WITH VNEV=NAGY AND UNEV=’KLARA’; STRUKTURA LEVEL D AZON FONOK -------------------------------------NAGY KLARA 1 D01 KISS TEREZ 2 D02 D01 SZILARD ISTVAN 3 D04 D02 BARNA PETER 2 D03 D01 KEREK EMIL 3 D05 D03 FUTO ERZSEBET 2 D06 D01 Listázzuk ki NAGY KLARA
összes közvetlen beosztottját! SELECT LPAD( , 2*LEVEL)||VNEV||UNEV STRUKTURA,LEVEL,D AZON,FONOK FROM DOLGOZO WHERE level=2 CONNECT BY PRIOR D AZON = FONOK START WITH VNEV=NAGY AND UNEV=’KLARA’; Számítsuk ki a különböző vezetői szinteken az átlagfizetést! SELECT LEVEL,AVG(FIZETES) FROM DOLGOZO CONNECT BY PRIOR D AZON = FONOK START WITH VNEV=NAGY AND UNEV=’KLARA’ GROUP BY LEVEL; 42 FELADATOK 21. Határozzuk meg, hány londoni kiadó van az adatbázisunkban 22. Határozzuk meg, kik azok a debreceniek, akik 1990 februárjában iratkoztak be 23. Határozzuk meg, hány darab kölcsönözhető, és hány darab köteles példány van a könyvtárunkban. 24. Határozzuk meg, hány darab 1994 január 1-től régebbi kölcsönözhető mű (létezik kölcsönözhető példánya) van a könyvtárunkban. 25. Melyik kiadótól van a legrégebbi könyvünk 26. Listázzuk ki az olvasókat és adataik mellet azt, hogy az általuk legrégebben kivitt példány hány hete van
náluk, névsor szerint rendezve. 27. Listázzuk ki a FEKETE ISTVAN által írt könyveket 28. Irassuk ki azokat a könyveket, amelyekre egynél több előjegyzés van 29. Irassuk ki azokat a könyveket, amelyek drágábbak, mint a TANKONYVKIADO által kiadott könyvek átlagára. 30. Irassuk ki, hogy az egyes szerzők hány könyvet írtak, névsor szerint rendezve 31. Irassuk ki, hogy az egyes olvasóknál hány példány van kint, darabszám szerint csökkenően rendezve, és a listában csak azok legyenek benne, akiknél legalább két könyv van. 32. Irassuk ki, hogy az egyes olvasók hány könyvre jegyeztek elő 33. Hány olvasónak nincs még figyelmeztetése (okod IS NULL) 34. Mennyi pénz szükséges a jelenlegi dolgozók havi bérének 10 %-os emeléséhez 35. Irassuk ki, hogy az EGRI CSILLAGOKra jegyeztek-e elő, és ha igen, akkor ki(k) 36. Határozzuk meg a könyvtárosok átlagfizetését 37. Irassuk ki BARNA PETER szintjén az átlagfizetést 38. Irassuk ki az EGRI
CSILLAGOK című könyv bent lévő példányait 39. Kiviheti-e GIPSZ JAKAB az TUSKEVAR című könyvet? És az EGRI CSILLAGOKat 40. Listázzuk ki a CIMVAL változó által meghatározott könyvből bent lévő kivihető (kölcsönözhető és nincs kikölcsönözve) példányokat. 43 MEGOLDÁSOK 21. SELECT COUNT(kiad azon) FROM kiado WHERE varos=’LONDON’; 22. SELECT * FROM olvaso WHERE lakcim LIKE ‘DEBRECEN %’ AND beir dat<’01-MAR1990’ AND beir dat>=’01-FEB-1990’; 23. SELECT kolcs e, COUNT(*) FROM peldany GROUP BY kolcs e; 24. SELECT COUNT(ISBN) FROM konyv WHERE kiad dat<’01-JAN-1994’ AND ISBN IN (SELECT ISBN FROM peldany WHERE kolcs e=1); 25. SELECT cim,kiad dat,a* FROM kiado a, konyv k WHERE k.kiad azon=akiad azon AND kiad dat=(SELECT MIN(kiad dat) FROM konyv); 26. SELECT o*, (sysdate-kolcs dat)/7 FROM olvaso o,kolcson k WHERE o.o azon=ko azon AND kolcs dat = (SELECT MIN(kolcs dat) FROM kolcson WHERE o azon=o.o azon); 27. SELECT * FROM konyv WHERE
ISBN IN (SELECT ISBN FROM irta i, szerzo s WHERE i.szerzo azon=sszerzo azon AND vnev=’FEKETE’ AND unev=’ISTVAN’); 28. SELECT * FROM konyv WHERE ISBN IN (SELECT ISBN FROM elojegy GROUP BY ISBN HAVING COUNT(ISBN)>1); 29. SELECT * FROM konyv WHERE ar>(SELECT AVG(NVL(ar,0)) FROM konyv k, kiado a WHERE a.kiad azon=kkiad azon (+) AND kiad nev=’TANKONYVKIADO’); {ez a megoldás akkor is helyes, ha a KOSSUTH KIADO szerepelt volna a kérdésben} 30. SELECT MAX(vnev), MAX(unev), COUNT(sszerzo azon) FROM szerzo s, irta i WHERE s.szerzo azon=iszerzo azon GROUP BY s.szerzo azon ORDER BY MAX(vnev), MAX(unev); 31. SELECT MAX(vnev), MAX(unev), COUNT(NVL(lelt szam,0)) FROM olvaso o, kolcson k WHERE o.o azon=ko azon (+) GROUP BY o.o azon HAVING COUNT(NVL(lelt szam,0))>1 ORDER BY COUNT(NVL(lelt szam,0)) DESC; 32. SELECT MAX(vnev), MAX(unev),COUNT(NVL(ISBN,0)) FROM olvaso o, elojegy e WHERE o.o azon=eo azon (+) GROUP BY o.o azon; 33. SELECT * FROM olvaso WHERE okod IS NULL OR okod=0;
34. SELECT SUM(11*fizetes-fizetes) FROM dolgozo; 35. SELECT * FROM olvaso WHERE o azon in (SELECT o azon FROM elojegy e,konyv k WHERE k.ISBN=eISBN AND cim=’EGRI CSILLAGOK’); 36. SELECT AVG(fizetes) FROM dolgozo WHERE beosztas=’KONYVTAROS’; 37. SELECT AVG(fizetes) FROM dolgozo WHERE LEVEL=(SELECT LEVEL FROM dolgozo CONNECT BY PRIOR d azon=fonok START WITH vnev=’BARNA’ AND unev=’PETER’) CONNECT BY PRIOR d azon=fonok START WITH vnev=’BARNA’ AND unev=’PETER’; 38. SELECT lelt szam FROM peldany MINUS SELECT klelt szam FROM kolcson k, peldany p WHERE k.lelt szam=plelt szam AND ISBN = (SELECT ISBN FROM konyv WHERE cim=’EGRI CSILLAGOK’); 39. GIPSZ JAKABnál kint lévő könyvek száma kisebb-e, mint a maximálisan kivihető könyvek száma (3)? SELECT COUNT(NVL(lelt szam,0))<3 FROM olvaso o, kolcson k WHERE o.o azon=ko azon (+) AND vnev=’GIPSZ’ AND unev=’JAKAB’ Van-e jelenleg az TUSKEVAR ból példány GIPSZ JAKABnál? SELECT vnev,unev FROM olvaso o,
kolcson k 44 WHERE o.o azon=k o azon AND vnev=’GIPSZ’ AND unev=’JAKAB’ AND lelt szam IN (SELECT lelt szam FROM konyv k, peldany p WHERE k.ISBN=pISBN AND cim=’TUSKEVAR’); Az előjegyzési sorban GIPSZ JAKAB előtt lévők száma kisebb-e, mint ahány szabad, kivihető példány van az TUSKEVARból jelenleg a könyvtárban? Az előjegyzési sorban GIPSZ JAKAB előtt lévők száma: SELECT COUNT(e.o azon) FROM olvaso o, elojegy e WHERE oo azon=eo azon AND ISBN=(SELECT ISBN FROM konyv WHERE cim=’ TUSKEVAR’) AND eloj dat < (SELECT eloj dat FROM olvaso o, elojegy e WHERE o.o azon=eo azon AND vnev=’GIPSZ’ AND unev=’JAKAB’); Hány szabad, kivihető példány van az TUSKEVARból? SELECT COUNT(p.lelt szam) FROM peldany p, kolcson k WHERE plelt szam =k.lelt szam (+) AND kolcs e=1 AND o azon is NULL AND ISBN = (SELECT ISBN FROM konyv WHERE cim=’ TUSKEVAR’); Az EGRI CSILLAGOK című könyv esetén a megoldás ugyanez, érdemes ilyen esetekben változókat
használni (cim=&CIMVALT). 40. SELECT plelt szam FROM peldany p, kolcson k WHERE plelt szam =klelt szam (+) AND kolcs e=1 AND o azon is NULL AND ISBN = (SELECT ISBN FROM konyv WHERE cim=&CIMVAL); 45 5 Adatdefiníciós nyelv .1 Adattípusok CHAR NUMBER[(n[)]][,d)} DATE LONG RAW VARCHAR LONG VARCHAR DECIMAL INTEGER SMALLINT FLOAT LONG RAW .2 Táblák létrehozása, törlése, módosítása CREATE TABLE táblanév (oszlopnév adattípus (szélesség) [NOT NULL], oszlopnév adattípus (szélesség) [NOT NULL], oszlopnév adattípus (szélesség) [NOT NULL]); Táblanév: max 30 karakter, egyedi, a névképzési szabályoknak megfelelő. A CREATE TABLE utasítás teljes leírását lásd a Függelék A-ben. Példa Lásd Függelék B. ALTER TABLE táblanév ADD oszlopnév adattípus (szélesség); [DROP megszorítás] Új oszlop táblához adása. ALTER TABLE táblanév MODIFY oszlopnév adattípus (új szélesség) [NOT NULL|NULL]; [DROP megszorítás] Meglévő
oszlop szélesítése. Példa ALTER TABLE kiado ADD telefon NUMBER(10); ALTER TABLE kiado MODIFY varos CHAR(20); • Táblában lévő oszlopot nem lehet direkt módon törölni. (Helyette: Új tábla létrehozása kevesebb oszloppal, értékek átmásolása, régi tábla törlése.) • Csak olyan oszlop típusát lehet megváltoztatni, illetve méretét csökkenteni, amelyben minden sor értéke NULL. • Egy létező oszlop csak akkor változtatható NOT NULL típusúvá, ha minden sorában nem NULL érték áll. DROP TABLE táblanév; Példa A Suli-könyvtár adatbázisának törlése (a táblák törlési sorrendje lényeges) drop drop drop drop drop drop table table table table table table elojegy; kolcson; peldany; konyv; kiado; olvaso; CREATE VIEW nézetnév [aliasnév] AS szelekciós utasítás; ORDER BY rész nem lehet benne, több táblára is működik. 46 DROP VIEW nézetnév; CREATE [UNIQUE] INDEX indnév. ON tábnév (oszlnév [ASC|DESC]); DROP INDEX
indnév.[ON tábnév]; 6 Adatmanipulációs nyelv INSERT INTO tábnév [(on1,on2,)] VALUES (e1,e2,e3,) | szelekciós utasítás; UPDATE tábnév SET on1=e1,on2=e2,. WHERE keresési felt. | szelekciós utasítás; DELETE FROM tábnév [WHERE keresési felt. | szelekciós utasítás}; Csak teljes sor törlése. Ha nincs WHERE vagy szelekciós, akkor minden sort töröl. 47 FELADATOK Képzeljük el, hogy egy könyvesboltot vezetünk. Készítsünk egy olyan adatbázist, amelyben nyilvántarthatjuk a készleten lévő könyveket, a rendeléseket, és az eladásokat. 7. Hozzuk létre a következő táblákat. 8. Vigyünk fel néhány szállítót a szallito táblába. 9. Rendeljünk könyveket. 10. A rendelés megérkezésekor, állítsuk be a teljesítés dátumát az adott napi dátumra, és aktualizáljuk a készletet, ahol az egységárat a beszerzési ártól (rendeles tábla egysegar mezője) állítsuk nagyobbra. 11. Az egyes könyvek eladásakor aktualizáljuk a
készletet (darab mező), és bővítsük az eladás táblát. 12. Kérdezzük le, hogy milyen könyvekből kell új rendelést feladni (pl darab<2) 48 MEGOLDÁSOK 6. CREATE TABLE szallito (szall azon CHAR(3) NOT NULL PRIMARY KEY, szall nev CHAR(20) CHECK (szall nev=UPPER(szall nev)), cim CHAR(30) CHECK (cim=UPPER(cim)) ); CREATE TABLE rendeles (rend szam CHAR(4) NOT NULL PRIMARY KEY, ISBN CHAR(6) NOT NULL, rend dat DATE DEFAULT SYSDATE NOT NULL, szall azon NOT NULL REFERENCES szallito, telj dat DATE, egysegar NUMBER (4) NOT NULL, mennyiseg NUMBER (4)); CREATE TABLE keszlet (ISBN CHAR(6) NOT NULL, besz dat DATE DEFAULT SYSDATE NOT NULL, PRIMARY KEY(ISBN, besz dat), cim CHAR(20) NOT NULL CHECK (cim=UPPER(cim)), szerzo CHAR(25) CHECK (szerzo=UPPER(szerzo), egysegar NUMBER(4) NOT NULL, darab NUMBER(4) NOT NULL); CREATE TABLE eladas (ISBN CHAR(6) NOT NULL, egysegar NUMBER(4) NOT NULL, besz dat DATE DEFAULT SYSDATE NOT NULL); 7. INSERT INTO szallito VALUES
(‘001’,’FOSPED’,’BUDAPEST’); 8. INSERT INTO rendeles VALUES (‘0001’, ‘100001’,SYSDATE,’001’,NULL,1300,10); 9. UPDATE rendeles SET telj dat=SYSDATE WHERE rend szam=’0001’; 10. 49 7 Adatvezérlő nyelv .1 Tranzakció-kezelés Tranzakció: Tetszőleges adatmanipulációs utasítások egy sorozata. • lefutott a tranzakció ellentmondásmentes adatbázis • nem futott le a tranzakció ellentmondásos adatbázis COMMIT A tranzakció utáni állapotot rögzíti. ROLLBACK A tranzakció előtti állapotot állítja vissza. Ezek a parancsok automatikusan és expliciten is meghívásra kerülnek. .2 Privilégiumok és hozzáférési jogok .1 Jogok Az Oracle rendszerbe történő bejelentkezéshez szükséges • felhasználói név • jelszó • jogok A jogok lehetnek • a rendszer használatával kapcsolatos jogok (privilégiumok) • a táblák használatával kapcsolatos jogok (hozzáférési jogok) .2 Privilégiumok •
Connect • Resource • Dba CONNECT • bejelentkezhet az Oracle RDBMS-be és használhatja • betekinthet táblákba, amelyekre SELECT jogot kapott • betekinthet a Public minősítésű táblákba • az adatmanipulációs utasításokat használhatja azokra a táblákra, amelyekre a tábla tulajdonosa megfelelő jogokat adott (INSERT, DELETE, UPDATE) • nézettáblákat (view) definiálhat RESOURCE • minden CONNECT jog • táblák, indexek létrehozása és törlése • az általa létrehozott táblákra vonatkozóan jogokat adhat tovább más felhasználóknak • az általa létrehozott táblákra, indexekre igénybe veheti a rendszer AUDITING szolgáltatását DBA 50 • minden RESOURCE jog • bármely felhasználó adataiba betekinthet, és lekérdezést hajthat végre • jogokat adhat és vonhat vissza bárkitől • PUBLIC-nak minősíthet adatokat • rendszer AUDITING • teljes adatbázis export/import .3 Táblákra
vonatkozó hozzáférési jogok SELECT INDEX INSERT ALTER DELETE UPDATE REFERENCES A tábla tulajdonosa vagy DBA jogú felhasználó adhatja illetve vonhatja vissza ezeket a hozzáférési jogokat. .4 Privilégiumok és hozzáférési jogok adása és visszavonása Privilégiumok és hozzáférési jogok adása illetve visszavonása a GRANT illetve a REVOKE utasítással történik. .1 Privilégiumok adása és visszavonása (csak DBA) GRANT privilégium TO felhasználó IDENTIFIED BY jelszó; REVOKE privilégium FROM felhasználó; .2 Hozzáférési jogok adása és visszavonása GRANT ALL | hozzáférési jog [,hozzáférési jog ] ON táblanév TO PUBLIC | felhaszáló [,felhaszáló] [WITH GRANT OPTION]; GRANT oszlop jog (oszlop)[, oszlop jog (oszlop) ] ON táblanév TO PUBLIC | felhaszáló [,felhaszáló] [WITH GRANT OPTION]; REVOKE ALL | hozzáférési jog [,hozzáférési jog ] ON táblanév FROM PUBLIC | felhaszáló; A felhasználó helyett állhat a PUBLIC is, ekkor
mindenki számára biztosítjuk a jogokat. Az összes hozzáférési jog helyett állhat ALL. oszlop jog: UPDATE, REFERENCES [WITH GRANT OPTION] ha megadjuk, a felhasználó továbbadhatja a jogokat. 51 7. További információk Quittner Pál: Adatbázis-kezelés a gyakorlatban, Akadémiai kiadó, Budapest, 1993 Dr. Halassy Béla: Az adatbázisok kezelésének alapvető kérdései, 1978, Budapest, KSH Priskinné R. Zsuzsa és Erdélyiné: Építsünk könnyen és lassan adatmodellt, 1997, Veszprém Váthy Ágnes, Németh Krisztián: Adatmodellezési feladatok I., Veszprém 1996, Veszprémi Egyetem Stolnicki Gyula: SQL kézikönyv, ComputerBooks (http://www.computerbookshu/sqlhtm) Juhász I., Almási B, Márton Á, Balogh J,: ORACLE 60 referencia kézikönyv Balogh Judit, Rutkovszky Edéné: SQL Példatár, 1994 Teach Yourself SQL in 21 Days, Second Edition ftp://pc123a.mathkltehu/anonymous/Adatb/sql21/indexhtm Introduction to Structured Query Language
ftp://pc123a.mathkltehu/anonymous/Adatb/SQLTut/sqltuthtm SQLFAQ: Table of Contents http://epoch.CSBerkeleyEDU:8000/sequoia/dba/montage/FAQ/SQL TOChtml SQLReference Page http://www.contribandrewcmuedu/~shadow/sqlhtml SQLStandards Home Page http://www.jcccom/sql stndhtml SQLTutorial http://w3.onenet/~jhoffman/sqltuthtm miniSQL http://www.Hughescomau/ 52 8. Függelék Figure B A SELECT utasítás SELECT [ALL] | [DISTINCT] {*|[tábla.]*|[tábla.]kifejezés [aliasnév]} [,[tábla.]kifejezés [aliasnév]] FROM [felhasználó.]tábla [aliasnév] [,[felhasználó]tábla [aliasnév]] WHERE feltétel CONNECT BY feltétel START WITH feltétel GROUP BY kifejezés[,kifejezés]. HAVING feltétel UNION | INTERSECT | MINUS SELECT. ORDER BY kifejezés | ASC | DESC,. FOR UPDATE OF oszlop, oszlop. NOWAIT; Függelék D A CREATE TABLE utasítás CREATE TABLE [felhasználó.]tábla (oszlopelem|táblamegszorítás [,oszlopelem|táblamegszorítás] ); oszlopelem: név típus [DEFAULT
kifejezés] [oszlopmegszorítás] oszlopmegszorítás: [NULL | NOT NULL | [CONSTRAINT megszorítás] ] [UNIQUE | PRIMARY KEY [CONSTRAINT megszorítás] ] [REFERENCES [felhasználó.] tábla [(oszlop)] [CONSTRAINT megszorítás] ] [CHECK (feltétel) [CONSTRAINT megszorítás] ] táblamegszorítás: [UNIQUE | PRIMARY KEY (oszlop[,oszlop])[CONSTRAINT megszorítás] ] [FOREIGN KEY (oszlop [,oszlop])] [REFERENCES [felhasználó.]tábla [oszlop[,oszlop] [CONSTRAINT megszorítás] ] [CHECK (feltétel) [CONSTRAINT megszorítás] ] Függelék E A “Suli könyvtár” adatbázis A táblák létrehozása create table szerzo ( szerzo azon char(3) not null primary key, Vnev char(15) not null check (Vnev = UPPER(Vnev)), Unev char(10) not null check (Unev = UPPER(Unev)), telszam char (12) null ); create table olvaso ( o azon char(3) not null primary key, Vnev char(15) not null check (Vnev = UPPER(Vnev)), Unev char(10) not null check (Unev = UPPER(Unev)), lakcim char (20) not null, beir dat date not
null, okod number(2) null ); create table kiado ( kiad azon char(4) not null primary key, kiad nev char(15) not null check (kiad nev=upper(kiad nev)), varos char(15) null 53 ); create table konyv ( isbn char(6) not null primary key, cim char(20) not null check (cim=upper(cim)), kiad azon char(4) not null references kiado(kiad azon), kiad dat date null ); create table peldany ( lelt szam char(4) not null primary key, isbn char(6) not null references konyv(isbn), kolcs e number(1) not null check (kolcs e=0 or kolcs e=1), ar number(4) not null ); create table kolcson ( lelt szam char(4) not null references peldany(lelt szam), o azon char(3) not null references olvaso(o azon), primary key (lelt szam), kolcs dat date not null ); create table elojegy ( isbn char(6) not null references konyv(isbn), o azon char(3) not null references olvaso(o azon), primary key (isbn,o azon), eloj dat date default sysdate not null ); create table irta ( szerzo azon char(3) not null references
szerzo(szerzo azon), isbn char(6) not null references konyv(isbn), primary key (szerzo azon,isbn) ); create table dolgozo ( d azon char(3) not null primary key, Vnev char(15) not null check (Vnev = UPPER(Vnev)), Unev char(10) not null check (Unev = UPPER(Unev)), beosztas char(20), belepes date default sysdate not null, fizetes number(6), fonok char(3) ); grant ALL on irta to PUBLIC; grant ALL on szerzo to PUBLIC; grant ALL on elojegy to PUBLIC; grant ALL on kolcson to PUBLIC; grant ALL on peldany to PUBLIC; grant ALL on konyv to PUBLIC; grant ALL on kiado to PUBLIC; grant ALL on olvaso to PUBLIC; grant ALL on dolgozo to PUBLIC; 54 Kapcsolatok A táblák adatai OLVASO O AZON VNEV ------ --------------001 GIPSZ 002 KEMENY 003 MINTA 004 KEREK 005 POR KIADO KIAD AZON --------K001 K002 K003 K004 UNEV ---------JAKAB HELEN MOKUS ERNO OSZKAR KIAD NEV --------------TANKONYVKIADO AKADEMIAI KIADO GONDOLAT KIADO KOSSUTH KIADO LAKCIM -------------------DEBRECEN FAL U. 1 APAFA FA U. 12
SARAND FELFAL U. 9 SZOB TINTA U.13 EGER DOBO U.21 VAROS --------------LONDON NEW YORK LONDON LONDON KONYV ISBN CIM KIAD DAT -----100001 100002 100003 100004 100005 100006 --------01-JAN-93 12-FEB-97 21-JUN-94 24-NOV-91 01-JUL-90 01-JUL-92 KIAD AZON -------------------- ---TUSKEVAR K002 EGRI CSILLAGOK K001 KOSZIVU EMBER FIAI K001 EMPATIA K003 ANATOMIA K002 RECEPTEK K003 PELDANY LELT SZAM --------L001 L002 L003 L004 L005 L006 ISBN KOLCS E AR ------ --------- ---------- 100001 1 1100 100001 1 1100 100001 1 1150 100002 1 800 100002 1 800 100003 0 1200 55 BEIR DAT OKOD --------- ------------04-JAN-90 27-FEB-95 30-NOV-94 7 22-MAY-93 6 12-MAY-93 6 L007 L008 L009 L010 L011 L012 L013 100004 100005 100004 100004 100005 100006 100006 KOLCSON LELT SZAM --------L002 L003 L004 L005 L007 L008 O AZON -----002 003 002 001 002 001 ELOJEGY ISBN O AZON ------ -----100002 003 100005 002 1 1 0 1 0 1 1 300 650 300 340 680 600 600 KOLCS DAT --------05-JAN-97 28-JUL-97 21-JUN-97 11-AUG-97
15-AUG-97 21-FEB-97 ELOJ DAT --------22-AUG-97 21-JUN-97 SZERZO SZERZO AZON ----------S01 S02 S03 S04 S05 S06 S07 VNEV --------------FEKETE GARDONYI JOKAI BUDA TARSOLY KUDLIK PSOTA IRTA SZERZO AZON ----------S01 S02 S03 S04 S04 S05 S06 S07 ISBN -----100001 100002 100003 100004 100005 100005 100006 100006 DOLGOZO d azon Vnev ------- ------D01 NAGY D02 KISS D03 BARNA D04 SZILARD D05 KEREK D06 FUTO Unev -------KLARA TEREZ PETER ISTVAN EMIL ERZSEBET UNEV TELSZAM ---------- -----------ISTVAN GEZA MOR BELA EMIL JULIA IREN beosztas ------------IGAZGATO OSZTALYVEZETO OSZTALYVEZETO KONYVTAROS KONYVTAROS ELJARO belepes ---------30-NOV-92 13-JAN-94 23-SEP-93 17-MAR-91 10-OCT-92 01-FEB-96 56 fizetes ------110000 82000 79000 28000 31000 30000 fonok ----NULL D01 D01 D02 D03 D01 Függelék F Rövidítések ABR Adatbázisrendszer DDL Data Definition Language (adatdefiníciós nyelv) DML Data Manipulation Language (adatmanipulációs nyelv) DCL Data Control Language
(adatvezérlő nyelv) SQL Structured Query Language (struktúrált lekérdező nyelv) DB Data Base (adatbázis) DBA Data Base Administrator (adatbázis adminisztrátor) DBMS Data Base Management System (adatbázis-kezelő rendszer) RDBMS Relational Data Base Management System (relációs adatbázis-kezelő rendszer) 57