RIGHT JOIN в SQL

Оператор RIGHT JOIN — это противоположность LEFT JOIN. Он возвращает строки из левой и правой таблиц, для которых выполняется условие объединения. Вот, как это выглядит на диаграмме Венна.

RIGHT JOIN — это тип внешнего объединения, поэтому его также называют LEFT OUTER JOIN. Другие разновидности внешнего объединения —  LEFT JOINи FULL JOIN.

Примечание. При внешнем объединении в результате в любом случае будут какие-то строки, даже если между строками в двух объединяемых таблицах нет соответствия.

Давайте рассмотрим, как работает RIGHT JOIN на примере. У нас есть две таблицы сотрудников employees и отделов departments

Таблица employees

Таблица departments

+--------+--------------+------------+---------+
| emp_id | emp_name     | hire_date  | dept_id |
+--------+--------------+------------+---------+
|      1 | Ethan Hunt   | 2001-05-01 |       4 |
|      2 | Tony Montana | 2002-07-15 |       1 |
|      3 | Sarah Connor | 2005-10-18 |       5 |
|      4 | Rick Deckard | 2007-01-03 |       3 |
|      5 | Martin Blank | 2008-06-24 |    NULL |
+--------+--------------+------------+---------+
+---------+------------------+
| dept_id | dept_name        |
+---------+------------------+
|       1 | Administration   |
|       2 | Customer Service |
|       3 | Finance          |
|       4 | Human Resources  |
|       5 | Sales            |
+---------+------------------+

Допустим, нам нужно получить названия всех отделов и данные всех сотрудников, работающих в определенном отделе. Однако в реальной ситуации может быть такой отдел, в котором в настоящее время не работает ни один из сотрудников. Давайте найдем его.

Следующий оператор извлекает все доступные отделы, а также id, имя, дату приема на работу сотрудников, принадлежащих к этому отделу, путем объединения таблиц employees и departments по общему полю dept_id.

SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name
FROM employees AS t1 RIGHT JOIN departments AS t2
ON t1.dept_id = t2.dept_id ORDER BY dept_name;

Примечание. Левой считается та таблица, которая стоит слева от оператор JOIN, а правая — та, которая находится справа от него.

После выполнения приведенной выше команды вы получите такой результат:

+--------+--------------+------------+------------------+
| emp_id | emp_name     | hire_date  | dept_name        |
+--------+--------------+------------+------------------+
|      2 | Tony Montana | 2002-07-15 | Administration   |
|   NULL | NULL         | NULL       | Customer Service |
|      4 | Rick Deckard | 2007-01-03 | Finance          |
|      1 | Ethan Hunt   | 2001-05-01 | Human Resources  |
|      3 | Sarah Connor | 2005-10-18 | Sales            |
+--------+--------------+------------+------------------+

RIGHT JOIN включает все строки из таблицы departments в набор результатов, независимо от того, есть ли совпадение по столбцу dept_id в таблице employees, как вы можете видеть, отдел "Customer Service" включен, даже если в этом отделе нет ни одного сотрудника.

Примечание. Если есть строка в правой таблице, но нет совпадения в левой таблице, то связанная строка результата содержит значения NULL для всех столбцов, поступающих из левой таблицы.

codechick

СodeСhick.io - простой и эффективный способ изучения программирования.

2024 ©