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
  

Megoldasok

számítógépes

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



egyéb tételek

 
A prezentaciókészítés alapjai
Funkcionalis függőségek, normalformak
Az írasjelek kódolasa
A B/K szoftver
VOIP RENDSZERTECHNIKÁK
Adatok tömörített tarolasa – előnyök, hatranyok
IP labor A ping parancs végrehajtasi üzeneteinek elfogasa
Szamrendszerek
A HP Usb disk storage format tool v2.1.8 hasznalata
Klasszikus IPC problémak (processzus kommunikació)
 
 

Megoldások


1.1   &nb 434h73e sp; CLIPPER


1.1.1   &nb 434h73e sp; A DBU segédprogram használata


1.   &nb 434h73e sp;   &nb 434h73e sp;  A DBU program elindítása után meg kell nyitni az adatállományt ( F2 és a Database kiválasztása, majd a megjelenő ablakból az adatállomány nevét kell kiválasztani, OK ).





Ezután az F3 billentyű leütésével, majd a Database kiválasztásával megkapjuk az adatállomány struktúráját.


Ezután az F5 billentyű leütésével és a Database kiválasztásával megjelenik a képernyőn az adatállomány tartalma, melyben a nyíl-billentyűk segítségével tudunk közlekedni.


2.   &nb 434h73e sp;   &nb 434h73e sp;  A DBU program elindítása után az F3 billentyűt kell leütni és kiválasztani a Database menüpontot. A megjelenő táblázatot ki kell tölteni a feladatban megadottaknak megfelelően. Az egyes értékek beütése után ENTER-t kell ütni. A következő sorba a lefelé nyíllal léphetünk. A táblázat kitöltése után az F4 billentyű leütésével kérjük a struktúra elmentését. Ekkor kell megadni az állomány nevét. A név beütése után az OK -ra kell ENTER-t ütni.


3.   &nb 434h73e sp;   &nb 434h73e sp;  A DBU program elindítása után nyissuk meg a kívánt adatállományt (ARU.DBF) az 1. feladatban leírtaknak megfelelően. Az F3 billentyű (Create) leütése után válasszuk az index menüpontot. A megjelenő ablakba be kell írni az indexállomány nevét (amelyet létre szeretnénk hozni, pl. ARIND), majd a kulcsmező nevét (akod). Az OK-ra üssünk ENTER-t. A bal felső sarokban megjelenő üzenet jelzi, hogy az indexállomány létre jött.


4.   &nb 434h73e sp;   &nb 434h73e sp;  Az 1. feladat b) pontjában ismertetett módon nyissuk meg az adatállományt, majd jelenítsük meg a tartalmát a képernyőn. Mivel az adatállományunk üres, így csak az üres táblázatot fogjuk látni. A táblázatban töltsünk ki 5 sort. Egy-egy mezőbe belépni, illetve kilépni belőle az ENTER billentyűvel lehet. ůj sorba a lefelé nyíllal léphetünk.


5.   &nb 434h73e sp;   &nb 434h73e sp;  Az 1. feladat b) pontjában ismertetett módon nyissuk meg az adatállományt, majd jelenítsük meg a tartalmát a képernyőn. A DELETE billentyű leütésével az 1. rekordot törlésre állítjuk. A táblázat fejlécében megjelenik a <DELETED> felirat. Ezután a lefelé nyíl segítségével pozícionáljunk a 4. rekordra, majd üssük le a DELETE billentyűt.


6.   &nb 434h73e sp;   &nb 434h73e sp;  Az 1. feladatban ismertetett módon nyissuk meg az adatállományt. Az F6 billentyű leütésére megjelenő menüből válasszuk ki a PACK menüpontot. A bal felső sarokban megjelenő kérdésre válaszoljunk az Y leütésével. A megjelenő üzenet jelzi a művelet végrehajtását.


7.   &nb 434h73e sp;   &nb 434h73e sp;  Az 1. feladat b) pontjában ismertetett módon nyissuk meg az adatállományt. Az F6 billentyű leütésére megjelenő menüből válasszuk ki a ZAP menüpontot. A bal felső sarokban megjelenő kérdésre válaszoljunk az Y leütésével. A megjelenő üzenet jelzi a művelet végrehajtását.


A DBU programból az ESC billentyűvel lehet kilépni!




1.2   &nb 434h73e sp; SQL

1.2.1   &nb 434h73e sp; I. feladatsor


8.   &nb 434h73e sp;   &nb 434h73e sp;   CREATE TABLE etel
(ekod NUMBER(5) PRIMARY KEY,
enev CHAR(40),
etelf CHAR(25),
kaloria NUMBER(7,2),
ar NUMBER(6,2),
keszido NUMBER(5),
skod NUMBER(3))


CREATE TABLE etrend
(ho NUMBER(2) NOT NULL,
nap NUMBER(2) NOT NULL,
etszam NUMBER(1) NOT NULL,
ekod NUMBER(5))


