CARTESIAN JOIN или CROSS JOIN возвращают декартово произведение множеств записей из двух или более соединенных таблиц. Таким образом, он приравнивается к внутреннему соединению, где условие WHERE всегда принимает значение ИСТИНЫ или где условие WHERE отсутствует в запросе.
Базовый синтаксис CARTESIAN JOIN или CROSS JOIN следующий:
SELECT table1.column1, table2.column2... FROM table1, table2 [, table3 ]
Рассмотрим следующие две таблицы.
Таблица 1 – таблица CUSTOMERS выглядит следующим образом:
+----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Maxim | 35 | Moscow | 21000.00 | | 2 | AndreyEx | 38 | Krasnodar | 55500.00 | | 3 | Oleg | 33 | Rostov | 34000.00 | | 4 | Masha | 35 | Moscow | 34000.00 | +----+----------+-----+-----------+----------+
Таблица 2: Таблица ORDERS выглядит следующим образом:
+-----+---------------------+-------------+--------+ |OID | DATE | CUSTOMER_ID | AMOUNT | +-----+---------------------+-------------+--------+ | 102 | 2017-01-11 00:00:00 | 3 | 34000 | | 100 | 2017-01-11 00:00:00 | 3 | 34000 | | 101 | 2017-02-02 00:00:00 | 2 | 12500 | | 103 | 2017-03-05 00:00:00 | 4 | 45000 | +-----+---------------------+-------------+--------+
Теперь, давайте объединим эти две таблицы, используя INNER JOIN следующим образом:
SQL> SELECT ID, NAME, AMOUNT, DATE FROM CUSTOMERS, ORDERS;
Это произведет следующий результат:
+----+----------+-----+--------+ | ID | NAME | AGE | AMOUNT | +----+----------+-----+--------+ | 1 | Maxim | 35 | 34000 | | 1 | Maxim | 35 | 34000 | | 1 | Maxim | 35 | 12500 | | 1 | Maxim | 35 | 45000 | | 2 | AndreyEx | 38 | 34000 | | 2 | AndreyEx | 38 | 34000 | | 2 | AndreyEx | 38 | 12500 | | 2 | AndreyEx | 38 | 45000 | | 3 | Oleg | 33 | 34000 | | 3 | Oleg | 33 | 34000 | | 3 | Oleg | 33 | 12500 | | 3 | Oleg | 33 | 45000 | | 4 | Masha | 35 | 34000 | | 4 | Masha | 35 | 34000 | | 4 | Masha | 35 | 12500 | | 4 | Masha | 35 | 45000 | +----+----------+-----+--------+