online kép - Fájl  tubefájl feltöltés file feltöltés - adja hozzá a fájlokat onlinefedezze fel a legújabb online dokumentumokKapcsolat
  
 

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
  

Az oracle sql

számítógépes

Fájl küldése e-mail



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ó:

lekérdező QUERY Language

adatdefiníciós DDL (Data Definition Language)

adatmanipulációs DML (Data Manipulation Language)

adatvezérlő DCL (Data Control Language



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 */


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 Az aktuális buffer és a külső editor

Szükséges alapfogalmak

Literál

A CHAR, DATE, NUMBER standard ORACLE adattípusok értékeinek konstans alakja.

Pl: ‘karaktersorozat’

-123.45

‘01-JAN-97’

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.

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’

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ó

QUERY nyelv

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


Szelekció megadása

SELECT [DISTINCT] kifejezés [aliasnév][, kifejezés [aliasnév]]…

FROM táblanév

WHERE keresési_feltétel;

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


POR

OSZKÁR

EGER DOBO U.21.


SELECT isbn,cim, kiad_dat FROM konyv WHERE kiad_dat BETWEEN AND


isbn

cim

kiad_dat


EGRI CSILLAGOK



KOSZIVU EMBER FIAI



SELECT * FROM olvaso WHERE okod IS NULL;


o_azon

vnev

unev

lakcim

beir_dat

okod


GIPSZ

JAKAB

DEBRECEN FAL U. 1.




KEMENY

HELEN

APAFA FA U. 12.




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


EGRI CSILLAGOK



KOSZIVU EMBER FIAI



SELECT isbn, lelt_szam,kolcs_e FROM peldany

ORDER BY isbn, lelt_szam;


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


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(*)









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)


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:*,/,+,-

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



L003



L004



L005



L007



L008




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;

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.


MINTA

MOKUS

SARAND FELFAL U. 9.


KEMENY

HELEN

APAFA FA U. 12.


GIPSZ

JAKAB

DEBRECEN FAL U. 1.



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


EGRI CSILLAGOK

K001

TANKONYVKIADO

LONDON


KOSZIVU EMBER FIAI

K002

AKADEMIAI KIADO

NEW YORK


TUSKEVAR

K002

AKADEMIAI KIADO

NEW YORK


ANATOMIA

K003

GONDOLAT KIADO

LONDON


EMPATIA

K003

GONDOLAT KIADO

LONDON


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


EGRI CSILLAGOK

K001

TANKONYVKIADO

LONDON


KOSZIVU EMBER FIAI

K002

AKADEMIAI KIADO

NEW YORK


TUSKEVAR

K002

AKADEMIAI KIADO

NEW YORK


ANATOMIA

K003

GONDOLAT KIADO

LONDON


EMPATIA

K003

GONDOLAT KIADO

LONDON


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;


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


EGRI CSILLAGOK


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.

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

Határozzuk meg, hány londoni kiadó van az adatbázisunkban.

Határozzuk meg, kik azok a debreceniek, akik 1990 februárjában iratkoztak be.

Határozzuk meg, hány darab kölcsönözhető, és hány darab köteles példány van a könyvtárunkban.

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.

Melyik kiadótól van a legrégebbi könyvünk.

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.

Listázzuk ki a FEKETE ISTVAN által írt könyveket.

Irassuk ki azokat a könyveket, amelyekre egynél több előjegyzés van.

Irassuk ki azokat a könyveket, amelyek drágábbak, mint a TANKONYVKIADO által kiadott könyvek átlagára.

Irassuk ki, hogy az egyes szerzők hány könyvet írtak, névsor szerint rendezve.

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.

Irassuk ki, hogy az egyes olvasók hány könyvre jegyeztek elő.

Hány olvasónak nincs még figyelmeztetése (okod IS NULL).

Mennyi pénz szükséges a jelenlegi dolgozók havi bérének 10 %-os emeléséhez.

Irassuk ki, hogy az EGRI CSILLAGOKra jegyeztek-e elő, és ha igen, akkor ki(k).

Határozzuk meg a könyvtárosok átlagfizetését.

Irassuk ki BARNA PETER szintjén az átlagfizetést.

Irassuk ki az EGRI CSILLAGOK című könyv bent lévő példányait.

Kiviheti-e GIPSZ JAKAB az TUSKEVAR című könyvet? És az EGRI CSILLAGOKat.

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

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

SELECT * FROM olvaso WHERE lakcim LIKE ‘DEBRECEN %’ AND beir_dat<’01-MAR-1990’ AND beir_dat>=’01-FEB-1990’;

SELECT kolcs_e, COUNT(*) FROM peldany GROUP BY kolcs_e;

SELECT COUNT(ISBN) FROM konyv WHERE kiad_dat<’01-JAN-1994’ AND ISBN IN (SELECT ISBN FROM peldany WHERE kolcs_e=1);

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

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

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

SELECT * FROM konyv WHERE ISBN IN (SELECT ISBN FROM elojegy GROUP BY ISBN HAVING COUNT(ISBN)>1);

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

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

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;

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;

SELECT * FROM olvaso WHERE okod IS NULL OR okod=0;

SELECT SUM(1.1*fizetes-fizetes) FROM dolgozo;

SELECT * FROM olvaso WHERE o_azon in (SELECT o_azon FROM elojegy e,konyv k
WHERE k.ISBN=e.ISBN AND cim=’EGRI CSILLAGOK’);

SELECT AVG(fizetes) FROM dolgozo WHERE beosztas=’KONYVTAROS’;

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

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

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

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

Adatdefiníciós nyelv

Adattípusok

CHAR

NUMBER[(n[)]][,d)}

DATE

LONG

RAW

VARCHAR

LONG VARCHAR

DECIMAL

INTEGER

SMALLINT

FLOAT

LONG RAW

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

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.

Hozzuk létre a következő táblákat.

Vigyünk fel néhány szállítót a szallito táblába.

Rendeljünk könyveket.

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.

Az egyes könyvek eladásakor aktualizáljuk a készletet (darab mező), és bővítsük az eladás táblát.

Kérdezzük le, hogy milyen könyvekből kell új rendelést feladni (pl. darab<2).


Megoldások

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

INSERT INTO szallito VALUES (‘001’,’FOSPED’,’BUDAPEST’);

INSERT INTO rendeles VALUES (‘0001’, ‘100001’,SYSDATE,’001’,NULL,1300,10);

UPDATE rendeles SET telj_dat=SYSDATE
WHERE rend_szam=’0001’;


Adatvezérlő nyelv

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.

Privilégiumok és hozzáférési jogok

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)

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

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.

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.

Privilégiumok adása és visszavonása (csak DBA)

GRANT privilégium TO felhasználó IDENTIFIED BY jelszó;

REVOKE privilégium FROM felhasználó;

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: 1130