CREATE TABLE szakacs
(skod NUMBER(3) PRIMARY KEY,
snev CHAR(40),
szev NUMBER(4),
fokozat CHAR(10))



A GUPTA adatbáziskezelő rendszerben megvalósított SQL interpreternél a NUMBER adattípusnak nem adható meg a hossza, ezért célszerűbb a DECIMAL adattípust használata. Az elsődleges kulcs definíciója pedig az oszlopmegadások után következik:


CREATE TABLE etel
(ekod DECIMAL(5),
enev CHAR(40),
etelf CHAR(25),
kaloria DECIMAL(7,2),
ar DECIMAL(6,2),
keszido DECIMAL(5),
skod DECIMAL(3),
PRIMARY KEY (ekod))

CREATE TABLE etrend
(ho DECIMAL(2) NOT NULL,
nap DECIMAL(2) NOT NULL,
etszam DECIMAL(1) NOT NULL,
ekod DECIMAL(5))


CREATE TABLE szakacs
(skod DECIMAL(3),
snev CHAR(40),
szev DECIMAL(4),
fokozat CHAR(10)
PRIMARY KEY (skod))


9.   &nb 434h73e sp;   &nb 434h73e sp;   &nb 434h73e sp; CREATE INDEX etind ON etel(ekod)
CREATE INDEX szakind ON szakacs(skod)

A GUPTA adatbáziskezelő rendszer megköveteli, hogy az elsődleges kulcsra UNIQUE indexet hozzunk létre. Addig a tábla nem használható:


CREATE UNIQUE INDEX etind ON etel(ekod)

CREATE UNIQUE INDEX szakind ON szakacs(skod)


10.   &nb 434h73e sp;  INSERT INTO etel (ekod,enev,etelf,kaloria,ar,keszido,skod)
VALUES (34231,'DERELYE','TESZTA',350,80,140,123)


Mivel a sor minden mezője kitöltésre kerül és ismerjük a táblában az oszlopok sorrendjét, az oszlopok felsorolása kimaradhat az utasításból:


11.   &nb 434h73e sp;  INSERT INTO etel
VALUES (34231,'DERELYE','TESZTA',350,80,140,123)


A megadott adatokat az INSERT utasítás segítségével lehet felvinni a táblákba az előző feladatban ismertetett módon.


12.   &nb 434h73e sp;  UPDATE etel SET ar=120, kaloria=210 WHERE ekod=54321


13.   &nb 434h73e sp;  UPDATE etel SET ar=ar+20


14.   &nb 434h73e sp;  UPDATE etel SET keszido=keszido-20 WHERE kaloria>300


15.   &nb 434h73e sp;  SELECT * FROM etel


16.   &nb 434h73e sp;  SELECT * FROM etel WHERE etelf='LEVES'


17.   &nb 434h73e sp;  SELECT enev,ar FROM etel
WHERE etelf IN('LEVES','HUS','GYUMOLCS')


18.   &nb 434h73e sp;  SELECT enev,etelf,kaloria FROM etel WHERE kaloria>200


19.   &nb 434h73e sp;  SELECT enev,ar,kaloria FROM etel
WHERE ar<150 ORDER BY ar


20.   &nb 434h73e sp;  SELECT env,etelf,keszido FROM etel
WHERE keszido<=30 ORDER BY keszido DESC


21.   &nb 434h73e sp;  SELECT DISTINCT etelf FROM etel


22.   &nb 434h73e sp;  SELECT enev,kaloria,keszido FROM etel
WHERE kaloria BETWEEN 100 AND 300
ORDER BY kaloria DESC, enev


23.   &nb 434h73e sp;  SELECT enev,ar,keszido FROM etel
WHERE etelf='HUS' AND ar BETWEEN 200 AND 500
ORDER BY ar DESC, keszido DESC


24.   &nb 434h73e sp;  a)  SELECT * FROM szakacs ORDER BY szev

b) SELECT * FROM szakacs ORDER BY szev DESC


25.   &nb 434h73e sp;  SELECT * FROM szakacs ORDER BY fokozat, szev DESC


26.   &nb 434h73e sp;  SELECT DISTINCT fokozat FROM szakacs


27.   &nb 434h73e sp;  SELECT snev,szev FROM szakacs WHERE fokozat='MESTER' ORDER BY snev


28.   &nb 434h73e sp;  SELECT snev,fokozat FROM szakacs
WHERE szev<1960 ORDER BY fokozat,snev


29.   &nb 434h73e sp;  SELECT * FROM etrend WHERE ho=6 AND nap=21


30.   &nb 434h73e sp;  SELECT * FROM etrend WHERE etszam=3 ORDER BY ho,nap


31.   &nb 434h73e sp;  SELECT ekod FROM etrend
WHERE ho=2 AND nap=1 AND etszam=5


32.   &nb 434h73e sp;  SELECT * FROM etel WHERE enev LIKE 'B%'


