MySQL LEFT JOIN
Что такое LEFT JOIN в MySQL?
MySQL LEFT JOIN объединяет две таблицы и выбирает строки на основе условия, которое совпадает в обеих таблицах, и несопоставленные строки также будут доступны из таблицы, написанной до предложения JOIN.
Иллюстрированная презентация MySQL LEFT JOIN:
MySQL LEFT JOIN Синтаксис:
MySQL поддерживает следующие синтаксисы JOIN для table_references (ссылка на таблицу также известна как выражение соединения.) Часть операторов SELECT и операторов UPDATE и DELETE для нескольких таблиц:
table_references: escaped_table_reference [, escaped_table_reference] ... escaped_table_reference: табличная_ссылка | {OJ table_reference} табличная_ссылка: table_factor | join_table table_factor: tbl_name [PARTITION (имя_раздела)] [[AS] псевдоним] [index_hint_list] | table_subquery [AS] псевдоним | (table_references) join_table: table_reference [INNER | CROSS] JOIN table_factor [join_condition] | table_reference STRAIGHT_JOIN table_factor | table_reference STRAIGHT_JOIN table_factor ON conditional_expr | table_reference { LEFT | RIGHT} [ OUTER ] JOIN table_reference join_condition | table_reference NATURAL [{LEFT | RIGHT} [OUTER]] JOIN table_factor join_condition: ON conditional_expr | ИСПОЛЬЗОВАНИЕ (column_list) index_hint_list: index_hint [, index_hint] ... index_hint: USE {INDEX | KEY} [FOR {JOIN | ORDER BY | GROUP BY}] ([index_list]) | IGNORE {INDEX | KEY} [FOR {JOIN | ORDER BY | GROUP BY}] (index_list) | СИЛА {ИНДЕКС | КЛЮЧ} [FOR {JOIN | ORDER BY | GROUP BY}] (index_list) index_list: index_name [, index_name] ...
Предположим: 1st_table LEFT JOIN 2nd_table СОЕДИНЕНИЕ
В MySQL LEFT JOIN таблица 2nd_table зависит от таблицы 1st_table и всех таблиц, от которых зависит 1st_table, а также от таблицы 1st_table зависит от всех таблиц, которые используются в условии LEFT JOIN, кроме 2nd_table. Условие LEFT JOIN используется, чтобы решить, как извлечь строки из таблицы 2nd_table.
Если в 1st_table есть строка, соответствующая предложению WHERE, но в 2nd_table нет строки, соответствующей условию ON, генерируется дополнительная строка 2nd_table, в которой для всех столбцов установлено значение NULL.
Так, в случае LEFT JOIN или LEFT OUTER JOIN, MySQL -
1. берет все выбранные значения из левой таблицы
2. объединяет их с именами столбцов (указанными в условии) из правой таблицы
3. получить соответствующие строки из обеих связанных таблиц.
4. устанавливает значение каждого столбца из правой таблицы в NULL, что не соответствует левой таблице.
Пример: MySQL LEFT JOIN
ЛЕВОЕ СОЕДИНЕНИЕ сохранит записи «левой» таблицы. MySQL начинается с левой таблицы. Для каждой строки из псевдонима bk1 MySQL сканирует таблицу, определяет, выполнено ли условие и возвращает имя книги. Для несопоставленной строки возвращается ноль. Каждый элемент в левой таблице будет показан в результате MySQL, даже если в другой таблице нет совпадений.
В этом примере таблица book_mast имеет псевдонимы bk1 и bk2. INNER JOIN, выполняемый в операторе, проверяет, меньше ли book_price в bk1, чем book_price в bk2, и является ли язык книги в bk2 немецким; если так, то оператор возвращает book_name, isbn_no, book_price, pub_lang из bk1.
Обратите внимание, что этот пример создает две виртуальные таблицы из book_mast и выполняет JOIN между ними.
Код:
SELECT bk1.book_name,bk1.isbn_no,bk1.book_price,bk1.pub_lang
FROM book_mast bk1
LEFT JOIN book_mast bk2 ON bk1.book_price<bk2.book_price
WHERE bk2.pub_lang='German';
Пример таблицы: book_mast :
Пример вывода:
mysql> SELECT bk1.book_name, bk1.isbn_no, bk1.book_price, bk1.pub_lang -> ОТ book_mast bk1 -> ЛЕВОЕ СОЕДИНЕНИЕ book_mast bk2 ON bk1.book_price <bk2.book_price -> ГДЕ bk2.pub_lang = 'Немецкий'; + ------------------------------------- + ----------- - + ------------ + ---------- + | book_name | isbn_no | book_price | pub_lang | + ------------------------------------- + ----------- - + ------------ + ---------- + | Введение в электродинамику | 0000979001 | 85,00 | Английский | | Понимание стальных конструкций | 0000979002 | 105,50 | Английский | | Продвинутая 3d графика | 0000979007 | 56,00 | Хинди | | Анатомия человека | 0000979008 | 50,50 | Немецкий | | Экспериментальный анализ кошек | 0000979011 | 95,00 | Французский | | Природа Мира | 0000979012 | 88,00 | Английский | | Окружающая среда - устойчивое будущее | 0000979013 | 100,00 | Немецкий | | Сети и Телекоммуникации | 00009790_16 | 45,00 | Французский | | Сети и Телекоммуникации | 00009790_16 | 45,00 | Французский | | Введение в электродинамику | 0000979001 | 85,00 | Английский | | Продвинутая 3d графика | 0000979007 | 56,00 | Хинди | | Анатомия человека | 0000979008 | 50,50 | Немецкий | | Экспериментальный анализ кошек | 0000979011 | 95,00 | Французский | | Природа Мира | 0000979012 | 88,00 | Английский | | Сети и Телекоммуникации | 00009790_16 | 45,00 | Французский | + ------------------------------------- + ----------- - + ------------ + ---------- + 15 рядов в наборе (0,00 сек)
PHP скрипт
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>example-left-join php mysql examples | w3resource</title>
<meta name="description" content="example-left-join php mysql examples | w3resource">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-12">
<h2>The most costly book in book_mast table is:</h2>
<table class='table table-bordered'>
<tr>
<th>Name of the book</th><th>ISBN no</th><th>Price of the book</th><th>Language of the book</th>
</tr>
<?php
$hostname="your_hostname";
$username="your_username";
$password="your_password";
$db = "your_dbname";
$dbh = new PDO("mysql:host=$hostname;dbname=$db", $username, $password);
foreach($dbh->query('SELECT bk1.book_name,bk1.isbn_no,bk1.book_price,bk1.pub_lang
FROM book_mast bk1
LEFT JOIN book_mast bk2 ON bk1.book_price<bk2.book_price
WHERE bk2.pub_lang="German"') as $row) {
echo "<tr>";
echo "<td>" . $row['book_name'] . "</td>";
echo "<td>" . $row['isbn_no'] . "</td>";
echo "<td>" . $row['book_price'] . "</td>";
echo "<td>" . $row['pub_lang'] . "</td>";
echo "</tr>";
}
?>
</tbody></table>
</div>
</div>
</div>
</body>
</html>
Ключевые моменты для запоминания
Нажмите на следующее, чтобы получить презентацию слайдов -
LEFT JOIN: SQL и другие реляционные базы данных
Предыдущая: ВНУТРЕННЯЯ РЕШЕНИЕ
Далее: ПРАВИЛЬНОЕ СОЕДИНЕНИЕ
Новый контент: Composer: менеджер зависимостей для PHP , R программирования