[ALG]Cartesian product, null waarden

Pagina: 1
Acties:

  • hemaworst
  • Registratie: Juli 2004
  • Laatst online: 12-03-2022
Hallo,
ik ben bezig om een repository te modeleren waarin relational algebra expressions opgeslagen kunnen worden.
Nu ben ik aangekomen bij cartesian product en joins. Wikipedia.org zegt het volgende:

A join is essentially a cartesian product followed by a predicate to filter the results.

nu snap ik dat voor inner joins, maar voor left outer joins snap ik het niet helemaal(en right en full). De left outer join geeft namelijk null waarden aan de rechterkant wanneer niet aan de conditie voldaan wordt.Nu maakt een cartesisch product alle mogelijk combinaties van table1 en table 2. Null waarden worden niet gegenereerd (toch?)
Hoe kan dan een left outer join een cartesich product zijn met een filter er over heen? De null waarden aan de rechterkant zijn toch niet in de populatie te vinden van het cartesisch product?

ik hoop dat ik een beetje duidelijk ben, want in tekst is het zo moeilijk uit te drukken.
Wie kan me helpen?

Hans Dorrestijn: "Want, de worstjes van de Hema zijn niet te hard of slap...De Hemaworst, hoera hoera, zit barstens vol met sap.Baby's die nu juichen aan de moederborst...Zouden harder zuigen aan de Hemaworst"


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 23:02

Creepy

Tactical Espionage Splatterer

Met een left outer join krijg je aan de linkerkant gewoon alle waarden te zien. Je filter bepaalt vervolgens welke waarden je aan de rechterkant te zien krijgt. Als niet aan de filter voldaan wordt krijg je dus aan de rechterkant een null.
De filter zorgt er natuurlijk voor dat je voor elke waarde aan de linkerkant er maar maximaal 1 waarde terugkomt aan de rechterkant.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • hemaworst
  • Registratie: Juli 2004
  • Laatst online: 12-03-2022
mmm,
ik denk dat ik al wat meer snap.
als ik het goed begrijp is een innerjoin een cartesisch produkt met een selectie(where conditie) er over heen.
Volgens een wiskunde pagina is de left join de innerjoin UNION de linker tabel:
R ∪ (R |X| S)

gevonden op:http://www.absoluteastronomy.com/encyclopedia/r/re/relational_algebra.htm


Nu ben ik nog enigszins verward over het feit dat bovenstaande expressie de set R unioned met een set die nooit UNION compatible kan zijn met set R.

{union compatible betekend dat beide tabellen gelijke kolommen moeten hebben, wanneer je dat niet doet dan is het resultaat van de union ondefinieerbaar)

Moeilijk hoor

Hans Dorrestijn: "Want, de worstjes van de Hema zijn niet te hard of slap...De Hemaworst, hoera hoera, zit barstens vol met sap.Baby's die nu juichen aan de moederborst...Zouden harder zuigen aan de Hemaworst"


Verwijderd

Vergeet niet dat er ook nog projectie wordt uitgevoerd.

Even wat ad-hoc syntax uit m'n mouw schudden:

cr = De kolommen van de JOIN projectie uit R
cs = De kolommen van de JOIN projectie uit S
C = cr U cs, alle kolommen uit je SELECT dus

PX(Q) = De projectie van selectie (query) Q naar de kolommen uit verzameling X, met de conventie dat als een kolom x uit X niet in de kolommen van Q, een NULL waarde wordt teruggegeven op die plek.

Wat er eigenlijk gebeurt is:
PC(R [X] S) U PC(R)
Omdat de projectie op beide tabellen hetzelfde is, hebben ze per definitie dezelfde kolommen en zijn dus UNION-compatible.

  • hemaworst
  • Registratie: Juli 2004
  • Laatst online: 12-03-2022
Thanks!
Ik denk dat ik het nu helemaal snap! Heel erg dank voor het meedenken!

Hans Dorrestijn: "Want, de worstjes van de Hema zijn niet te hard of slap...De Hemaworst, hoera hoera, zit barstens vol met sap.Baby's die nu juichen aan de moederborst...Zouden harder zuigen aan de Hemaworst"