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 .