SQL RIGHT JOINКлючевые слова
RIGHT JOIN — это ключевое слово соединения в SQL, используемое для извлечения данных из нескольких таблиц.
Аналогично LEFT JOIN, но его поведение противоположно: RIGHT JOIN возвращает все записи из правой таблицы, даже если в левой таблице нет совпадающих записей.
Ключевое слово RIGHT JOIN возвращает все строки из правой таблицы (table2), даже если в левой таблице (table1) нет совпадений. Если в левой таблице нет совпадений, результат — NULL.
Синтаксис SQL RIGHT JOIN
SELECT column_name(s) FROM table1 RIGHT JOIN table2 ON table1.column_name=table2.column_name;
Или:
SELECT column_name(s) FROM table1 RIGHT OUTER JOIN table2 ON table1.column_name=table2.column_name;
Примечание:В некоторых базах данных RIGHT JOIN называется RIGHT OUTER JOIN.
- table1: левая таблица.
- table2: правая таблица,
RIGHT JOINвсе записи из этой таблицы будут сохранены. - ON table1.column_name=table2.column_name: задаёт условие соединения, обычно общее поле двух таблиц.

Особенности
- Сохранить все записи из правой таблицы: Даже если в левой таблице нет совпадающих записей, все записи из правой таблицы будут включены в результат.
- Заполнить столбцы левой таблицы при отсутствии совпадения
NULL: Если в левой таблице нет соответствующей записи, используйтеNULLдля заполнения столбцов левой таблицы.
Предположим, есть две таблицы:EmployeesиDepartments。
Таблица Employees:
| EmployeeID | Name | DepartmentID |
|---|---|---|
| 1 | Алиса | 10 |
| 2 | Боб | 20 |
| 3 | Чарли | NULL |
Таблица Departments:
| DepartmentID | DepartmentName |
|---|---|
| 10 | HR |
| 20 | ИТ |
| 30 | Финансы |
Запрос с использованием RIGHT JOIN
SELECT Employees.Name, Departments.DepartmentName FROM Employees RIGHT JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;
Результат выполнения запроса:
| Name | DepartmentName |
|---|---|
| Алиса | HR |
| Боб | ИТ |
| NULL | Финансы |
Объяснение:RIGHT JOINВозвращеноDepartmentsвсе записи в таблице. ДляDepartmentID = 30записей, так какEmployeesв таблице нет соответствующих данных, еёNameстолбец равенNULL。
иLEFT JOINРазличия
LEFT JOIN: возвращает все записи из левой таблицы, даже если нет совпадений в правой таблице.RIGHT JOIN: возвращает все записи из правой таблицы, даже если нет совпадений в левой таблице.
Демонстрационная база данных
В этом руководстве мы будем использовать образец базы данных EXAMPLE.
Прежде чем продолжить, сначала добавьте запись в таблицу access_log, для которой нет соответствующих данных в таблице Websites:
INSERT INTO `access_log` (`aid`, `site_id`, `count`, `date`) VALUES ('10', '6', '111', '2016-03-09');
Ниже приведены данные, выбранные из таблицы "Websites":
+----+--------------+---------------------------+-------+---------+ | id | name | url | alexa | country | +----+--------------+---------------------------+-------+---------+ | 1 | Google | https://www.google.cm/ | 1 | USA | | 2 | 淘宝 | https://www.taobao.com/ | 13 | CN | | 3 | Example | http://www.example.com/ | 4689 | CN | | 4 | 微博 | http://weibo.com/ | 20 | CN | | 5 | Facebook | https://www.facebook.com/ | 3 | USA | | 7 | stackoverflow | http://stackoverflow.com/ | 0 | IND | +----+---------------+---------------------------+-------+---------+
Ниже приведены данные из таблицы "access_log" журнала доступа веб-сайта:
mysql> SELECT * FROM access_log; +-----+---------+-------+------------+ | aid | site_id | count | date | +-----+---------+-------+------------+ | 1 | 1 | 45 | 2016-05-10 | | 2 | 3 | 100 | 2016-05-13 | | 3 | 1 | 230 | 2016-05-14 | | 4 | 2 | 10 | 2016-05-14 | | 5 | 5 | 205 | 2016-05-14 | | 6 | 4 | 13 | 2016-05-15 | | 7 | 3 | 220 | 2016-05-15 | | 8 | 5 | 545 | 2016-05-16 | | 9 | 3 | 201 | 2016-05-17 | | 10 | 6 | 111 | 2016-03-19 | +-----+---------+-------+------------+ 9 rows in set (0.00 sec)
Пример SQL RIGHT JOIN
Следующая инструкция SQL вернёт записи о доступе к веб-сайту.
В следующем примере мы используем Websites как левую таблицу и access_log как правую таблицу:
Пример
Выполнение приведённой выше инструкции SQL выводит следующий результат:
Примечание:Ключевое слово RIGHT JOIN возвращает все строки из правой таблицы (access_log), даже если в левой таблице (Websites) нет совпадений.
Другие расширения