33.   &nb 434h73e sp;  SELECT enev,ar FROM etel WHERE enev LIKE '_O%'


34.   &nb 434h73e sp;  SELECT snev,fokozat FROM szakacs WHERE snev LIKE 'K_R%'


35.   &nb 434h73e sp;  SELECT MAX(ar) FROM etel


36.   &nb 434h73e sp;  SELECT MIN(szev) FROM szakacs


37.   &nb 434h73e sp;  SELECT MAX(kaloria) FROM etel




38.   &nb 434h73e sp;  SELECT MIN(ar) FROM etel


39.   &nb 434h73e sp;  SELECT MAX(ar)-MIN(ar) FROM etel


40.   &nb 434h73e sp;  SELECT MAX(szev)-MIN(szev) FROM szakacs


41.   &nb 434h73e sp;  SELECT COUNT(*) FROM etel


42.   &nb 434h73e sp;  SELECT COUNT(*) FROM etel WHERE etelf='HUS'


43.   &nb 434h73e sp;  SELECT COUNT(*) FROM szakacs WHERE fokozat='KUKTA'


44.   &nb 434h73e sp;  SELECT COUNT(*) FROM etrend WHERE ho=3 AND nap=15


45.   &nb 434h73e sp;  a)  SELECT COUNT(*) FROM etrend WHERE ekod=20345

b) SELECT COUNT(*) FROM etrend WHERE ekod=20345 AND etszam=1


46.   &nb 434h73e sp;  SELECT AVG(kaloria) FROM etel
WHERE etelf='EDESSEG'


47.   &nb 434h73e sp;  SELECT SUM(ar) FROM etel WHERE etelf='GYUMOLCS'


48.   &nb 434h73e sp;  SELECT AVG(ar) FROM etel WHERE kaloria<200


49.   &nb 434h73e sp;  SELECT COUNT(*) FROM etel WHERE keszido>60


A táblázatban az elkészítési idő percben van megadva!


50.   &nb 434h73e sp;  SELECT SUM(keszido) FROM etel
WHERE etelf='LEVES' AND ar<80


51.   &nb 434h73e sp;  SELECT MIN(ar) FROM etel WHERE etelf='EDESSEG'


52.   &nb 434h73e sp;  SELECT MIN(szev) FROM szakacs WHERE fokozat='KUKTA'


53.   &nb 434h73e sp;  SELECT MAX(ar) FROM etel
WHERE kaloria BETWEEN 200 AND 300


54.   &nb 434h73e sp;  SELECT snev,szev FROM szakacs
WHERE szev=(SELECT MAX(szev) FROM szakacs)


55.   &nb 434h73e sp;  SELECT ar,enev, FROM etel
WHERE ar=(SELECT MIN(ar) FROM etel)


56.   &nb 434h73e sp;  SELECT enev,etelf FROM etel
WHERE ar<(SELECT AVG(ar) FROM etel)


57.   &nb 434h73e sp;  SELECT snev,szev,fokozat FROM szakacs
WHERE szev<(SELECT AVG(szev) FROM szakacs)
ORDER BY szev DESC


58.   &nb 434h73e sp;  SELECT fokozat, MIN(szev) FROM szakacs
GROUP BY fokozat


Az oszlopok megadásánál célszerű a fokozatot is felsorolni, mert egyébként csak a születési éveket kapnánk eredményül, és nem tudnánk, hogy melyik melyik fokozathoz tartozik. Az oszlopok megadásánál az oszlopfüggvénnyel együtt csak az az oszlopnév szerepelhet, amelyre a csoportosítást végezzük.


59.   &nb 434h73e sp;  SELECT etelf, AVG(ar) FROM etel GROUP BY etelf


60.   &nb 434h73e sp;  SELECT ho, MAX(nap) FROM etrend GROUP BY ho


61.   &nb 434h73e sp;  SELECT etelf, SUM(kaloria) FROM etel
WHERE keszido<60
GROUP BY etelf


62.   &nb 434h73e sp;  a)  SELECT ho, COUNT(*) FROM etrend WHERE ekod=12345 GROUP BY ho

b) SELECT ho, COUNT(*) FROM etrend
WHERE ekod=12345 AND etszam=5 GROUP BY ho


63.   &nb 434h73e sp;  SELECT ho, COUNT(*) FROM etrend GROUP BY ho
HAVING ho IN(3,4,5)


A feltételt WHERE opcióban is megadhatjuk:


SELECT ho, COUNT(*) FROM etrend WHERE ho IN(3,4,5)
GROUP BY ho


64.   &nb 434h73e sp;  SELECT etelf, AVG(kaloria) FROM etel GROUP BY etelf
HAVING etelf IN('TESZTA','EDESSEG')


A feltételt WHERE opcióban is megadhatjuk:


SELECT etelf, AVG(kaloria) FROM etel
WHERE etelf IN('TESZTA','EDESSEG') GROUP BY etelf


