Оператор SQL CROSS JOIN формирует таблицу перекрестным соединением (декартовым произведением) двух таблиц. При использовании оператора SQL CROSS JOIN каждая строка левой таблицы сцепляется с каждой строкой правой таблицы. В результате получается таблица со всеми возможными сочетаниями строк обеих таблиц.
Оператор SQL CROSS JOIN имеет следующий синтаксис:
SELECT
column_names [,... n]
FROM
Table_1 CROSS JOIN Table_2
Обратите внимание, что в операторе за ненадобностью отсутствует условие (ON).
Примеры оператора SQL CROSS JOIN. Имеются две таблицы:
Authors — содержит в себе информацию об авторах книг:
| AuthorID | AuthorName |
| 1 | Bruce Eckel |
| 2 | Robert Lafore |
| 3 | Andrew Tanenbaum |
Books — содержит в себе информацию о названии книг:
| BookID | BookName |
| 3 | Modern Operating System |
| 1 | Thinking in Java |
| 3 | Computer Architecture |
| 4 | Programming in Scala |
В таблице Books поле BookID являются внешним ключом и ссылаются на таблицу Authors.
Пример 1. Произвести декартово произведение обеих таблиц с помощью оператора SQL CROSS JOIN:
SELECT * FROM Authors CROSS JOIN Books
Результирующая таблица будет выглядеть следующим образом:
| Authors.AuthorID | Authors.AuthorName | Books.BookID | Books.BookName |
| 1 | Bruce Eckel | 3 | Modern Operating System |
| 1 | Bruce Eckel | 1 | Thinking in Java |
| 1 | Bruce Eckel | 3 | Computer Architecture |
| 1 | Bruce Eckel | 4 | Programming in Scala |
| 2 | Robert Lafore | 3 | Modern Operating System |
| 2 | Robert Lafore | 1 | Thinking in Java |
| 2 | Robert Lafore | 3 | Computer Architecture |
| 2 | Robert Lafore | 4 | Programming in Scala |
| 3 | Andrew Tanenbaum | 3 | Modern Operating System |
| 3 | Andrew Tanenbaum | 1 | Thinking in Java |
| 3 | Andrew Tanenbaum | 3 | Computer Architecture |
| 3 | Andrew Tanenbaum | 4 | Programming in Scala |