SQL – cross join

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:

IdNameSurname
1MagnusCarlsen
2Jan KrzysztofDuda
3HikaruNakamura

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.Id

co zwróci każdą możliwą kombinację:

white.Namewhite.Surnameblack.Nameblack.Surname
MagnusCarlsenJan KrzysztofDuda
MagnusCarlsenHikaruNakamura
Jan KrzysztofDudaMagnusCarlsen
Jan KrzysztofDudaHikaruNakamura
HikaruNakamuraMagnusCarlsen
HikaruNakamuraJan KrzysztofDuda

Pozostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *