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

 
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

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