Cross join pozwala na uzyskanie iloczynu kartezjańskiego (cartesian product) z kolumn tabel łączonych.
Kiedy jest to przydatne?
Jest to przydatne jeśli chcemy otrzymać wszystkie możliwe kombinacje pomiędzy kolumnami z tabel. Przykładowo mając tabelę reprezentującą graczy szachowych CHESS_PLAYERS:
| Id | Name | Surname |
|---|---|---|
| 1 | Magnus | Carlsen |
| 2 | Jan Krzysztof | Duda |
| 3 | Hikaru | Nakamura |
i chcąc zapewnić, że każdy gracz szachowy zagra z każdym w obydwu konfiguracjach (raz białymi, raz czarnymi), można wykorzystać konstrukcję cross join (z wykorzystaniem self join i warunkiem wykluczającym parowanie gracza z samym sobą):
SELECT white.Name, white.Surname, black.Name, black.Surname
FROM CHESS_PLAYERS white CROSS JOIN CHESS_PLAYERS black WHERE white.Id <> black.Idco zwróci każdą możliwą kombinację:
| white.Name | white.Surname | black.Name | black.Surname |
|---|---|---|---|
| Magnus | Carlsen | Jan Krzysztof | Duda |
| Magnus | Carlsen | Hikaru | Nakamura |
| Jan Krzysztof | Duda | Magnus | Carlsen |
| Jan Krzysztof | Duda | Hikaru | Nakamura |
| Hikaru | Nakamura | Magnus | Carlsen |
| Hikaru | Nakamura | Jan Krzysztof | Duda |
