Le produit cartésien consiste à prendre deux relations et à faire toutes les associations de tuples possibles entre ces deux relations.
Soient r et s deux relations sur R, r et s n'ont pas forcément le même schéma de relation. Disons par exemple que schéma(r)={A,B,C} tandis que schéma(s)={A,D,E}. r X s aura comme schéma de relation {r.1,r.B,r.C,s.A,s.D,s.E}
Nous allons essayer de faire un produit cartésien sur notre base:

La jointure naturelle reprend a peu près le principe du produit cartésien, mais lui ajoute une petite condition. Cette condition, et bien elle est très basique: si des attributs ont le même nom (ou si la jointure est forcée entre attributs différents), alors ils devront avoir la même valeur dans le tuple pour que ce dernier soit gardé.
Soient r1 et r2 deux relations sur R1 et R2 respectivement.
La jointure naturelle de r1 et r2, notée r1 ∞ r2, est une relation sur un schéma de relation R, avec schema(R) = schema(R1) ∪ schema(R2), définie par : r1 ∞ r2 = {t | ∃ t1 ∈ r1, ∃ t2 ∈ r2 tq t[schema(R1) = t1 et t[schema(R2)]) = t2]}


- Resultat = 0
- for all t1 ∈ r1 do
- for all t2 ∈ r2 do
- if t1[X] = t2[X] then
- Construire un tuple t tq t[schema(R1)] = t1 et t[schema(R2)] = t2
- Resultat = Resultat ∪ {t}
- retourner Resultat



