Probleem:
U wilt alle combinaties van rijen uit twee tabellen in SQL krijgen.
Voorbeeld:
Hier zijn twee tabellen:één bevat letters (letters
), en de andere bevat cijfers (numbers
):
letter |
---|
X |
J |
getal |
---|
0 |
1 |
2 |
Oplossing 1:
Om elke rij van de letters
tabel met elke rij van de numbers
tabel gebruiken we de CROSS JOIN
:
SELECT * FROM letters CROSS JOIN numbers;
Het resultaat van de zoekopdracht ziet er als volgt uit:
letter | nummer |
---|---|
X | 0 |
J | 0 |
X | 1 |
J | 1 |
X | 2 |
J | 2 |
Oplossing 2:
Een andere manier om de CROSS JOIN uit te voeren is als volgt:
SELECT * FROM letters, numbers;
Dit geeft exact hetzelfde resultaat als bij de vorige zoekopdracht.
Discussie:
Als algemene regel geldt dat een CROSS JOIN
produceert een resultatenset waarin elke rij van de ene tabel wordt samengevoegd met elke rij van een andere tabel. Met andere woorden, als de eerste tabel n . bevat rijen en de tweede tabel slaat m op rijen, dan een CROSS JOIN
resulteert in een Cartesiaans product van n × m rijen. Dit is de reden waarom er zes rijen worden geretourneerd door de zoekopdracht in het bovenstaande voorbeeld.
Omdat een CROSS JOIN
produceert alle mogelijke combinaties van de rijen tussen de tabellen die worden samengevoegd, het is niet nodig om een relatie op te geven. Dus, in tegenstelling tot andere JOINs
, er is geen ON
clausule in een CROSS JOIN
.