RIGHT JOIN. Внутреннее правое объединение таблиц в MySQL

Команда RIGHT JOIN

RIGHT JOIN возвращает все записи из правой (второй) таблицы и записи из левой (первой) таблицы, в которых были найдены совпадения.

RIGHT JOIN in mysql
Диаграмма объединения данных из таблиц через RIGHT JOIN

Синтаксис RIGHT JOIN

mysql> SELECT column1, column2, ... , columnN
    -> FROM table1
    -> RIGHT JOIN table2 ON table1.column = table2.column;

Пример использования RIGHT JOIN

 Возьмём две таблицы из базы данных книжного интернет-магазина employees (список работников - правая таблица) и orders (список заказов клиентов - левая таблица).

Выведем данные из представленных таблиц. Вы можете увидеть, что значения из колонки employees_id в таблице orders полностью совпадают c колонкой id в таблице employees. Это значит, что мы можем вместо идентификатора подставить имя и должность работника. Однако работники с id 1, 4 и 5 не обработали еще ни один заказ поэтому не отображаются в таблице.

mysql> SELECT id, first_name, last_name, position
    -> FROM employees;
+----+------------+-----------+------------------+
| id | first_name | last_name | position         |
+----+------------+-----------+------------------+
|  1 | Абросим    | Сумароков | Ген. Директор    |
|  2 | Александр  | Суматохин | Старший продавец |
|  3 | Петр       | Стропин   | Продавец         |
|  4 | Фёдор      | Телецкий  | Кладовщик        |
|  5 | Аркадий    | Прошин    | Продавец         |
+----+------------+-----------+------------------+
5 rows in set (0.00 sec)

mysql> SELECT id, customer_id, employee_id, status
    -> FROM orders;
+----+-------------+-------------+------------------+
| id | customer_id | employee_id | status           |
+----+-------------+-------------+------------------+
|  3 |           1 |           3 | Готов к отправке |
|  6 |           3 |           2 | Готов к отправке |
|  7 |           5 |           2 | Завершен         |
|  9 |           3 |           3 | Обрабатывается   |
| 10 |           5 |           3 | Готов к отправке |
+----+-------------+-------------+------------------+
5 rows in set (0.00 sec)

Теперь посмотрим кто из работников обрабатывал какие либо заказы, объединив таблицы employees и orders с помощью команды RIGHT JOIN. Так как работники с id 1, 4 и 5 заказы не обрабатывали, то для них выведется пустой результат (null).

mysql> SELECT orders.id, employees.first_name, employees.last_name, employees.position, orders.status
    -> FROM orders
    -> RIGHT JOIN employees ON orders.employee_id = employees.id;
+------+-------------+------------+-------------------+-------------------+
| id   | first_name  | last_name  | position          | status            |
+------+-------------+------------+-------------------+-------------------+
| NULL | Фёдор       | Телецкий   | Кладовщик         | NULL              |
| NULL | Абросим     | Сумароков  | Ген. Директор     | NULL              |
| NULL | Аркадий     | Прошин     | Продавец          | NULL              |
|    3 | Петр        | Стропин    | Продавец          | Готов к отправке  |
|    6 | Александр   | Суматохин  | Старший продавец  | Готов к отправке  |
|    7 | Александр   | Суматохин  | Старший продавец  | Завершен          |
|    9 | Петр        | Стропин    | Продавец          | Обрабатывается    |
+------+-------------+------------+-------------------+-------------------+
7 rows in set (0.00 sec)