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



egyéb tételek

 
VoIP technológia
Kezdetek ++
AZ IRÁNYÍTÓRENDSZEREK FEJLŐDÉSE
Logikai tervezés Előadasvazlat
A szöveg alapvető egységei
Kapcsolat az ügyfél szolgalattal
Mûveletek, kifejezések kiértékelése, precedencia szabaly. Az értékadó utasítas. Standard beviteli és kiviteli eljarasok.
Keretek(frames)
Sketcher – Skicc CATIA V5 – Start
Különlegességek
 
 

Megoldások


1.1   &nb 525j91f sp; CLIPPER


1.1.1   &nb 525j91f sp; A DBU segédprogram használata


1.   &nb 525j91f sp;   &nb 525j91f 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 525j91f sp;   &nb 525j91f 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 525j91f sp;   &nb 525j91f 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 525j91f sp;   &nb 525j91f 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 525j91f sp;   &nb 525j91f 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 525j91f sp;   &nb 525j91f 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 525j91f sp;   &nb 525j91f 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 525j91f sp; SQL

1.2.1   &nb 525j91f sp; I. feladatsor


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


13.   &nb 525j91f sp;  UPDATE etel SET ar=ar+20


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


15.   &nb 525j91f sp;  SELECT * FROM etel


16.   &nb 525j91f sp;  SELECT * FROM etel WHERE etelf='LEVES'


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


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


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


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


21.   &nb 525j91f sp;  SELECT DISTINCT etelf FROM etel


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


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


24.   &nb 525j91f sp;  a)  SELECT * FROM szakacs ORDER BY szev

b) SELECT * FROM szakacs ORDER BY szev DESC


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


26.   &nb 525j91f sp;  SELECT DISTINCT fokozat FROM szakacs


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


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


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


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


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


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


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


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


35.   &nb 525j91f sp;  SELECT MAX(ar) FROM etel


36.   &nb 525j91f sp;  SELECT MIN(szev) FROM szakacs


37.   &nb 525j91f sp;  SELECT MAX(kaloria) FROM etel




38.   &nb 525j91f sp;  SELECT MIN(ar) FROM etel


39.   &nb 525j91f sp;  SELECT MAX(ar)-MIN(ar) FROM etel


40.   &nb 525j91f sp;  SELECT MAX(szev)-MIN(szev) FROM szakacs


41.   &nb 525j91f sp;  SELECT COUNT(*) FROM etel


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


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


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


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

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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


85.   &nb 525j91f sp;  DROP VIEW etlap


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


87.   &nb 525j91f sp;   &nb 525j91f sp;   &nb 525j91f sp;  DELETE FROM etel WHERE kaloria >300


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


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

1.2.2   &nb 525j91f sp; II.  feladatsor



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


96.   &nb 525j91f sp;   SELECT anev FROM allat


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


99.   &nb 525j91f 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: 903