ADATBÁZIS-KEZELÉS Segédanyag a gyakorlathoz Összeállította: Várady Lajos
[email protected]
1
TARTALOM 1. RELÁCIÓKON VÉGEZHETÕ MÛVELETEK......................................................................... 3 1.1 PROJEKCIÓ (EGY TÁBLA VERTIKÁLIS MEGSZORÍTÁSA) .................................................................. 3 1.2 SZELEKCIÓ (EGY TÁBLA HORIZONTÁLIS MEGSZORÍTÁSA).............................................................. 3 1.3 UNIÓ ......................................................................................................................................... 3 1.4 METSZET ................................................................................................................................... 3 1.5 KÜLÖNBSÉG .............................................................................................................................. 4 1.6 DESCARTES SZORZÁS ................................................................................................................. 4 1.7 ÖSSZEKAPCSOLÁS ...................................................................................................................... 4 2. AZ ORACLE SQL ....................................................................................................................... 5 2.1 SQL PARANCSOK ....................................................................................................................... 5 2.2 SZERKESZTÕ PARANCSOK ........................................................................................................... 5 2.3 SZÜKSÉGES ALAPFOGALMAK ....................................................................................................... 6 2.3.1 Literál................................................................................................................................ 6 2.3.2 Kifejezés ............................................................................................................................ 6 2.3.3 Változó .............................................................................................................................. 6 2.3.4 Operátorok ........................................................................................................................ 7 2.4 QUERY NYELV ......................................................................................................................... 8 2.4.1 Projekció megvalósítása .................................................................................................... 8 2.4.2 Szelekció megadása ........................................................................................................... 8 2.4.3 A kiválasztott sorok rendezése............................................................................................ 9 2.4.4 Csoportok képzése ............................................................................................................. 9 2.4.5 JOIN................................................................................................................................ 11 2.4.6 Egymásbaágyazott lekérdezések....................................................................................... 12 2.4.7 Táblákban kódolt hierarchiák .......................................................................................... 14 2.5 ADATDEFINÍCIÓS NYELV........................................................................................................... 18 2.5.1 Adattípusok...................................................................................................................... 18 2.5.2 Táblák létrehozása, törlése, módosítása ........................................................................... 18 2.6 ADATMANIPULÁCIÓS NYELV ..................................................................................................... 19 2.7 ADATVEZÉRLÕ NYELV .............................................................................................................. 22 2.7.1 Tranzakció-kezelés........................................................................................................... 22 2.7.2 Privilégiumok és hozzáférési jogok .................................................................................. 22 3. TOVÁBBI INFORMÁCIÓK ..................................................................................................... 24 4. FÜGGELÉK............................................................................................................................... 25 FÜGGELÉK A A CREATE TABLE UTASÍTÁS.......................................................................... 25 FÜGGELÉK B A “SULI KÖNYVTÁR” ADATBÁZIS................................................................. 25 FÜGGELÉK C RÖVIDÍTÉSEK.................................................................................................... 29
2
1. Relációkon végezhetõ mûveletek 1.1 Projekció (egy tábla vertikális megszorítása) Def: Legyen R ⊆ D1 ×...× Dn , akkor R projekciója Di ,..., Di -ra. Ekkor Π i1,...,ik ( R ) = {s| 1 k
∃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.
1.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.
1.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
a
b
R
D a b e
A a c f
E b d g
S a a b e
1.4 Metszet Példa
QI R = S S a
3
a c c f
b b d g
1.5 Különbség Q\R=S S a
c
b
1.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
1.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 D( R1 , R2 )={(d1,...,di-1,d,di+1,...,dm,d1`,...,dj-1`,dj+1`,...,dn`) | (d1,...,di1,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
B a c
C b b
D a a
R.A a a
E b b
4
kiad_azon K001 K001 K002 K002 K003 K003
kiad_nev TANKONYVKIADO TANKONYVKIADO AKADEMIAI KIADO AKADEMIAI KIADO GONDOLAT KIADO GONDOLAT KIADO
varos LONDON LONDON NEW YORK NEW YORK LONDON LONDON
isbn 100002 100003 100001 100005 100004 100006
cim EGRI CSILLAGOK KOSZIVU EMBER FIAI TUSKEVAR ANATOMIA EMPATIA RECEPTEK
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 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
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
2.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.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’
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
5
@|STA[RT] fnev p1[ p2]…
RUN vagy / SPOOL [ON/OFF/OUT] | [fnev] HOST DESC[RIBE] [felhasználói név]tábla[@adatbázis]
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.
Ábra 2.1 Az aktuális buffer és a külsõ editor EDIT
Külsõ editor
az editor SAVE parancsa
az editor SAVE parancsa EDIT fájl
GET fájl Kurrens buffer
SAVE fájl
Operációs rendszer fájl
START fájl
2.3 Szükséges alapfogalmak 2.3.1 Literál A CHAR, DATE, NUMBER standard ORACLE adattípusok értékeinek konstans alakja. Pl: ‘karaktersorozat’ -123.45 ‘01-JAN-97’
2.3.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.
2.3.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 2.2)
•
A változóknak csak literálokat adhatunk értékül. (Lásd 2.2 rész.)
Pl:’&varos’
6
2.3.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 ALL(kifejezés[,kifejezés]… | szelekciós utasítás)
Nem És Vagy Minden. Elõtte szerepelnie kell relációs operátornak. Valamelyik. Elõtte szerepelnie kell relációs operátornak.
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
mint
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
2.4 QUERY nyelv 2.4.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.4.2 Szelekció megadása SELECT [DISTINCT] kifejezés [aliasnév][, kifejezés [aliasnév]]… FROM táblanév WHERE keresési_feltétel;
2.4.2.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.3.4 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
2.4.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;
2.4.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
2.4.4.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.4.4.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)
2.4.4.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:*,/,+,-
2.4.4.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
10
Példa ORACLE
MSACCESS
SELECT lelt_szam, o_azon, SYSDATE-kolcs_dat ota_kint_van FROM kolcson;
SELECT lelt_szam, o_azon, nowkolcs_dat as ota_kint_van FROM kolcson;
lelt_szam L002 L003 L004 L005 L007 L008
o_azon 002 003 002 001 002 001
ota_kint_van 259.991331018522 55.991331018522 92.991331018522 41.991331018522 37.991331018522 212.991331018522
2.4.4.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;
2.4.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=k.o_azon AND SYSDATE-kolcs_dat>30;
SELECT Vnev, Unev, lakcim, kolcs_dat FROM olvaso INNER JOIN kolcson ON olvaso.o_azon=kolcson.o_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=k.kiad_azon;
SELECT kiado.kiad_azon, kiad_nev, varos, isbn, cim FROM kiado INNER JOIN konyv ON kiado.kiad_azon=konyv.kiad_azon ;
11
kiad_azon K001 K001 K002 K002 K003 K003
kiad_nev TANKONYVKIADO TANKONYVKIADO AKADEMIAI KIADO AKADEMIAI KIADO GONDOLAT KIADO GONDOLAT KIADO
varos LONDON LONDON NEW YORK NEW YORK LONDON LONDON
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=k.kiad_azon (+);
SELECT kiado.kiad_azon, kiad_nev, varos, isbn, cim FROM kiado LEFT JOIN konyv ON kiado.kiad_azon=konyv.kiad_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,x.unev,x.lakcim, y.vnev,y.unev FROM olvaso x,olvaso y WHERE x.beir_dat>y.beir_dat AND UPPER(y.vnev)=’GIPSZ’ AND UPPER(y.unev)=’JAKAB’;
SELECT x.vnev,x.unev,x.lakcim, y.vnev,y.unev FROM olvaso as x,olvaso as y WHERE x.beir_dat>y.beir_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=k.o_azon (+) group by o.o_azon,vnev,unev;
SELECT vnev, unev, count(kolcson.lelt_szam) FROM olvaso left join kolcson on olvaso.o_azon=kolcson.o_azon group by olvaso.o_azon,vnev,unev;
2.4.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 12
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 WHERE beir_dat>(select beir_dat From olvaso where vnev=’GIPSZ’ AND unev=’JAKAB’);
MSACCESS SELECT vnev,unev,lakcim FROM olvaso 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=p.isbn AND lelt_szam IN (SELECT lelt_szam FROM kolcson k, olvaso o WHERE k.o_azon=o.o_azon AND UPPER(vnev)=’GIPSZ’ AND UPPER(unev)=’JAKAB’);
MSACCESS SELECT konyv.isbn,cim FROM konyv inner join peldany ON konyv.isbn=peldany.isbn where lelt_szam IN (SELECT lelt_szam FROM kolcson inner join olvaso ON kolcson.o_azon=olvaso.o_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=k.isbn 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=k.isbn 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
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);
13
kiad_azon --------K002 K002 K002 K001 K001 K001
Listázzuk ki azokat a mûveket, amelyeket Londonban adtak ki, és van kölcsönözhetõ példány belõlük.
2.4.7 Táblákban kódolt hierarchiák SELECT [ALL] | [DISTINCT] {*| kifejezés [aliasnév]} [,kifejezés [aliasnév]]... FROM táblanév 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<’01MAR-1990’ 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=a.kiad_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=k.o_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=s.szerzo_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=k.kiad_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(s.szerzo_azon) FROM szerzo s, irta i WHERE s.szerzo_azon=i.szerzo_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=k.o_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=e.o_azon (+) GROUP BY o.o_azon; 13. SELECT * FROM olvaso WHERE okod IS NULL OR okod=0; 14. SELECT SUM(1.1*fizetes-fizetes) FROM dolgozo; 15. SELECT * FROM olvaso WHERE o_azon in (SELECT o_azon FROM elojegy e,konyv k WHERE k.ISBN=e.ISBN 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 k.lelt_szam FROM kolcson k, peldany p WHERE k.lelt_szam=p.lelt_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
16
WHERE o.o_azon=k.o_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 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=p.ISBN 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 o.o_azon=e.o_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=e.o_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 p.lelt_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 p.lelt_szam FROM peldany p, kolcson k WHERE p.lelt_szam =k.lelt_szam (+) AND kolcs_e=1 AND o_azon is NULL AND ISBN = (SELECT ISBN FROM konyv WHERE cim=&CIMVAL);
17
2.5 Adatdefiníciós nyelv 2.5.1 Adattípusok CHAR
NUMBER[(n[)]][,d)}
DATE
LONG
RAW
VARCHAR
LONG VARCHAR
DECIMAL
INTEGER
SMALLINT
FLOAT
LONG RAW
2.5.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; 18
ORDER BY rész nem lehet benne, több táblára is mûködik. 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];
2.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
2.7 Adatvezérlõ nyelv 2.7.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.7.2 Privilégiumok és hozzáférési jogok 2.7.2.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.7.2.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
22
•
az általa létrehozott táblákra, indexekre igénybe veheti a rendszer AUDITING szolgáltatását
•
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
DBA
2.7.2.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.
2.7.2.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.
2.7.2.4.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.7.2.4.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.computerbooks.hu/sql.htm) Juhász I., Almási B., Márton Á., Balogh J.,: ORACLE 6.0 referencia kézikönyv Balogh Judit, Rutkovszky Edéné: SQL Példatár, 1994 Teach Yourself SQL in 21 Days, Second Edition
ftp://pc123a.math.klte.hu/anonymous/Adatb/sql21/index.htm
Introduction to Structured Query Language
ftp://pc123a.math.klte.hu/anonymous/Adatb/SQLTut/sqltut.htm
SQLFAQ: Table of Contents
http://epoch.CS.Berkeley.EDU:8000/sequoia/dba/montage/FAQ/SQL_TOC.html
SQLReference Page
http://www.contrib.andrew.cmu.edu/~shadow/sql.html
SQLStandards Home Page
http://www.jcc.com/sql_stnd.html
SQLTutorial
http://w3.one.net/~jhoffman/sqltut.htm
miniSQL
http://www.Hughes.com.au/
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 L007
ISBN KOLCS_E AR ------ --------- ---------- 100001 1 1100 100001 1 1100 100001 1 1150 100002 1 800 100002 1 800 100003 0 1200 100004 1 300 27
BEIR_DAT OKOD --------- ------------04-JAN-90 27-FEB-95 30-NOV-94 7 22-MAY-93 6 12-MAY-93 6
L008 L009 L010 L011 L012 L013
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 0 1 0 1 1
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)
29