SQL LEFT JOINКлючевые слова
LEFT JOIN — это ключевое слово соединения в SQL, используемое для извлечения данных из нескольких таблиц.
Разница между LEFT JOIN и INNER JOIN заключается в том, что LEFT JOIN возвращает все записи из левой таблицы, даже если в правой таблице нет соответствующих записей.
Ключевое слово LEFT JOIN возвращает все строки из левой таблицы (table1), даже если в правой таблице (table2) нет совпадений. Если в правой таблице нет совпадения, результат — NULL.
Синтаксис SQL LEFT JOIN
SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1.column_name=table2.column_name;
Или:
SELECT column_name(s) FROM table1 LEFT OUTER JOIN table2 ON table1.column_name=table2.column_name;
Примечание:В некоторых базах данных LEFT JOIN называется LEFT OUTER JOIN.
- table1: левая таблица (главная таблица),
LEFT JOINвсе записи этой таблицы будут сохранены. - table2: правая таблица (вторичная таблица), если нет совпадающих данных, используйте
NULLдля заполнения соответствующих столбцов. - ON table1.column_name=table2.column_name: укажите условие соединения, обычно общее поле двух таблиц.

Возможности:
- Возвращаетвсе записи левой таблицы, даже если в правой таблице нет совпадающих данных.
- Если в правой таблице нет совпадающей записи, поля правой таблицы для этой строки в результате будут
NULL。
Предположим, есть две таблицы:CustomersиOrders。
Таблица Customers:
| CustomerID | Name |
|---|---|
| 1 | Алиса |
| 2 | Боб |
| 3 | Чарли |
| 4 | Дэвид |
Таблица Orders:
| OrderID | CustomerID | Продукт |
|---|---|---|
| 101 | 1 | Ноутбук |
| 102 | 2 | Смартфон |
Запрос с использованием LEFT JOIN:
SELECT Customers.Name, Orders.Product FROM Customers LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
Результат выполнения запроса:
| Name | Продукт |
|---|---|
| Алиса | Ноутбук |
| Боб | Смартфон |
| Чарли | NULL |
| Дэвид | NULL |
Объяснение:LEFT JOINвозвращённыйCustomersвсе записи в таблице. ДляCharlieиDavid, потому что вOrdersтаблице нет совпаденийCustomerID, их соответствующиеProductстолбец равенNULL。
Демонстрационная база данных
В этом руководстве мы будем использовать образец базы данных EXAMPLE.
Ниже приведены данные, выбранные из таблицы "Websites":
+----+--------------+---------------------------+-------+---------+ | id | name | url | alexa | country | +----+--------------+---------------------------+-------+---------+ | 1 | Google | https://www.google.cm/ | 1 | USA | | 2 | 淘宝 | https://www.taobao.com/ | 13 | CN | | 3 | Example | http://www.example.com/ | 4689 | CN | | 4 | 微博 | http://weibo.com/ | 20 | CN | | 5 | Facebook | https://www.facebook.com/ | 3 | USA | | 7 | stackoverflow | http://stackoverflow.com/ | 0 | IND | +----+---------------+---------------------------+-------+---------+
Ниже приведены данные из таблицы журнала доступа веб-сайта "access_log":
mysql> SELECT * FROM access_log; +-----+---------+-------+------------+ | aid | site_id | count | date | +-----+---------+-------+------------+ | 1 | 1 | 45 | 2016-05-10 | | 2 | 3 | 100 | 2016-05-13 | | 3 | 1 | 230 | 2016-05-14 | | 4 | 2 | 10 | 2016-05-14 | | 5 | 5 | 205 | 2016-05-14 | | 6 | 4 | 13 | 2016-05-15 | | 7 | 3 | 220 | 2016-05-15 | | 8 | 5 | 545 | 2016-05-16 | | 9 | 3 | 201 | 2016-05-17 | +-----+---------+-------+------------+ 9 rows in set (0.00 sec)
Пример SQL LEFT JOIN
Следующий SQL-запрос вернёт все веб-сайты и количество их посещений (если есть).
В следующем примере мы используем Websites как левую таблицу и access_log как правую таблицу:
Пример
FROM Websites
LEFT JOIN access_log
ON Websites.id=access_log.site_id
ORDER BY access_log.count DESC;
После выполнения вышеуказанного SQL результаты вывода выглядят следующим образом:
Примечание:Ключевое слово LEFT JOIN возвращает все строки из левой таблицы (Websites), даже если в правой таблице (access_log) нет совпадений.
Другие расширения