Запрос RIGHT JOIN возвращает все записи из правой таблицы, даже если у них нет совпадений в левой. Это означает, что если у нас нет совпадений в левой таблице, то мы получим все записи из правой, а колонки из левой таблицы будут иметь значения NULL.
SQL запрос с использованием RIGHT JOIN имеет следующий вид:
SELECT таблица1.колонка1, таблица2.колонка2...
FROM таблица1
RIGHT JOIN таблицы2
ON таблицы1.общее_поле = таблица2.общее_поле;
Пример:
Предположим, что у нас есть две таблицы:
developers:
+----+-------------------+------------+------------+--------+
| ID | NAME | SPECIALTY | EXPERIENCE | SALARY |
+----+-------------------+------------+------------+--------+
| 1 | Eugene Suleimanov | Java | 2 | 2500 |
| 2 | Peter Romanenko | Java | 3 | 3500 |
| 3 | Andrei Komarov | JavaScript | 3 | 2500 |
| 4 | Konstantin Geiko | C# | 2 | 2000 |
| 5 | Asya Suleimanova | UI/UX | 2 | 1800 |
| 6 | Kolya Nikolaev | Javascript | 5 | 3400 |
| 7 | Ivan Ivanov | C# | 1 | 900 |
| 8 | Ludmila Geiko | UI/UX | 2 | 1800 |
+----+-------------------+------------+------------+--------+
tasks:
+---------+-------------+------------------+------------+--------------+
| TASK_ID | TASK_NAME | DESCRIPTION | DEADLINE | DEVELOPER_ID |
+---------+-------------+------------------+------------+--------------+
| 1 | Bug#123 | Fix company list | 2016-06-03 | 1 |
| 2 | Bug#321 | Fix registration | 2016-06-06 | 2 |
| 3 | Feature#777 | Latest actions | 2016-06-25 | 3 |
| 4 | Feature#3 | Super feature | 2016-06-15 | 9 |
+---------+-------------+------------------+------------+--------------+
Попробуем выполнить следующий запрос:
mysql> SELECT ID, NAME, TASK_NAME, DEADLINE
FROM developers
RIGHT JOIN tasks
ON developers.ID = tasks.DEVELOPER_ID;
В результате мы получим следующую таблицу:
+------+-------------------+-------------+------------+
| ID | NAME | TASK_NAME | DEADLINE |
+------+-------------------+-------------+------------+
| 1 | Eugene Suleimanov | Bug#123 | 2016-06-03 |
| 2 | Peter Romanenko | Bug#321 | 2016-06-06 |
| 3 | Andrei Komarov | Feature#777 | 2016-06-25 |
| NULL | NULL | Feature#3 | 2016-06-15 |
+------+-------------------+-------------+------------+
Как видите, мы получили все задачи из таблицы tasks, а поля ID и NAME записи, у которой нет совпадений в таблице developers имеют значение NULL.
На этом мы заканчиваем изучение RIGHT JOIN.