кодесурса
«MYSQL

MySQL CROSS JOIN

script1adsense2code
script1adsense3code

Перекрестное соединение

В 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 сек)

Ключевые моменты для запоминания

Нажмите на следующее, чтобы получить презентацию слайдов -

«MySQL

CROSS JOINS: SQL и другие реляционные базы данных

Предыдущая: STRAIGHT_JOIN
Далее: ЕСТЕСТВЕННОЕ СОЕДИНЕНИЕ

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code