Оператор MySQL LEFT JOIN

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

Введение в LEFT JOIN MySQL

Оператор MySQL LEFT JOIN позволяет запрашивать данные из двух или более таблиц базы данных. Он является необязательной частью оператора SELECT, которая указывается после FROM.

Предположим, что вы собираетесь запрашивать данные из таблиц t1 и t2. На примере приведенного ниже запроса мы проиллюстрируем синтаксис LEFT JOIN, объединяя две таблицы:

SELECT
t1.c1, t1.c2, t2.c1, t2.c2
FROM
t1
LEFT JOIN
t2 ON t1.c1 = t2.c1;

Когда вы подключаетесь к таблицам t1 и t2, используя оператор LEFT JOIN, если строка из левой таблицы t1 соответствует строке из правой таблицы t2 на основе условия соединения (t1.c1 = t2.c1), эта строка будет включена в результирующий набор.

Если значение в левой таблице не соответствует значению в правой таблице, строка в левой таблице также выбирается и объединяется с «условной» строкой из правой таблицы. «Условная» строка содержит NULL для всех соответствующих столбцов в операторе SELECT.

Другими словами, условие MySQL LEFT JOIN позволяет выбирать строки обеих таблиц, которые совпадают, плюс все строки из левой таблицы (t1) даже без совпадения со строками правой таблицы (t2).

Следующая диаграмма поможет представить, как работает условие LEFT JOIN. Пересечение двух кругов — это строки, которые соответствуют в обеих таблицах, а оставшаяся часть левого круга — это строки в таблице t1, которые не имеют соответствующей строки в таблице t2. Следовательно, все строки в левой таблице включены в результирующий набор.

Оператор MySQL LEFT JOIN

Обратите внимание, что возвращаемые значения также должны соответствовать условиям в операторах WHERE и HAVING, если эти операторы доступны в запросе.

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

Использование оператора MySQL LEFT JOIN для объединения двух таблиц

Возьмем две таблицы клиентов и заказов из демонстрационной базы данных:

Оператор MySQL LEFT JOIN

В базе данных, описанной на диаграмме:

  • Каждый заказ в таблице заказов должен принадлежать клиенту в таблице клиентов;
  • Каждый клиент в таблице клиентов может иметь ноль или более заказов в таблице заказов.

Чтобы найти заказы, принадлежащие каждому клиенту, можно использовать MySQL LEFT JOIN пример:

SELECT
c.customerNumber,
c.customerName,
orderNumber,
o.status
FROM
customers c
LEFT JOIN orders o ON c.customerNumber = o.customerNumber

Посмотреть пример

Оператор MySQL LEFT JOIN

Левая таблица — это клиенты, поэтому все клиенты включены в результирующий набор. Но в нем есть строки, которые имеют данные клиента, но не имеют данных заказа, например. 168, 169 и т. д. Данные заказов в этих строках равны NULL. Это означает, что у этих клиентов нет заказов в соответствующей таблице.

Поскольку мы использовали одно и то же имя столбца (orderNumber) для объединения двух таблиц, можно сделать запрос короче, используя приведенный ниже синтаксис:

SELECT
c.customerNumber,
customerName,
orderNumber,
status
FROM
customers c
LEFT JOIN orders USING (customerNumber);

Если вы замените оператор MySQL SELECT LEFT JOIN оператором INNER JOIN, вы получите только клиентов, которые оформили хотя бы один заказ.

Использование оператора MySQL LEFT JOIN для поиска несовпадающих строк

Оператор LEFT JOIN может оказаться полезен, если вы хотите найти строки в левой таблице, которые не соответствуют строкам в правой. Чтобы найти несовпадающие строки двух таблиц, нужно добавить оператор WHERE в выборку SELECT для запроса только строк, значения столбцов которых в правой таблице содержат значение NULL.

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

SELECT
c.customerNumber,
c.customerName,
orderNumber,
o.status
FROM
customers c
LEFT JOIN
orders o ON c.customerNumber = o.customerNumber
WHERE
orderNumber IS NULL;

Посмотреть пример

Оператор MySQL LEFT JOIN

Условие в операторе WHERE или условие в операторе ON

Рассмотрим следующий пример использования MySQL LEFT JOIN WHERE:

SELECT
o.orderNumber,
customerNumber,
productCode
FROM
orders o
LEFT JOIN
orderDetails USING (orderNumber)
WHERE
orderNumber = 10123;

В этом примере мы использовали оператор LEFT JOIN для запроса данных из таблиц orders и orderDetails. Запрос возвращает заказ и его данные, если они есть, для заказа 10123.

Оператор MySQL LEFT JOIN

Но если вы переместите условие из оператора WHERE в ON:

SELECT
o.orderNumber,
customerNumber,
productCode
FROM
orders o
LEFT JOIN
orderDetails d ON o.orderNumber = d.orderNumber
AND o.orderNumber = 10123;

то получите другое значение.

В этом случае запрос возвращает все заказы. Но только заказ 10123 будет иметь связанные с ним данные, как показано ниже:

Оператор MySQL LEFT JOIN

Обратите внимание, что для оператора INNER JOIN условие в ON эквивалентно условию в операторе WHERE.

В этой статье мы рассказали об операторе MySQL LEFT JOIN и показали, как применять его для запроса данных из нескольких таблиц базы данных.

Перевод статьи «MySQL LEFT JOIN» дружной командой проекта Сайтостроение от А до Я.

О нас seoexpert

продвижение сайта,seo оптимизация,поисковое продвижение,раскрутка сайтов,поисковая оптимизация,продвижение сайта в гугл,seo раскрутка,продвижение сайтов в яндексе,продвижение сайта в google,продвижение сайтов в топ 10,Оптимизация и продвижение сайтов,услуги продвижения сайта,заказать продвижение,продвижение сайтов в топ,сео раскрутка сайта

Смотрите также

Использование простой базы данных SQLite в Android-приложении

В этом руководстве я подробно расскажу о том, как использовать базу данных Android SQLite. Что ...