65.   &nb 434h73e sp;  SELECT enev,ar FROM etel WHERE etelf='LEVES' AND
ar=(SELECT MIN(ar) FROM etel WHERE etelf='LEVES')


A belső SELECT segítségével meghatározzuk a legolcsóbb leves árát. A külső SELECT utasításban leválogatjuk azokat az ételeket, amelyek ára megegyezik a belső SELECT által meghatározott értékkel. Azonban itt is meg kell adni azt a feltételt, hogy a leválogatást csak a levesek közül végezze, hiszen előfordulhat, hogy más ételféleségek között is van olyan étel, amelynek ára megegyezik azzal az árral, amelyet a belső SELECT meghatározott. Ekkor azokat az ételeket is leválogatnánk, pedig mi csak a levesekre vagyunk kíváncsiak.

Így tehát a feltételt kétszer kell megadnunk, mind a belső, mind a külső SELECT-ben szerepelnie kell.


66.   &nb 434h73e sp;  SELECT snev FROM szakacs WHERE fokozat='MESTER' AND
szev=(SELECT MIN(szev) FROM szakacs
WHERE fokozat='MESTER')


A fokozatra vonatkozó feltételt mind a belső, mind a külső SELECT-ben meg kellett adni, hasonlóan az előző feladat megoldásához.


67.   &nb 434h73e sp;  SELECT enev,etelf,ar,snev,fokozat FROM etel,szakacs
WHERE etel.skod=szakacs.skod
ORDER BY etelf,enev


68.   &nb 434h73e sp;  SELECT enev,ar,snev FROM etel,szakacs
WHERE etelf='HUS' AND etel.skod=szakacs.skod


69.   &nb 434h73e sp;  SELECT nap,etszam,enev FROM etrend,etel
WHERE ho=5 AND etel.ekod=etrend.ekod
ORDER BY nap,etszam


70.   &nb 434h73e sp;  SELECT etszam,enev,szakacs FROM etrend,etel,szakacs
WHERE ho=7 AND nap=23 AND etrend.ekod=etel.ekod
AND etel.skod=szakacs.skod


71.   &nb 434h73e sp;  SELECT enev,etelf FROM etel WHERE skod=
(SELECT skod FROM szakacs WHERE snev='FALANK EDE')


Ahhoz, hogy meghatározzuk a Falánk Ede által készített ételeket, meg kell tudnunk, hogy mi a kódja ennek a szakácsnak, hiszen a az ETEL táblában csak a szakácsok kódja szerepel, a nevük nem. A név alapján a kódot a SZAKACS táblából tudjuk kikeresni. Erre szolgál a belső SELECT. A külső SELECT segítségével válogatjuk le a keresett ételeket.


A feladatot a két tábla összekapcsolásával is meg lehet oldani:


SELECT enev,etelf FROM etel,szakacs
WHERE etel.skod=szakacs.skod AND snev='FALANK EDE'


72.   &nb 434h73e sp;  SELECT DISTINCT ho,nap FROM etrend
WHERE ekod=(SELECT ekod FROM etel WHERE skod=
(SELECT skod FROM szakacs WHERE snev='FALANK EDE'))

Ez az utasítás három egymásba ágyazott SELECT utasításból áll. A legbelső meghatározza a Falánk Ede nevű szakács kódját, a következő pedig azon ételek kódját, amelyeket ő készít el. A külső SELECT az étrendből kiválasztja azokat a napokat, amikor az előbb meghatározott ételek lesznek terítéken. Mivel egy nap több ételt is készíthet Falánk Ede, csak a különböző napokat íratjuk ki.


A leválogatást a három tábla összekapcsolásával is megfogalmazhatjuk:

SELECT DISTINCT ho,nap FROM etrend,etel,szakacs
WHERE snev='FALANK EDE' AND
etrend.ekod=etel.ekod AND etel.skod=szakacs.skod


73.   &nb 434h73e sp;  SELECT snev,fokozat FROM szakacs WHERE skod=
(SELECT skod FROM etel WHERE ekod=
(SELECT ekod FROM etrend WHERE ho=5 AND nap=25))


Ez az utasítás három egymásba ágyazott SELECT utasításból áll. A legbelső meghatározza a május 25-i ételek kódját, a következő az ezeket elkészítő szakácsok kódját, a külső SELECT pedig ezen szakácsok nevét és fokozatát.




A leválogatást a három tábla összekapcsolásával is megfogalmazhatjuk:


SELECT snev,fokozat FROM etrend,etel,szakacs
WHERE ho=5 AND nap=25 AND
etrend.ekod=etel.ekod AND etel.skod=szakacs.skod

74.   &nb 434h73e sp;  SELECT enev,ar FROM etel WHERE ar>
(SELECT ar FROM etel WHERE enev='RANTOTT SZELET')

vagy:

SELECT x.enev,x.ar FROM etel x ,etel y
WHERE x.ar>y.ar AND y.enev='RANTOTT SZELET'


