Problém:
Chcete získat všechny kombinace řádků ze dvou tabulek v SQL.
Příklad:
Zde jsou dvě tabulky:jedna obsahuje písmena (letters
) a druhý obsahuje čísla (numbers
):
dopis |
---|
X |
Y |
číslo |
---|
0 |
1 |
2 |
Řešení 1:
Aby bylo možné zkombinovat každý řádek letters
tabulka s každým řádkem numbers
tabulky, použijeme CROSS JOIN
:
SELECT * FROM letters CROSS JOIN numbers;
Výsledek dotazu vypadá takto:
dopis | číslo |
---|---|
X | 0 |
Y | 0 |
X | 1 |
Y | 1 |
X | 2 |
Y | 2 |
Řešení 2:
Další způsob provedení CROSS JOIN je následující:
SELECT * FROM letters, numbers;
Získáte přesně stejný výsledek jako předchozí dotaz.
Diskuse:
Obecným pravidlem je CROSS JOIN
vytváří sadu výsledků, ve které je každý řádek z jedné tabulky spojen s každým řádkem jiné tabulky. Jinými slovy, pokud první tabulka obsahuje n řádky a druhá tabulka ukládá m řádky a poté CROSS JOIN
výsledkem bude kartézský produkt z n × m řádky. To je důvod, proč je ve výše uvedeném příkladu dotazem vráceno šest řádků.
Protože CROSS JOIN
vytváří všechny možné kombinace řádků mezi spojovanými tabulkami, není třeba zadávat vztah. Tedy na rozdíl od jiných JOINs
, není žádné ON
klauzule v CROSS JOIN
.