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: задаёт условие соединения, обычно общее поле двух таблиц.

SQL RIGHT JOIN

Особенности

  • Сохранить все записи из правой таблицы: Даже если в левой таблице нет совпадающих записей, все записи из правой таблицы будут включены в результат.
  • Заполнить столбцы левой таблицы при отсутствии совпадения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 как правую таблицу:

Пример

SELECT websites.name, access_log.count, access_log.date FROM websites RIGHT JOIN access_log ON access_log.site_id=websites.id ORDER BY access_log.count DESC;

Выполнение приведённой выше инструкции SQL выводит следующий результат:

Примечание:Ключевое слово RIGHT JOIN возвращает все строки из правой таблицы (access_log), даже если в левой таблице (Websites) нет совпадений.


Другие расширения