Ebben a megfogalmazásban a lekérdezést két tábla összekapcsolásával oldottuk meg. Mind a két tábla az ETEL tábla. Elkészítettük az ETEL tábla önmagával vett direkt szorzatát, és azokat a sorokat választottuk ki belőle, ahol a második ételnév a rántott szelet és az első ár nagyobb, mint a második ár. A SELECT utasításban a két ETEL táblát meg kell különböztetni egymástól, ezért az egyiket x-nek, a másikat y-nak hívjuk. Az oszlopnevek megadásakor mindig jelezni kell, hogy melyik tábla oszlopáról van szó.


75.   &nb 434h73e sp;  SELECT ho,nap,SUM(ar) FROM etel,etrend
WHERE etel.ekod=etrend.ekod GROUP BY ho,nap


76.   &nb 434h73e sp;  a)  SELECT enev,ar,kaloria FROM etel
WHERE ar<(SELECT AVG(ar) FROM etel)
UNION
SELECT enev,ar,kaloria FROM etel
WHERE keszido<(SELECT AVG(keszido) FROM etel)

b) SELECT enev,ar,kaloria FROM etel
WHERE ar<(SELECT AVG(ar) FROM etel)
INTERSECT
SELECT enev,ar,kaloria FROM etel
WHERE keszido<(SELECT AVG(keszido) FROM etel)


A feladat első részében a két feltétel valamelyikének teljesülését követeltük meg, ezért a két leválogatás eredménytáblájának unióját képeztük. A második részben a két feltételnek együttesen kell teljesülnie, ezért a két eredménytábla metszetét kell képeznünk.


77.   &nb 434h73e sp;  SELECT enev FROM etel WHERE ekod IN
(SELECT ekod FROM etrend WHERE eszam=1
INTERSECT
SELECT ekod FROM etrend WHERE eszam=5)


A GUPTA adatbáziskezelő rendszerben megvalósított SQL interpreter nem tartalmazza az INTERSECT műveletet.


78.   &nb 434h73e sp;  SELECT snev FROM szakacs WHERE skod IN
(SELECT skod FROM etel WHERE etelf='EDESSEG'
MINUS
SELECT skod FROM etel WHERE etelf<>'EDESSEG')


A belső SELECT első része kiválasztja azoknak a szakácsoknak a kódját, akik készítenek édességet, a második rész pedig azokét választja ki, akik más ételeket főznek. Az édességet készítő szakácsok halamzából kivonjuk azoknak a szakácsoknak a halmazát, akik más ételféleséget készítenek. Az így kapott halmaz azoknak a szakácsoknak a kódját fogja tartalmazni, akik csak édességet készítenek. A külső SELECT-ben a szakacs táblából meghatározzuk a szakácsok nevét.


A GUPTA adatbáziskezelő rendszerben megvalósított SQL interpreter nem tartalmazza a MINUS műveletet.


79.   &nb 434h73e sp;  a) SELECT ho,nap FROM etrend WHERE etszam=5

b) SELECT ho,nap FROM etrend
MINUS
SELECT ho,nap FROM etrend WHERE etszam=5


Az étrend táblából kiválasztjuk a különböző dátumokat, majd kivonjuk belőle azokat a dátumokat, amelyeken van 5. étkezés. Ez a parancs nem helyettesíthető egy olyan leválogatással, amelynek feltétele az, hogy etszam<>5 . Ez ugyanis minden olyan hónapot és napot leválogatna, amelyen van 5-től különböző számú étkezés. Azonban ezeken a napokon lehet 5. étkezés is.

c) SELECT ho,nap FROM etrend WHERE etszam=3
MINUS
SELECT ho,nap FROM etrend WHERE etszam>3

Az étrend táblából kiválasztjuk azokat a napokat, amelyeken van 3. étkezés, majd kivonjuk belőle azokat a napokat, amelyeken van 3-nál nagyobb számú étkezés.


A GUPTA adatbáziskezelő rendszerben megvalósított SQL interpreter nem tartalmazza a MINUS műveletet.


80.   &nb 434h73e sp;  SELECT snev FROM szakacs WHERE skod NOT IN (SELECT skod FROM etel WHERE etelf='LEVES')


vagy:

SELECT snev FROM szakacs WHERE NOT EXISTS (SELECT * FROM etel WHERE etelf='LEVES' AND szakacs.skod=etel.skod)


81.   &nb 434h73e sp;  CREATE VIEW olcso AS
SELECT enev,kaloria,ar FROM etel WHERE ar<100


82.   &nb 434h73e sp;  CREATE VIEW husok AS
SELECT enev,ar,keszido,snev,fokozat FROM etel,szakacs WHERE etelf='HUS' AND etel.skod=szakacs.skod


83.   &nb 434h73e sp;  CREATE VIEW etlap AS
SELECT etszam,enev,ar,snev FROM etel,etrend,szakacs WHERE ho=7 AND nap=1 AND etel.ekod=etrend.ekod AND etel.skod=szakacs.skod


84.   &nb 434h73e sp;  SELECT enev,ar,snev FROM etlap WHERE etszam=3


85.   &nb 434h73e sp;  DROP VIEW etlap


86.   &nb 434h73e sp;  DELETE FROM etrend WHERE ho=2 AND nap=1


87.   &nb 434h73e sp;   &nb 434h73e sp;   &nb 434h73e sp;  DELETE FROM etel WHERE kaloria >300


88.   &nb 434h73e sp;  DELETE FROM szakacs WHERE szev<1960 AND fokozat='KUKTA'


89.   &nb 434h73e sp;  DELETE etrend

Az ETREND tábla minden sora törlődik, de maga a tábla megmarad, így bármikor vihetünk fel újabb sorokat a táblába.


90.   &nb 434h73e sp;  DROP TABLE etrend

1.2.2   &nb 434h73e sp; II.  feladatsor



91.   &nb 434h73e sp;   CREATE TABLE orszag
(okod NUMBER (5) PRIMARY KEY,
onev CHAR(25),
foldresz CHAR(10),
terulet NUMBER(7,2),

ed CHAR(1),
fszel NUMBER(3) NOT NULL,
fhossz NUMBER(3) NOT NULL)

CREATE TABLE allat
(akod NUMBER(5) PRIMARY KEY,
anev CHAR(30),
faj CHAR(30),
suly NUMBER(7,2),
hossz NUMBER(7,2),
szdatum DATE)

A GUPTA adatbáziskezelő rendszerben megvalósított SQL interpreternél a NUMBER adattípusnak nem adható meg a hossza, ezért célszerűbb a DECIMAL adattípust használata. Az elsődleges kulcs definíciója pedig az oszlopmegadások után következik:

CREATE TABLE orszag
(okod NUMBER (5),
onev CHAR(25),
foldresz CHAR(10),
terulet NUMBER(7,2),
ed CHAR(1),
fszel NUMBER(3) NOT NULL,
fhossz NUMBER(3) NOT NULL
PRIMARY KEY (okod))


CREATE TABLE allat
(akod NUMBER(5),
anev CHAR(30),
faj CHAR(30),
suly NUMBER(7,2),
hossz NUMBER(7,2),
szdatum DATE
PRIMARY KEY (akod))

92.   &nb 434h73e sp;   CREATE INDEX orind ON orszag(okod)
CREATE INDEX alind ON allat(akod)

A GUPTA adatbáziskezelő rendszer megköveteli, hogy az elsődleges kulcsra UNIQUE indexet hozzunk létre. Addig a tábla nem használható:

CREATE UNIQUE INDEX orind ON orszag(okod)
CREATE UNIQUE INDEX alind ON allat(akod)

93.   &nb 434h73e sp;   INSERT INTO orszag
(okod,onev,foldresz,terulet,nepesseg,legmag)
VALUES (12345,'MAGYARORSZAG','EUROPA',93,10000,1014)

Mivel a rekord minden mezője értéket kap, a mezőneveket nem kell felsorolni, az utasítás így is megadható:

INSERT INTO orszag
VALUES (12345,'MAGYARORSZAG','EUROPA',93,10000,1014)

94.   &nb 434h73e sp;   INSERT INTO allat (akod,anev,hossz)
VALUES (23232,'TATU',120)

Ebben az utasításban a rekordnak csak néhány mezője kap értéket, ezért itt fel kell sorolni azokat a mezőneveket, amelyekre az értékadás vonatkozik.


95.   &nb 434h73e sp;   SELECT * FROM allat


96.   &nb 434h73e sp;   SELECT anev FROM allat


97.   &nb 434h73e sp;   SELECT DISTINCT foldresz FROM orszag

Az ORSZAG állományban előforduló földrésznevek közül mindegyiket csak egyszer szeretnénk kiírni, ezért szükséges a DISTINCT opció.


98.   &nb 434h73e sp;   SELECT onev FROM orszag ORDER BY onev


99.   &nb 434h73e sp;   SELECT anev,hossz,suly FROM allat ORDER BY suly DESC


SELECT onev,foldresz FROM orszag ORDER BY foldresz,onev


SELECT anev,szdatum FROM allat ORDER BY szdatum DESC


SELECT onev,terulet FROM orszag ORDER BY terulet DESC, onev

Figyeljünk arra, hogy a rendezésnél a DESC opciót mindig azután a mezőnév után kell írni, amelyik szerint csökkenő sorrendben szeretnénk rendezni. Ha több mező szerint is csökkenő rendezettséget szeretnénk elérni, a DESC opciót minden egyes mezőnév után ki kell írni.


SELECT onev,terulet FROM orszag WHERE foldresz='EUROPA'


SELECT hossz,suly,szdatum FROM allat WHERE anev='CSIKOS'


SELECT * FROM orszag WHERE onev='FRANCIAORSZAG'


SELECT onev,terulet,foldresz FROM orszag WHERE terulet>30


