LEFT JOIN, как и другие виды JOIN-ов, позволяет объединить две или более таблицы на основе значения в указанных столбцах. При этом, данные из таблицы, которая "прикрепляется" (так называемая "правая" таблица), могут быть присоединены к выборке, даже если соответствующее значение в "левой" таблице уже есть.
Чтобы взять значение из столбца "прикрепляемой" таблицы только в том случае, если соответствующее значение в "родительской" таблице отсутствует, нужно использовать конструкцию IS NULL или IS NOT NULL.
Предположим, у нас есть две таблицы:
Таблица "users": +---------+----------+ | user_id | username | +---------+----------+ | 1 | John | | 2 | Jane | | 3 | Bob | +---------+----------+ Таблица "orders": +---------+------------+------------+ | order_id| user_id | product | +---------+------------+------------+ | 1 | 1 | Phone | | 2 | 2 | Laptop | | 3 | 4 | Tablet | +---------+------------+------------+
Мы хотим объединить таблицы "users" и "orders", чтобы получить все заказы, а также имена пользователей, при этом включая заказы, у которых нет соответствующих пользователей.
Для этого мы можем использовать следующий SQL-запрос с LEFT JOIN:
SELECT orders.order_id, users.username, orders.product FROM orders LEFT JOIN users ON orders.user_id = users.user_id
Результат запроса:
+---------+----------+------------+ | order_id| username | product | +---------+----------+------------+ | 1 | John | Phone | | 2 | Jane | Laptop | | 3 | NULL | Tablet | +---------+----------+------------+
В данном случае, заказ с order_id = 3 содержит user_id, которого нет в таблице "users". Поэтому, значение username для этого заказа равно NULL.
Чтобы включить только такие заказы, у которых значение user_id отсутствует в таблице "users", мы можем добавить условие IS NULL к выборке:
SELECT orders.order_id, users.username, orders.product FROM orders LEFT JOIN users ON orders.user_id = users.user_id WHERE users.username IS NULL
Результат запроса:
+---------+----------+------------+ | order_id| username | product | +---------+----------+------------+ | 3 | NULL | Tablet | +---------+----------+------------+
Таким образом, мы получили только заказы, у которых значение user_id не имеет соответствующего значения в таблице "users", и значение username равно NULL.