Problem:
Chcesz uzyskać wszystkie kombinacje wierszy z dwóch tabel w SQL.
Przykład:
Oto dwie tabele:jedna zawiera litery (letters
), a druga zawiera liczby (numbers
):
list |
---|
X |
T |
liczba |
---|
0 |
1 |
2 |
Rozwiązanie 1:
Aby połączyć każdy wiersz letters
tabela z każdym wierszem numbers
tabeli, użyjemy CROSS JOIN
:
SELECT * FROM letters CROSS JOIN numbers;
Wynik zapytania wygląda tak:
list | liczba |
---|---|
X | 0 |
T | 0 |
X | 1 |
T | 1 |
X | 2 |
T | 2 |
Rozwiązanie 2:
Innym sposobem wykonania CROSS JOIN jest:
SELECT * FROM letters, numbers;
Spowoduje to uzyskanie dokładnie tego samego wyniku, co poprzednie zapytanie.
Dyskusja:
Z reguły CROSS JOIN
tworzy zestaw wyników, w którym każdy wiersz z jednej tabeli jest łączony z każdym wierszem innej tabeli. Innymi słowy, jeśli pierwsza tabela przechowuje n wiersze i druga tabela przechowuje m wierszy, a następnie CROSS JOIN
da w wyniku produkt kartezjański z n × m wydziwianie. Dlatego w powyższym przykładzie zapytanie zwraca sześć wierszy.
Ponieważ CROSS JOIN
tworzy wszystkie możliwe kombinacje wierszy pomiędzy łączonymi tabelami, nie ma potrzeby określania relacji. Tak więc, w przeciwieństwie do innych JOINs
, nie ma ON
klauzula w CROSS JOIN
.