SELECT onev FROM orszag WHERE nepesseg BETWEEN 20 AND 50




SELECT onev FROM orszag WHERE foldresz IN('EUROPA','AFRIKA','AZSIA')
AND terulet<8

vagy:

SELECT onev FROM orszag WHERE (foldresz='EUROPA' OR foldresz='AFRIKA'
OR foldresz='AZSIA') AND terulet<8


SELECT anev,suly,szdatum FROM allat WHERE suly>100 AND szdatum>'1992-DEC-31'


SELECT anev,suly,szdatum FROM allat
WHERE suly BETWEEN 5 AND 10 ORDER BY szdatum


SELECT * FROM allat WHERE suly>50 OR
szdatum<'1950-JAN-01' ORDER BY anev


SELECT * FROM allat WHERE anev LIKE 'V%' ORDER BY szdatum


SELECT anev,faj FROM allat WHERE anev LIKE '___A___'

Az A betű előtt és után 3 aláhúzás karakter van, amely a név első, illetve utolsó 3 ismeretlen betűjét helyettesíti.


SELECT * FROM orszag WHERE onev LIKE '__E%'

Az E betű előtt két aláhúzás karakter van.


SELECT anev,faj,szdatum FROM allat WHERE okod IS NULL


SELECT COUNT(*) FROM orszag


SELECT MAX(terulet) FROM orszag


SELECT onev,terultet FROM orszag WHERE terulet=(SELECT MAX(terulet) FROM orszag)

Azt a sort, amelyben a legnagyobb területérték szerepel, csak belső SELECT segítségével tudjuk kiválasztani. A belső SELECT eredménye a területértékek maximuma. A külső SELECT feltétele pedig az, hogy olyan sort (sorokat) keresünk, amelyben a területérték megegyezik a belső SELECT által adott maximális értékkel.


SELECT onev,nepesseg FROM orszag WHERE nepesseg=(SELECT MIN(nepesseg) FROM orszag)


a)  SELECT SUM(terulet) FROM orszag WHERE foldresz='EUROPA'

b) SELECT AVG(terulet) FROM orszag WHERE foldresz='EUROPA'


a)  SELECT foldresz, SUM(terulet) FROM orszag GROUP BY foldresz

b) SELECT foldresz, SUM(terulet) FROM orszag WHERE nepesseg>5000
GROUP BY foldresz

Azt, hogy az összegzésben csak azon országok vegyenek részt, amelyek lakossága 5 millió fölött van, a WHERE feltételben tudjuk megfogalmazni. Vigyázat, ezt nem írhatjuk HAVING opcióként, mert a feltétel nem arra a mezőre vonatkozik, amelyik szerint a csoportképzés történik.



a)  SELECT COUNT(*) FROM allat WHERE suly>200

b) SELECT COUNT(okod) FROM allat

c) SELECT COUNT(*)-COUNT(okod) FROM allat


SELECT MAX(suly), MIN(suly) FROM allat


a)  SELECT AVG(suly) FROM allat WHERE hossz>200

b) SELECT AVG(suly) FROM allat WHERE hossz<2


SELECT COUNT(*) FROM allat WHERE hossz>500


SELECT COUNT(*) FROM allat WHERE hossz<1


SELECT COUNT(*) FROM allat
WHERE okod=(SELECT okod FROM orszag WHERE onev='MAGYARORSZAG')

Ahhoz, hogy megállapítsuk, hogy hány állat származik Magyarországról, meg kell keresnünk Magyarország kódját az ORSZAG táblában. Ezért szükséges a belső SELECT.

A feladatot megoldhatjuk az ALLAT és az ORSZAG tábla összekapcsolásával is:

SELECT COUNT(*) FROM allat,orszag
WHERE onev='MAGYARORSZAG' AND allat.okod=orszag.okod


SELECT anev FROM allat WHERE okod=
(SELECT okod FROM orszag WHERE onev='MAGYARORSZAG')
ORDER BY anev

A feladatot megoldhatjuk a két tábla összekapcsolásával is. Ebből a táblából azon sorokat kell kiválasztani, amelyekben az országnév MAGYARORSZAG. Az oszlopok közül pedig csak az anev oszlopot kell megjeleníteni:

SELECT anev FROM allat,orszag WHERE allat.okod=orszag.okod AND onev='MAGYARORSZAG' ORDER BY anev


SELECT foldresz,onev,anev,faj FROM orszag,allat WHERE orszag.okod=allat.okod
ORDER BY foldresz,onev,anev

A feladatot a két tábla összekapcsolásával oldhatjuk meg. Az eredménytábla minden sorát meg kell jeleníteni, ezért a WHERE opcióban csak az összeekapcsolási feltétel szerepel. Az oszlopok közül csak a feladatban megadott oszlopokat kell kiírni, ezek felsorolása szerepel a SELECT kulcsszó után. A rendezési feltételeket az ORDER BY opcióban adtuk meg.

