`

LEFT JOIN. Внутреннее левое объединение таблиц в MySQL

Команда LEFT JOIN

LEFT JOIN возвращает все записи из левой (первой) таблицы и записи из правой (второй) таблицы, в которых были найдены совпадения.

Диаграмма выбора данных из таблиц через LEFT JOIN
Диаграмма объединения данных из таблиц через LEFT JOIN

Синтаксис LEFT JOIN

mysql> SELECT column1, column2, ... , columnN
    -> FROM table1
    -> LEFT JOIN table2 ON table1.column = table2.column;

Пример использования LEFT JOIN

Рассмотрим две таблицы orders (таблица заказов) и customers (данные о клиентах) из базы данных для интернет магазина Bookstore.

Выведем данные обеих таблиц. Можно заметить, что таблицы связаны с помощью идентификаторов. В колонке customer_id таблицы orders имеется идентификатор клиента из таблицы customers, по которому можно узнать все данные о покупателе, который сделал заказ. Однако клиенты с id 2 и 4 заказ не делали и не отображаются в  таблице orders.

mysql> SELECT id, first_name, last_name FROM customers;
+----+----------------+----------------+
| id | first_name     | last_name      |
+----+----------------+----------------+
|  1 | Олег           | Пальшин        |
|  2 | Jane           | Doherty        |
|  3 | Евгений        | Серов          |
|  4 | София          | Молина         |
|  5 | John           | Doe            |
+----+----------------+----------------+
5 rows in set (0.00 sec)

mysql> SELECT id, customer_id, employer_id, status FROM orders;
+----+-------------+-------------+------------------+
| id | customer_id | employer_id | status           |
+----+-------------+-------------+------------------+
|  3 |           1 |           3 | Готов к отправке |
|  6 |           3 |           2 | Готов к отправке |
|  7 |           5 |           2 | Завершен         |
|  9 |           3 |           3 | Обрабатывается   |
| 10 |           5 |           3 | Готов к отправке |
+----+-------------+-------------+------------------+
5 rows in set (0.00 sec)

Попробуем выяснить статус заказа для всех имеющихся клиентов в таблице customers, объединив ее с  таблицей orders, с помощью команды LEFT JOIN. Помня о том, что клиенты с id 2 и 4 заказ не делали для них выведется пустой результат (null).

mysql> SELECT orders.id, customers.first_name, customers.last_name, orders.employer_id, orders.status
    -> FROM customers
    -> LEFT JOIN orders ON orders.customer_id = customers.id;
+------+------------+-----------+-------------+------------------+
| id   | first_name | last_name | employer_id | status           |
+------+------------+-----------+-------------+------------------+
| NULL | София      | Молина    |        NULL | NULL             |
| NULL | Jane       | Doherty   |        NULL | NULL             |
|    3 | Олег       | Пальшин   |           3 | Готов к отправке |
|    6 | Евгений    | Серов     |           2 | Готов к отправке |
|    7 | John       | Doe       |           2 | Завершен         |
|    9 | Евгений    | Серов     |           3 | Обрабатывается   |
|   10 | John       | Doe       |           3 | Готов к отправке |
+------+------------+-----------+-------------+------------------+
7 rows in set (0.00 sec