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?
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
Látom vágod a relációs algebrát. :-D (jobban mint én)
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 :)
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
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?
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.
¶ 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))
3 és 5-ös: nálam itt elég cifra dolgok jönnek ki. :D
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):
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))
Ja azt nemtom kell-e rajtuk algebrai optimalizaciot csinalni, vagy csak mukodjenek?
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.