SELECT onev FROM orszag WHERE okod IN
(SELECT okod FROM allat WHERE faj='GORILLA')

A belső SELECT több országkódot is eredményezhet, ezért szükséges az egyenlőségjel helyett az IN operátor használata.

vagy:

SELECT onev FROM orszag,allat WHERE orszag.okod=allat.okod AND anev='GORILLA'


SELECT anev,hossz FROM allat WHERE okod IN
(SELECT okod FROM orszag WHERE foldresz='AMERIKA') AND hossz>200
ORDER BY hossz DESC

A belső SELECT több országkódot ad eredményül, ezért szükséges az egyenlőségjel helyett az IN operátor használata.

vagy:

SELECT anev,hossz FROM allat,orszag WHERE allat.okod=orszag.okod
AND hossz>200 AND foldresz='AMERIKA' ORDER BY hossz DESC


SELECT faj FROM allat WHERE okod=
(SELECT okod FROM orszag WHERE onev='MAGYARORSZAG')
INTERSECT
SELECT faj FROM allat WHERE okod=
(SELECT okod FROM orszag WHERE onev='OLASZORSZAG')

Egy SELECT utasítással kiválasztjuk azon állatfajtákat, amelyeknek származnak egyedei Magyarországról, a másik SELECT utasítással pedig azon állatfajtákat, amelyeknek származnak egyedei Olaszországból. A két eredménytábla metszete adja azon állatfajtákat, amelyek mindkét országból származnak egyedei.

A GUPTA adatbáziskezelő rendszerben megvalósított SQL interpreter nem tartalmazza az INTERSECT műveletet.


SELECT anev FROM allat WHERE okod IN
(SELECT okod FROM orszag WHERE foldresz='EUROPA')
UNION
SELECT anev FROM allat WHERE okod IN
(SELECT okod FROM orszag WHERE foldresz='AZSIA')

Az első SELECT utasítással kiválasztjuk az európai állatokat (olyan országokból származó állatok, amelyek Európábnan vannak), a második SELECT utasítással az ázsiai állatokat választjuk ki. Mindkét SELECT tartalmaz egy belső SELECT-et. A két eredménytábla azonos felépítésű, egyesítésük adja az Európából és Ázsiából származó állatok nevét.

Egyesítés nélkül, egyetlen SELECT utasítással - és belső SELECT-ekkel - is megkaphatjuk a kívánt eredményt:

SELECT anev FROM allat WHERE okod IN
(SELECT okod FROM orszag WHERE
foldresz IN('EUROPA','AZSIA'))

vagy:

SELECT anev FROM allat,orszag WHERE allat.okod=orszag.okod
AND foldresz IN('EUROPA','AZSIA')


SELECT anev FROM allat WHERE suly=(SELECT MAX(suly) FROM allat)
UNION
SELECT anev FROM allat WHERE suly=(SELECT MIN(suly) FROM allat)


SELECT faj FROM allat WHERE okod=
(SELECT okod FROM orszag WHERE onev='MAGYARORSZAG')
MINUS
SELECT faj FROM allat WHERE okod=
(SELECT okod FROM orszag WHERE onev='NEMETORSZAG')

Az első SELECT utasítással azon állatfajtákat határozzuk meg, amelyek Magyarországról származnak. A második SELECT utasítással pedig a Németországból származó fajtákat választjuk ki. Az első erdménytáblából ki kell vonni a második eredménytáblát. Így az első eredménytáblának csak azon sorai maradnak meg, amelyek a második eredménytáblában nem szerepelnek, vagyis azon állatfajták, amelyeknek vannak Magyarországról származó egyedei, de nincsenek Németországból származó egyedei.

A GUPTA adatbáziskezelő rendszerben megvalósított SQL interpreter nem tartalmazza a MINUS műveletet.


CREATE VIEW EUROALLAT AS
SELECT anev,faj,szev,onev FROM allat,orszag
WHERE foldresz='EUROPA' AND allat.okod=orszag.okod


SELECT * FROM euroallat ORDER BY onev,faj,anev


SELECT anev,szev FROM euroallat WHERE szev=1996 ORDER BY szev


DROP VIEW euroallat


UPDATE orszag SET terulet=9976, foldresz='AMERIKA' WHERE onev='KANADA'


UPDATE orszag SET nepesseg=nepesseg+2 WHERE foldresz='AFRIKA'


UPDATE allat SET suly=suly-0.1 WHERE faj='UHU'


DELETE FROM orszag WHERE terulet<10


DELETE FROM allat WHERE szdatum<'1920-JAN-01'


DELETE FROM orszag


Mivel az utasításban feltételt nem adtunk meg, a tábla minden sora törlődik. Ez azonban nem jelenti a tábla megszünését. A tábla továbbra is létezik, csak nincs egyetlen sora sem. Bármikor vihetünk fel a táblába adatokat, a mezők leírását továbbra is nyilvántartja a rendszer.


DROP TABLE orszag




Találat: 797