MySQL RIGHT JOIN
Что такое RIGHT JOIN в MySQL?
MySQL RIGHT JOIN объединяет две таблицы и выбирает строки на основе условия, которое совпадает в обеих таблицах, и несопоставленные строки также будут доступны из таблицы, написанной после предложения JOIN.
Иллюстрированная презентация MySQL RIGHT JOIN:
MySQL RIGHT 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] ...
Предположим: 1st_table RIGHT JOIN 2nd_table СОЕДИНЕНИЕ
В MySQL RIGHT JOIN таблица 1st_table зависит от таблицы 2nd_table и всех таблиц, от которых зависит 2nd_table, а также от таблицы 2nd_table зависит от всех таблиц, которые используются в условии RIGHT JOIN, кроме 1st_table. Условие RIGHT JOIN используется, чтобы решить, как извлечь строки из таблицы 1st_table.
Если в 2nd_table есть строка, соответствующая предложению WHERE, но в 1st_table нет строки, соответствующей условию ON, генерируется дополнительная строка 1st_table, в которой для всех столбцов установлено значение NULL.
Итак, в случае RIGHT JOIN или RIGHT OUTER JOIN, MySQL -
1. берет все выбранные значения из правой таблицы
2. объединяет их с именами столбцов (указанными в условии) из левой таблицы
3. получить соответствующие строки из обеих связанных таблиц.
4. устанавливает значение каждого столбца из левой таблицы в NULL, что не соответствует правой таблице.
Пример: MySQL RIGHT JOIN
В следующем примере bval1 и aval1 обеих связанных таблиц совпали, и появились все указанные столбцы для сопоставления из обеих таблиц. Появились несопоставленные строки из правой таблицы, то есть table111, и для этих строк столбцы левой таблицы, т.е. table112, установили значение NULL.
Что здесь происходит, MySQL начинается с правой таблицы (table111). Для каждого aval1 из таблицы table111 MySQL сканирует левую таблицу - table112, чтобы найти совпадение с bval1. Когда он находит совпадающие значения aval1 и bval1, он возвращает другие указанные столбцы. Для несопоставленных строк возвращается ноль. Здесь, из приведенного выше примера, он возвращает NULL для значений aval1 200 и 400, потому что он не существует в левой таблице.
Код:
SELECT table112.id,table112.bval1,table112.bval2,
table111.id,table111.aval1
FROM table112
RIGHT JOIN table111
ON table112.bval1=table111.aval1;
Код:
SELECT table112.id,table112.bval1,table112.bval2,
table111.id,table111.aval1
FROM table112
RIGHT OUTER JOIN table111
ON table112.bval1=table111.aval1;
Образцы таблиц:
Пример вывода:
+ ------ + ------- + ------- + ------ + ------- + | id | bval1 | bval2 | id | aval1 | + ------ + ------- + ------- + ------ + ------- + | 701 | 405 | 16 | 1 | 405 | | 709 | 401 | 12 | 2 | 401 | | NULL | NULL | NULL | 3 | 200 | | NULL | NULL | NULL | 4 | 400 | + ------ + ------- + ------- + ------ + ------- + 4 ряда в наборе (0,00 сек)
Иллюстрированная презентация
MySQL RIGHT JOIN с предложением USING
В следующем примере предложение USING использовалось с RIGHT JOIN. Предложение USING (column_list) называет список столбцов, которые должны существовать в обеих таблицах.
Код:
SELECT table113.id,table113.cval1,
table111.id,table111.aval1
FROM table113
RIGHT OUTER JOIN table111
USING(id);
Пример вывода:
+ ------ + ------- + ------ + ------- + | id | cval1 | id | aval1 | + ------ + ------- + ------ + ------- + | 1 | 16 | 1 | 405 | | 2 | 12 | 2 | 401 | | 3 | 17 | 3 | 200 | | NULL | NULL | 4 | 400 | + ------ + ------- + ------ + ------- + 4 ряда в наборе (1,00 с)
Ключевые моменты для запоминания
Нажмите на следующее, чтобы получить презентацию слайдов -
ПРАВИЛЬНОЕ СОЕДИНЕНИЕ: SQL и другие реляционные базы данных
Предыдущая: ЛЕВАЯ РЕЙТИНГ
Далее: STRAIGHT_JOIN
Новый контент: Composer: менеджер зависимостей для PHP , R программирования