online kép - Fájl  tube fájl feltöltés file feltöltés - adja hozzá a fájlokat online fedezze fel a legújabb online dokumentumok Kapcsolat
   
 

Letöltheto dokumentumok, programok, törvények, tervezetek, javaslatok, egyéb hasznos információk, receptek - Fájl kiterjesztések - fajltube.com

 

Online dokumentumok - kep
   
kategória
 

Biológia állatok Fizikai Földrajz Kémia Matematika Növénytan Számítógépes
Filozófia
Gazdaság
Gyógyszer
Irodalom
Menedzsment
Receptek
Vegyes

 
 
 
 













































 
 

Az oracle sql

számítógépes

Fájl küldése e-mail Esszé Projekt


egyéb tételek

 
Be és Kivitel
OSZTOTT FOLYAMATIRÁNYÍTÓ RENDSZEREK
A HP Usb disk storage format tool v2.1.8 hasznalata
Memóriagazdalkodas
Az operaciós rendszerek installalasa
Elektronikus levelezés
A C program szerkezete, típusai, konstansok
Szelekciós utasítasok
Függelék
 
 

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

;

Az SQL parancsokat ;-vel kell lezárni.

HELP parancsnév

/* Megjegyzés */

2     Szerkesztő parancsok

SET PAUSE ON/OFF

Képernyőgörgetés laponkénti megállással.

LIST [szám]

SQL buffer listázása.

A[PPEND]

Aktuláis sor végére karakterek fűzése.

C[HANGE] ksor1/ksor2

I[NPUT]

Bufferben lévő SQL parancshoz új sor hozzáfűzése.

DEL

Az aktuális sort törli a bufferből.

SAVE fnev [CRE|REP|APP]

A buffer tartalmát fájlba írja.

GET

Kimentett SQL fájlt bufferbe visszatölt.

EDIT [fnev]

Az op.r. editorát hívja meg fnev szerkesztésre.

DEF[INE] változó=érték

Változót definiálhatunk

DEF[INE] változó

Megjeleníti a változó értékét

UNDEF[INE] változó

Megszünteti a változót

DEFINE _EDITOR=’editor név’

Megadhatjuk, mely editor használja a rendszer az EDIT paranccsal

@|STA[RT] fnev p1[ p2]…

SQL kiterjesztésű fnev parancsfájlt futtat, p1,p2,…,pn paraméterek, amelyekre a parancsfájlban &1,&2,…,&n -nel lehet hivatkozni.

RUN vagy /

a buffer tartalmát futtaja

SPOOL [ON/OFF/OUT] | [fnev]

Fájlba menti a képernyő tartalmát

HOST

Kilépés az op.r.-be.

DESC[RIBE] [felhasználói név]tábla[@adatbázis]

Tábla szerkezetét írja ki.

Ábra 2.1 Az aktuális buffer és a külső editor

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 logika 818c24i i 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 2.2)

·        A változóknak csak literálokat adhatunk értékül. (Lásd 2.2 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 mint halmazt kell felfogni.

szelekciós_utasítás MINUS szelekciós_utasítás

-“-

szelekciós_ut. INTERSECT szelekciós_ut.

-“-

Logikai

NOT

Nem

AND

És

OR

Vagy

ALL(kifejezés[,kifejezés]… | szelekciós utasítás)

Minden. Előtte szerepelnie kell relációs operátornak.

ANY(kifejezés[,kifejezés]… | szelekciós utasítás)

Valamelyik. Előtte szerepelnie kell relációs operátornak.

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

jelentés

=

!=, <>, ^=

>

<

>=

<=

Dátumra

dátumkifejezés - dátumkifejezés è napok száma a két dátum között

Sztringekre

karakterkifejezés || karakterkifejezés è Konkatenáció


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.3.4 részben olvashatunk.

Példa

 

 

ORACLE

MSSQL

 

SELECT o_azon, Vnev, Unev, lakcim

FROM olvaso

WHERE lakcim like ‘EGER%’ AND okod=6;

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 FIAI

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]]…];

.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] )

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

   FROM kolcson;

SELECT lelt_szam, o_azon, now-kolcs_dat as ota_kint_van

   FROM kolcson;

lelt_szam

o_azon

ota_kint_van

L002

002

259.991331018522

L003

003

55.991331018522

L004

002

92.991331018522

L005

001

41.991331018522

L007

002

37.991331018522

L008

001

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=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

Unev

lakcim

kolcs_dat

KEMENY

HELEN

APAFA FA U. 12.

1/5/97

MINTA

MOKUS

SARAND FELFAL U. 9.

7/28/97

KEMENY

HELEN

APAFA FA U. 12.

6/21/97

GIPSZ

JAKAB

DEBRECEN FAL U. 1.

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;

kiad_azon

kiad_nev

varos

isbn

cim

K001

TANKONYVKIADO

LONDON

100002

EGRI CSILLAGOK

K001

TANKONYVKIADO

LONDON

100003

KOSZIVU EMBER FIAI

K002

AKADEMIAI KIADO

NEW YORK

100001

TUSKEVAR

K002

AKADEMIAI KIADO

NEW YORK

100005

ANATOMIA

K003

GONDOLAT KIADO

LONDON

100004

EMPATIA

K003

GONDOLAT KIADO

LONDON

100006

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

kiad_nev

varos

isbn

cim

K001

TANKONYVKIADO

LONDON

100002

EGRI CSILLAGOK

K001

TANKONYVKIADO

LONDON

100003

KOSZIVU EMBER FIAI

K002

AKADEMIAI KIADO

NEW YORK

100001

TUSKEVAR

K002

AKADEMIAI KIADO

NEW YORK

100005

ANATOMIA

K003

GONDOLAT KIADO

LONDON

100004

EMPATIA

K003

GONDOLAT KIADO

LONDON

100006

RECEPTEK

K004

KOSSUTH KIADO

LONDON

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;

.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

MSACCESS

SELECT vnev,unev,lakcim

FROM olvaso

WHERE beir_dat>(select beir_dat From olvaso

where vnev=’GIPSZ’ AND unev=’JAKAB’);

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

MSACCESS

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’);

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

MSACCESS

SELECT lelt_szam,k.isbn,cim,ar,kiad_azon FROM konyv k,peldany p WHERE p.isbn=k.isbn and ar>(SELECT avg(ar) FROM peldany, konyv WHERE k.kiad_azon=kiad_azon);

SELECT lelt_szam,k.isbn,cim,ar,kiad_azon 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);

lelt_szam isbn   cim                  ar       kiad_azon

--------- ------ -------------------- -------- ---------

L001      100001 TUSKEVAR             1100     K002     

L002      100001 TUSKEVAR             1100     K002     

L003      100001 TUSKEVAR             1150     K002     

L004      100002 EGRI CSILLAGOK       800      K001     

L005      100002 EGRI CSILLAGOK       800      K001     

L006      100003 KOSZIVU EMBER FIAI   1200     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]]...

           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;

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.

megoldások

1.       SELECT COUNT(kiad_azon) FROM kiado WHERE varos=’LONDON’;

2.       SELECT * FROM olvaso WHERE lakcim LIKE ‘DEBRECEN %’ AND beir_dat<’01-MAR-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’);

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
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);


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 table elojegy;

drop table kolcson;

drop table peldany;

drop table konyv;

drop table kiado;

drop table 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.

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.

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).

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.     


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

·        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.


Találat: 947