MySQL STRAIGHT_JOIN
Что такое STRAIGHT_JOIN в MySQL?
В MySQL STRAIGHT_JOIN сканирует и объединяет совпадающие строки (если указано какое-либо условие), которые хранятся в связанных таблицах, в противном случае он ведет себя как INNER JOIN или JOIN без каких-либо условий.
«STRAIGHT_JOIN аналогичен JOIN, за исключением того, что левая таблица всегда читается перед правой таблицей. Это можно использовать для тех (немногих) случаев, когда оптимизатор объединения размещает таблицы в неправильном порядке». - Руководство по MySQL
MySQL STRAIGHT_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 STRAIGHT_JOIN
В следующем примере условия не были указаны, поэтому это объединение объединяет каждую строку левой таблицы со всеми строками в правой таблице.
Код:
SELECT table112.id,table112.bval1,table112.bval2,
table111.id,table111.aval1
FROM table112
STRAIGHT_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,00 сек)
Пример: MySQL STRAIGHT_JOIN с условием
В следующем примере STRAIGHT_JOIN выполняется для условия, и только соответствующие строки были извлечены. Он ведет себя как внутреннее соединение или соединение с условием.
Код:
SELECT table113.id,table113.cval1,
table111.id,table111.aval1
FROM table113
STRAIGHT_JOIN table111
ON table113.id=table111.id;
Пример вывода:
+ ------ + ------- + ------ + ------- + | id | cval1 | id | aval1 | + ------ + ------- + ------ + ------- + | 1 | 16 | 1 | 405 | | 2 | 12 | 2 | 401 | | 3 | 17 | 3 | 200 | + ------ + ------- + ------ + ------- + 3 ряда в наборе (0,03 сек)
Ключевые моменты для запоминания
Нажмите на следующее, чтобы получить презентацию слайдов -
Предыдущий: RIGHT JOIN
Далее: CROSS JOIN
Новый контент: Composer: менеджер зависимостей для PHP , R программирования