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

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

 

Online dokumentumok - kep
   
kategória
 

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

 
 
 
 













































 
 

Megoldasok

számítógépes

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


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

100.   SELECT   onev,foldresz   FROM   orszag   ORDER   BY   foldresz,onev

101.   SELECT   anev,szdatum   FROM   allat   ORDER   BY   szdatum   DESC

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

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

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

105.   SELECT   *   FROM   orszag   WHERE   onev='FRANCIAORSZAG'

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

107.   SELECT   onev   FROM   orszag   WHERE   nepesseg   BETWEEN   20   AND   50



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

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

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

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

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

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

114.   SELECT   *   FROM   orszag   WHERE   onev   LIKE   '__E%'

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

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

116.   SELECT   COUNT(*)   FROM   orszag

117.   SELECT   MAX(terulet)   FROM   orszag

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

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

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

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

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

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

b)  SELECT   COUNT(okod)   FROM   allat

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

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

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

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

125.   SELECT   COUNT(*)   FROM   allat   WHERE   hossz>500

126.   SELECT   COUNT(*)   FROM   allat   WHERE   hossz<1

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

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

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

130.   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'

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

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

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

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


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

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

137.   SELECT   *   FROM   euroallat   ORDER   BY   onev,faj,anev

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

139.   DROP   VIEW   euroallat

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

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

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

143.   DELETE   FROM   orszag   WHERE   terulet<10

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

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

146.   DROP   TABLE   orszag

Találat: 800