28
Valaki légyszi segítsen
  • Roll
    #1
    A címet elírtam. :-D
  • Roll
    #2
    Van egy feladat amit nem tudok megcsinálni:

    Vevők(vevőkód,vevőnév,vevőcím)
    Sütemények(sütikód,sütinév,egységár)
    Rendelés(dátum,vevőkód,sütikód,darab)
  • Roll
    #3
    Ehhez tartozó kérdések:

    1. 2003.03.20-án ki rendelt sütit?
    2. Milyen sütiket nem rendeltek eddig?
    3. Kik rendelték azokat a sütiket, mint a Fantom Bt?
    4. Kik rendeltek krémest?
    5. Melyik a legolcsóbb süti?
  • Galy
    #4
    1. aznap Lajos bácsi a 28-ből és az Olá család
    2. keménymagos habtejszínes mazsolás
    3. Fantom 2000 Bt.
    4. Lajos bácsiék a 28-ból
    5. hásztartázsi keksz
  • Roll
    #5
    Látom vágod a relációs algebrát. :-D (jobban mint én)
  • Taranov
    #6
    3-as lol :D
  • Roll
    #7
    Tényleg ez volt ám zh-n a feladat és ilyen pí-kel meg szigma-kal kéne megcsinálni.
  • Pheel
    #8
    Esetleg előveszed a jegyzetet, aztán megtanulod pl...
  • Garfield
    #9
    Fúúúj, már megint ilyen hülye ötletek, mint tankönyv, Google meg súgó...
  • Taranov
    #10
    Jól mondja Garfield, neked ez a mániád :D
  • Zsoldos
    #11
    Mondjuk sztem igaza van, ezeknel konnyebb lekerdezeseket ki sem lehet talalni.
  • Roll
    #12
    Ha annyire könnyű neked, akkor légy szíves oszd meg velem is.
    Köszi
  • Zsoldos
    #13
    haat jo reg volt mar, szal garanciat nem vallalok ..
    relacios algebrai jeloleseket ide nem tudok irni, sql szintaxissal irom, gondolom tudod hogy alakitsd at. (roviden: select utan a kivalasztott oszlopok (projekcio), aztan a hasznalt tablak nevei (ezeknek direktszorzatuk..) utana pedig a feltetel (ez a relacios algebras select) )

    select vevok.vevonev from vevok, rendeles where rendeles.datum='2003.03.20' and rendeles.vevokod=vevok.vevokod;
    select sutinev from sutemenyek where sutikod=(select sutikod from sutemenyek minus (select sutikod from rendeles));
    select vevok.vevonev from vevok, sutemenyek, rendeles where vevok.vevokod=rendeles.vevokod and rendeles.sutikod=sutemenyek.sutikod and sutemenyek.sutikod=(select sutikod from rendeles, vevok where rendeles.vevokod=vevok.vevokod and vevok.vevonev='Fantom Bt');
    select vevok.vevonev from vevok, sutemenyek, rendeles where rendeles.vevokod=vevok.vevokod and rendeles.sutikod=sutemenyek.sutikod and sutemenyek.sutinev='kremes';
    select egysegar from sutemenyek where egysegar=(select min(egysegar) from sutemenyek);
    ez hasznal fuggvenyt is, ez rel. algebraban igy irhatod fel anelkul:
    select egysegar from sutemenyek where egysegar<=(select egysegar from sutemenyek);

    ja, elmegyek vizsgazni is helyetted, ha odaadod a vga-dat :)
  • Roll
    #14
    Ez sql! Nekem nem ilyen kell!!!!

    Ezért nem kapod meg a vga-t. Egyébként már gyenge ez a kártya.
  • Zsoldos
    #15
    1: ide nem tudok rel.alg. jeloleseket irni azert irtam igy
    2: az sql egy relacios algebrara epulo lekerdezo nyelv, sql lekerdezes egy az egyben atirhato, csak a jelolesek masok.
    3: amugy is baromi egyszeru atirni, sot meg le is irtam, hogyan kell.
    4: lehet hogy gyenge, de az enyemnel sokkal jobb
  • Roll
    #16
    az első így nézne ki:

    szigma rendelés.dátum=2003.03.20 and rendelés.vevőkód=vevők.vevőkód(pí (vevőnév)vevők,rendelés)

    még egy pár kérdés:
    1.a kiválasztásánál(szigma) így kell megadni a dolgokat?
    2.a vetítésnél(pí)után a vevőnév csak a vevőkben van, utána te is odaírtad a rendelést, ez azt jelenti hogy a vevőkből kivetíti a vevőnevet és az egész rendelést?

    Köszi
  • Zsoldos
    #17
    Nemnem, kicsit mashogy. Amit leirtal nem jo, mert eloszor projekciot alkalmaztal(ami belul van), igy a tablabol csak a vevonev maradt meg, abbol pedig nem tudsz a datum szerint selectezni, mert azokat az oszlopokat mar kiiktattad.

    Az elso:
    pí vevok.vevonev (szigma rendeles.datum=2003.03.20 and rendeles.vevokod=vevok.vevokod(vevok x rendeles))

    a jeloles: a pi es sigma -hoz indexbe irod a feltetelt.

    Tehat csinalsz egy direktszorzatot a tablakbol, majd szurod a sorait a sigma-val a felteteleid szerint, es vegul leszukited azokra az oszlop(ok)ra, amire kivancsi vagy.
  • Roll
    #18
    Köszi szépen, király vagy. :-D
  • Roll
    #19
    Próbálkozok tovább, ez a másodikra jó?

    ¶ sütemény.sütinév (szigma sütemények.sütikód-renelés.sütikód(sütemények x rendelés))
  • Roll
    #20
    4-re:

    ¶ vevők.vevőnév(szigma rendelés.vevőkód=vevő.vevőkód and rendelés.sütikód=sütemények.sütikód and sütemények.sütinév=krémes (vevők x sütemény x rendelés))
  • Roll
    #21
    3 és 5-ös: nálam itt elég cifra dolgok jönnek ki. :D
  • Zsoldos
    #22
    masodik: amit te irtal eleg furcsa. a sigma parametereben mit keres a minusz? oda egy feltetel kell.. azt ird at egyenlosegre igy:

    A = ¶ sütemény.sütinév (szigma sütemények.sütikód=rendelés.sütikód(sütemények x rendelés))

    igy kivalasztottad azoknak a sutiknek a neveit, amiket mar megrendeltek. Persze nem ez a feladat, hanem azon suti nevei, amiket nem rendeltek, tehat fogod az osszes sutit es kivonod beloluk a rendelt sutiket (amiket font A -nak neveztem el):

    pi sutemeny.sutinev(sutemenyek) \ A

  • Zsoldos
    #23
    a 4-es teljesen jo
  • Zsoldos
    #24
    igazad van, a beagyazott selectek atirasa nem megy egy az egyben, ez mar inkabb sql-es trukk volt..

    5-os: hogy megallapitsd a legolcsobb sutit, onmagaval vett direktszorzat kell venned(ugye minden suti arat ossze kell hasonlitanod a tobbivel, hogy ezt eldontsd..), ekkor el kell nevezned a tablakat, hogy hivatkozhass rajuk. Mar nem emlekszem pontosan, hogy kell jelolni, talan igy:

    tehat s1 es s2-nek nevezem a tablakat

    pi s1.sutinev ( sigma s1.egysegar<=s2.egysegar (sutemenyek s1 x sutemenyek s2))

  • Zsoldos
    #25
    Ja azt nemtom kell-e rajtuk algebrai optimalizaciot csinalni, vagy csak mukodjenek?
  • Zsoldos
    #26
    Csak mert vannak trukkok, hogyan lehet novelni a keresesi hatekonysagot, pl meg a direkt szorzat elott (ugye ennek az eredmenye egy bazinagy tabla lesz..) projekcioval csak a szamodra fontos reszeket hagyod meg..

    Pl az egyesben ahol a rendelt sutiket keresed, a rendeles tablabol neked csak a sutikod fog kelleni, a suti tablabol pedig a sutinev es a sotikod, tehat

    A = ¶ sütemény.sütinév (szigma sütemények.sütikód=rendelés.sütikód((pi sutikod, sutinev (sütemények)) x (pi sutikod (rendelés))) ->

    Kicsit bonyolultabb a megoldas, az eredmeny ugyanaz lesz, de igy egy csomo folosleges reszt lehagy a kivalasztas kozben a tablabol. Altalanos szabaly, hogy elsosorban a selectet, masodsorban a projekciot minel hamarabb vegezd el (ezek csokkentik a tablak meretet..), es ha lehet, minel kesobb a direkt szorzatot(ettol hatvanyozottan novekszik a tabla). Mondjuk ha kulon nem kerik akkor nem kell hasonlo dolgokkal veszodnod. Erre a gyakorlatban nem sok szukseg van, maguk a lekerdezo nyelvek optimalizalnak.
  • Roll
    #27
    Tábla átnevezés így megy: Ró s1(sütemények)

    Köszi szépen,hogy segítettél.
  • Zsoldos
    #28
    nincsmit, vga-t postazd :)