MySQL CROSS JOIN
Перекрестное соединение
В MySQL CROSS JOIN генерирует результирующий набор, который является произведением строк двух связанных таблиц, когда предложение CRERE не используется с CROSS JOIN.
В этом соединении результирующий набор появился путем умножения каждой строки первой таблицы на все строки второй таблицы, если с CROSS JOIN не было введено никаких условий.
Этот вид результата называется декартовым произведением.
В MySQL CROSS JOIN ведет себя как JOIN и INNER JOIN без каких-либо условий.
В стандартном SQL различие между INNER JOIN и предложением CROSS JOIN - ON можно использовать с INNER JOIN, с другой стороны, предложение ON нельзя использовать с CROSS JOIN.
Иллюстрированная презентация MySQL CROSS JOIN :
MySQL CROSS JOIN Синтаксис:
MySQL поддерживает следующие синтаксисы JOIN для table_references (ссылка на таблицу также известна как выражение соединения.) Часть операторов SELECT и операторов UPDATE и DELETE для нескольких таблиц:
table_references: escaped_table_reference [, escaped_table_reference] ... escaped_table_reference: табличная_ссылка | {OJ table_reference} табличная_ссылка: table_factor | join_table table_factor: tbl_name [PARTITION (имя_раздела)] [[AS] псевдоним] [index_hint_list] | table_subquery [AS] псевдоним | (table_references) join_table: table_reference [INNER | CROSS ] JOIN table_factor [join_condition] | table_reference STRAIGHT_JOIN table_factor | table_reference STRAIGHT_JOIN table_factor ON conditional_expr | table_reference {LEFT | RIGHT} [OUTER] JOIN table_reference join_condition | table_reference NATURAL [{LEFT | RIGHT} [OUTER]] JOIN table_factor join_condition: ON conditional_expr | ИСПОЛЬЗОВАНИЕ (column_list) index_hint_list: index_hint [, index_hint] ... index_hint: USE {INDEX | KEY} [FOR {JOIN | ORDER BY | GROUP BY}] ([index_list]) | IGNORE {INDEX | KEY} [FOR {JOIN | ORDER BY | GROUP BY}] (index_list) | СИЛА {ИНДЕКС | КЛЮЧ} [FOR {JOIN | ORDER BY | GROUP BY}] (index_list) index_list: index_name [, index_name] ...
Пример: MySQL CROSS JOIN
В следующем примере получено декартово произведение.
Код:
SELECT table112.id,table112.bval1,table112.bval2,
table111.id,table111.aval1
FROM table112
CROSS JOIN table111;
Образцы таблиц:
Пример вывода:
+ ------ + ------- + ------- + ------ + ------- + | id | bval1 | bval2 | id | aval1 | + ------ + ------- + ------- + ------ + ------- + | 701 | 405 | 16 | 1 | 405 | | 704 | 409 | 14 | 1 | 405 | | 706 | 403 | 13 | 1 | 405 | | 709 | 401 | 12 | 1 | 405 | | 701 | 405 | 16 | 2 | 401 | | 704 | 409 | 14 | 2 | 401 | | 706 | 403 | 13 | 2 | 401 | | 709 | 401 | 12 | 2 | 401 | | 701 | 405 | 16 | 3 | 200 | | 704 | 409 | 14 | 3 | 200 | | 706 | 403 | 13 | 3 | 200 | | 709 | 401 | 12 | 3 | 200 | | 701 | 405 | 16 | 4 | 400 | | 704 | 409 | 14 | 4 | 400 | | 706 | 403 | 13 | 4 | 400 | | 709 | 401 | 12 | 4 | 400 | + ------ + ------- + ------- + ------ + ------- + 16 рядов в наборе (0,05 сек)
Пример: MySQL CROSS JOIN с левым соединением
В следующем примере сначала выполняется перекрестное соединение между table112 и table133, затем выполняется левое соединение в соответствии с заданным условием.
Код:
SELECT *
FROM table111
LEFT JOIN(table112 CROSS JOIN table113)
ON table111.id=table113.id;
Пример вывода:
+ ------ + ------- + ------ + ------- + ------- + ------ + ---- --- + | id | aval1 | id | bval1 | bval2 | id | cval1 | + ------ + ------- + ------ + ------- + ------- + ------ + ---- --- + | 1 | 405 | 701 | 405 | 16 | 1 | 16 | | 1 | 405 | 704 | 409 | 14 | 1 | 16 | | 1 | 405 | 706 | 403 | 13 | 1 | 16 | | 1 | 405 | 709 | 401 | 12 | 1 | 16 | | 2 | 401 | 701 | 405 | 16 | 2 | 12 | | 2 | 401 | 704 | 409 | 14 | 2 | 12 | | 2 | 401 | 706 | 403 | 13 | 2 | 12 | | 2 | 401 | 709 | 401 | 12 | 2 | 12 | | 3 | 200 | 701 | 405 | 16 | 3 | 17 | | 3 | 200 | 704 | 409 | 14 | 3 | 17 | | 3 | 200 | 706 | 403 | 13 | 3 | 17 | | 3 | 200 | 709 | 401 | 12 | 3 | 17 | | 4 | 400 | NULL | NULL | NULL | NULL | NULL | + ------ + ------- + ------ + ------- + ------- + ------ + ---- --- + 13 рядов в наборе (0,00 сек)
Пример: MySQL CROSS JOIN с предложением WHERE
В следующем примере CROSS JOIN были выполнены с предложением WHERE и аналогичны INNER JOIN с предложением ON.
Код:
SELECT table111.*,table113.*
FROM table111
CROSS JOIN table113
WHERE table111.id=table113.id;
Пример вывода:
mysql> выберите table111. *, table113. * -> из таблицы111 -> Таблица перекрестных соединений113 -> где table111.id = table113.id; + ------ + ------- + ------ + ------- + | id | aval1 | id | cval1 | + ------ + ------- + ------ + ------- + | 3 | 200 | 3 | 17 | | 2 | 401 | 2 | 12 | | 1 | 405 | 1 | 16 | + ------ + ------- + ------ + ------- + 3 ряда в наборе (0,05 сек)
Ключевые моменты для запоминания
Нажмите на следующее, чтобы получить презентацию слайдов -
CROSS JOINS: SQL и другие реляционные базы данных
Предыдущая: STRAIGHT_JOIN
Далее: ЕСТЕСТВЕННОЕ СОЕДИНЕНИЕ
Новый контент: Composer: менеджер зависимостей для PHP , R программирования