Команда RIGHT JOIN
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)