English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SQL LEFT JOIN предложение

В этом руководстве вы узнаете, как использовать SQL левое соединение для извлечения данных из двух таблиц.

Использование левого соединения

Одно LEFT JOIN предложение возвращает все строки из левой таблицы и строки из правой таблицы, которые соответствуют условиям соединения. Левое соединение являетсяодним из видов внешних соединенийи поэтому также называетсяleft outer join.Другие вариации внешних соединений включаютПравое соединениеиПолное соединение.

Ниже приведена венецианская карта, показывающая, как работает левое соединение.

Внимание:Внешний соединение - это соединение, которое включает строки в результирующем наборе, даже если строки в таблицах, которые нужно соединить, могут не соответствовать.

Чтобы清楚地 понять это, давайте посмотрим на следующее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 | Управление   |
|       2 | Клиентская служба |
|       3 | Финансы          |
|       4 | Human Resources  |
|       5 | Sales            |
+---------+------------------+
Таблицы: employees
Таблицы: departments

Теперь, предположим, что вы хотите retrieve все ID сотрудников, имена и даты найма, а также названия их отделов, независимо от того, распределены ли они в какой-либо отдел. Для получения такого типа набора результатов нам нужно применить левое объединение.

volgende Anweisung wird durch Verwendung eines gemeinsamen Feldesсотрудники(employees) иdepartments(отделы) таблицы объединяются для получения идентификатора сотрудника, имени, даты найма и названия отделаdept_id. Это также включает сотрудников, не распределенных в отделы.

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

Подсказка:В запросах на объединение слева от JOIN находится таблица, которая появляется слева в подзадаче JOIN, а справа от JOIN - таблица, которая появляется справа в подзадаче JOIN.

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

+--------+--------------+------------+-----------------+
| emp_id | emp_name     | hire_date  | dept_name       |
+--------+--------------+------------+-----------------+
|      1 | Ethan Hunt   | 2001-05-01 | Человеческие ресурсы |
|      2 | Tony Montana | 2002-07-15 | Управление       |
|      3 | Sarah Connor | 2005-10-18 | Sales           |
|      4 | Rick Deckard | 2007-01-03 | Finance         |
|      5 | Martin Blank | 2008-06-24 | NULL            |
+--------+--------------+------------+-----------------+

Как вы можете清楚地 видеть, левое объединение включаетработникив таблице (employees) все строки в результирующем наборе, независимо от тогоdepartmentsв таблицеdept_idСоответствие столбцов.

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