Проблем:
Искате да получите всички комбинации от редове от две таблици в SQL.
Пример:
Ето две таблици:едната съдържа букви (letters ), а другата съдържа числа (numbers ):
| буква |
|---|
| X |
| Y |
| число |
|---|
| 0 |
| 1 |
| 2 |
Решение 1:
За да комбинирате всеки ред от letters таблица с всеки ред от numbers таблица, ще използваме CROSS JOIN :
SELECT * FROM letters CROSS JOIN numbers;
Резултатът от заявката изглежда така:
| буква | номер |
|---|---|
| X | 0 |
| Y | 0 |
| X | 1 |
| Y | 1 |
| X | 2 |
| Y | 2 |
Решение 2:
Друг начин за извършване на CROSS JOIN е както следва:
SELECT * FROM letters, numbers;
Това ще получи точно същия резултат, получен от предишната заявка.
Дискусия:
Като общо правило, CROSS JOIN произвежда резултатен набор, в който всеки ред от една таблица се присъединява към всеки ред от друга таблица. С други думи, ако първата таблица съхранява n редове и втората таблица съхраняваm редове, след това CROSS JOIN ще доведе до декартов продукт от n × m редове. Ето защо има шест реда, върнати от заявката в примера по-горе.
Тъй като CROSS JOIN произвежда всички възможни комбинации от редовете между таблиците, които се свързват, няма нужда да се посочва връзка. Така че, за разлика от други JOINs , няма ON клауза в CROSS JOIN .