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





felso sarok

egyéb tételek

jobb felso sarok
 
VoIP technológia
A személyi szamítógépek felépítése (részegységek, jellemzöik). Processzorok jellemzöi, fajtai. Memória jellemzöi, típusai.
Halózat hardver eszközei
A levelezőprogramok alapszolgaltatasai: (OUTLOOK EXPRESS)
A DOS operaciós rendszer
Mi fan terem a prezentació?
Kommunikació és tarsadalom az Interneten, a XX. szazad végén
Általanos tajékoztató a digitalis tachografokról
Mutató típusok. A Turbo Pascal memória térképe. Lancolt listak.
Az ORACLE adatbaziskezelő rendszer
 
bal also sarok   jobb also sarok

Megoldások


1.1   &nb 131c21b sp; CLIPPER


1.1.1   &nb 131c21b sp; A DBU segédprogram használata


1.   &nb 131c21b sp;   &nb 131c21b 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 131c21b sp;   &nb 131c21b 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 131c21b sp;   &nb 131c21b 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 131c21b sp;   &nb 131c21b 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 131c21b sp;   &nb 131c21b 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 131c21b sp;   &nb 131c21b 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 131c21b sp;   &nb 131c21b 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 131c21b sp; SQL

1.2.1   &nb 131c21b sp; I. feladatsor


8.   &nb 131c21b sp;   &nb 131c21b 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 131c21b sp;   &nb 131c21b sp;   &nb 131c21b 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 131c21b 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 131c21b 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 131c21b sp;  UPDATE etel SET ar=120, kaloria=210 WHERE ekod=54321


13.   &nb 131c21b sp;  UPDATE etel SET ar=ar+20


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


15.   &nb 131c21b sp;  SELECT * FROM etel


16.   &nb 131c21b sp;  SELECT * FROM etel WHERE etelf='LEVES'


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


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


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


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


21.   &nb 131c21b sp;  SELECT DISTINCT etelf FROM etel


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


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


24.   &nb 131c21b sp;  a)  SELECT * FROM szakacs ORDER BY szev

b) SELECT * FROM szakacs ORDER BY szev DESC


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


26.   &nb 131c21b sp;  SELECT DISTINCT fokozat FROM szakacs


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


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


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


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


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


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


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


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


35.   &nb 131c21b sp;  SELECT MAX(ar) FROM etel


36.   &nb 131c21b sp;  SELECT MIN(szev) FROM szakacs


37.   &nb 131c21b sp;  SELECT MAX(kaloria) FROM etel




38.   &nb 131c21b sp;  SELECT MIN(ar) FROM etel


39.   &nb 131c21b sp;  SELECT MAX(ar)-MIN(ar) FROM etel


40.   &nb 131c21b sp;  SELECT MAX(szev)-MIN(szev) FROM szakacs


41.   &nb 131c21b sp;  SELECT COUNT(*) FROM etel


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


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


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


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

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


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


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


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


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


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


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


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


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


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


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


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


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


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


58.   &nb 131c21b 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 131c21b sp;  SELECT etelf, AVG(ar) FROM etel GROUP BY etelf


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


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


62.   &nb 131c21b 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 131c21b 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 131c21b 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 131c21b 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 131c21b 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 131c21b sp;  SELECT enev,etelf,ar,snev,fokozat FROM etel,szakacs
WHERE etel.skod=szakacs.skod
ORDER BY etelf,enev


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


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


70.   &nb 131c21b 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 131c21b 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 131c21b 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 131c21b 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 131c21b 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 131c21b sp;  SELECT ho,nap,SUM(ar) FROM etel,etrend
WHERE etel.ekod=etrend.ekod GROUP BY ho,nap


76.   &nb 131c21b 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 131c21b 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 131c21b 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 131c21b 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 131c21b 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 131c21b sp;  CREATE VIEW olcso AS
SELECT enev,kaloria,ar FROM etel WHERE ar<100


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


83.   &nb 131c21b 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 131c21b sp;  SELECT enev,ar,snev FROM etlap WHERE etszam=3


85.   &nb 131c21b sp;  DROP VIEW etlap


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


87.   &nb 131c21b sp;   &nb 131c21b sp;   &nb 131c21b sp;  DELETE FROM etel WHERE kaloria >300


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


89.   &nb 131c21b 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 131c21b sp;  DROP TABLE etrend

1.2.2   &nb 131c21b sp; II.  feladatsor



91.   &nb 131c21b 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 131c21b 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 131c21b 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 131c21b 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 131c21b sp;   SELECT * FROM allat


96.   &nb 131c21b sp;   SELECT anev FROM allat


97.   &nb 131c21b 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 131c21b sp;   SELECT onev FROM orszag ORDER BY onev


99.   &nb 131c21b 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: 1252







Felhasználási feltételek