Запрос LEFT JOIN возвращает все записи из левой таблицы, даже в том случае, если у них нет совпадений в правой. Это означает, что даже если у нас не будет совпадений в левой таблице, мы получим запись в которая будет содержать колонки со значением NULL.
Запрос с использованием LEFT JOIN имеет следующий вид:
SELECT таблица1.колонка1, таблица2.колонка2...
FROM таблица1
LEFT JOIN таблицы2
ON таблицы1.общее_поле = таблица2.общее_поле;
Пример:
Предположим, что у нас есть две таблицы:
developers:
+----+-------------------+------------+------------+--------+
| ID | NAME | SPECIALTY | EXPERIENCE | SALARY |
+----+-------------------+------------+------------+--------+
| 1 | Eugene Suleimanov | Java | 2 | 2500 |
| 2 | Peter Romanenko | Java | 3 | 3500 |
| 3 | Andrei Komarov | JavaScript | 3 | 2500 |
| 4 | Konstantin Geiko | C# | 2 | 2000 |
| 5 | Asya Suleimanova | UI/UX | 2 | 1800 |
| 6 | Kolya Nikolaev | Javascript | 5 | 3400 |
| 7 | Ivan Ivanov | C# | 1 | 900 |
| 8 | Ludmila Geiko | UI/UX | 2 | 1800 |
+----+-------------------+------------+------------+--------+
tasks:
+---------+-------------+------------------+------------+--------------+
| TASK_ID | TASK_NAME | DESCRIPTION | DEADLINE | DEVELOPER_ID |
+---------+-------------+------------------+------------+--------------+
| 1 | Bug#123 | Fix company list | 2016-06-03 | 1 |
| 2 | Bug#321 | Fix registration | 2016-06-06 | 2 |
| 3 | Feature#777 | Latest actions | 2016-06-25 | 3 |
+---------+-------------+------------------+------------+--------------+
Попробуем выполнить следующий запрос:
mysql> SELECT ID, NAME, TASK_NAME, DEADLINE
FROM developers
LEFT JOIN tasks
ON developers.ID = tasks.DEVELOPER_ID;
В результате мы получим следующую таблицу:
+----+-------------------+-------------+------------+
| ID | NAME | TASK_NAME | DEADLINE |
+----+-------------------+-------------+------------+
| 1 | Eugene Suleimanov | Bug#123 | 2016-06-03 |
| 2 | Peter Romanenko | Bug#321 | 2016-06-06 |
| 3 | Andrei Komarov | Feature#777 | 2016-06-25 |
| 4 | Konstantin Geiko | NULL | NULL |
| 5 | Asya Suleimanova | NULL | NULL |
| 6 | Kolya Nikolaev | NULL | NULL |
| 7 | Ivan Ivanov | NULL | NULL |
| 8 | Ludmila Geiko | NULL | NULL |
+----+-------------------+-------------+------------+
Как мы видим, мы получили все записи из таблицы developers, а поля второй таблицы для записей, у которых нет совпадений в таблице tasks, имеют значение NULL.
На этом мы заканчиваем изучение LEFT JOIN.