<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Архивы MySQL - mcodex</title>
	<atom:link href="https://mcodex.ru/category/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>https://mcodex.ru/category/mysql/</link>
	<description>Короткие статьи об основных понятиях, терминах и концепциях веб-разработки</description>
	<lastBuildDate>Thu, 25 Dec 2025 18:52:12 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>

<image>
	<url>https://mcodex.ru/wp-content/uploads/2025/11/cropped-favicon_650-32x32.png</url>
	<title>Архивы MySQL - mcodex</title>
	<link>https://mcodex.ru/category/mysql/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Соединение таблиц через JOIN в MySQL</title>
		<link>https://mcodex.ru/joins-in-mysql/</link>
		
		<dc:creator><![CDATA[mcodex]]></dc:creator>
		<pubDate>Thu, 25 Dec 2025 18:50:39 +0000</pubDate>
				<category><![CDATA[MySQL]]></category>
		<guid isPermaLink="false">https://mcodex.ru/?p=56</guid>

					<description><![CDATA[<p>Соединением называется механизм выборки из нескольких таблиц записей, связанных по определенному условию и является одной из самых распространенных задач при работе с базами данных. Соединение таблиц связано с понятием декомпозиции базы данных, поэтому сначала кратко разберемся, что это такое.Декомпозиция &#8212; подход, при котором данные хранятся не в одной общей таблице, а в нескольких, более специфичных ... <a title="Соединение таблиц через JOIN в MySQL" class="read-more" href="https://mcodex.ru/joins-in-mysql/" aria-label="Прочитать больше о Соединение таблиц через JOIN в MySQL">Читать далее</a></p>
<p>Сообщение <a href="https://mcodex.ru/joins-in-mysql/">Соединение таблиц через JOIN в MySQL</a> появились сначала на <a href="https://mcodex.ru">mcodex</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<pre class="wp-block-code"><code>Дисклеймер: Данная статья является кратким изложением базовых концепций и не претендует на максимальный охват темы. </code></pre>



<p>Соединением называется механизм выборки из нескольких таблиц записей, связанных по определенному условию и является одной из самых распространенных задач при работе с базами данных.</p>



<p>Соединение таблиц связано с понятием декомпозиции базы данных, поэтому сначала кратко разберемся, что это такое.<br>Декомпозиция &#8212; подход, при котором данные хранятся не в одной общей таблице, а в нескольких, более специфичных и связываются между собой по определенному полю, называемому внешним ключом. Декомпозиция облегчает поддержку и масштабируемость базы данных, но при ее использовании, что бы вывести полные данные записи, расположенные в разных таблицах, необходимо задействовать соединение.</p>



<p><strong>Пример:</strong><br>База данных новостного сайта.<br>В ней хранятся статьи, у каждой статьи есть автор, категория, комментарии.<br>Технически можно хранить все в одной общей таблице, но по мере увеличения количества записей какой-либо из сущностей, такую таблицу очень быстро станет сложно поддерживать.<br><br><strong>Пояснение: </strong><br>Например, что бы переименовать категорию, нужно пройти по всем строкам со статьями из этой категории и в каждой внести изменения, а что то бы просто посмотреть какие есть категории, нужно делать выборку по всей таблице с удалением дублей по колонке категорий. <br><br>Поэтому используется декомпозиция &#8212; каждая сущность (статья, автор, категория, комментарий) хранятся в отдельных таблицах и связываются между собой через внешние ключи.<br>Внешний ключ &#8212; столбец в таблице, в каждой строке которого хранится значение уникального идентификатора (обычно это первичный ключ) из связанной таблицы. <br>Таким образом, внешний ключ &#8212; своего рода указатель на строку другой таблицы, который используется при соединении.</p>



<p>Внешний ключ не является обязательным. Можно просто добавить столбец со значениями идентификаторов из связанной таблицы, не указывая, что это внешний ключ.<br>Но если такой столбец назначить внешним ключом, то на таблицу накладывается так называемое &#171;ограничение&#187; (constrains) &#8212; жесткое правило, гарантирующее, что в связанной таблице точно есть нужные данные. Такое ограничение используется для обеспечения &#171;ссылочной целостности (консистентости)&#187; базы данных &#8212; гарантии, что свзязи указывают на существующие данные.</p>



<p>Пример таблиц<br><br><strong>Articles</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>id</strong></td><td><strong>title</strong></td><td><strong>text</strong></td><td><strong>author_id</strong></td><td><strong>category_id</strong></td></tr><tr><td>1</td><td>Hello World!</td><td>Lorem Ispum</td><td>1</td><td>1</td></tr></tbody></table></figure>



<p><strong>Categories</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>i<strong>d</strong></td><td><strong>name</strong></td></tr><tr><td>1</td><td>Business</td></tr><tr><td>2</td><td>Travel</td></tr></tbody></table></figure>



<p>Возвращаемся к соединению.<br>Предположим, есть задача получить записи статей, а так же ее автора и категорию.<br>Это можно сделать через операцию соединения таблиц используя оператор JOIN.</p>



<p>Предположим, есть задача получить записи статей c названиями категорий.<br>Это можно сделать через операцию соединения таблиц используя оператор JOIN.</p>



<p>Формат</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>SELECT поля_таблиц
FROM таблица_1
JOIN таблица_2
    ON условие_соединения
JOIN таблица_3
    ON условие_соединения
...    </textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">SELECT</span><span style="color: #D8DEE9FF"> поля_таблиц</span></span>
<span class="line"><span style="color: #81A1C1">FROM</span><span style="color: #D8DEE9FF"> таблица_1</span></span>
<span class="line"><span style="color: #81A1C1">JOIN</span><span style="color: #D8DEE9FF"> таблица_2</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">ON</span><span style="color: #D8DEE9FF"> условие_соединения</span></span>
<span class="line"><span style="color: #81A1C1">JOIN</span><span style="color: #D8DEE9FF"> таблица_3</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">ON</span><span style="color: #D8DEE9FF"> условие_соединения</span></span>
<span class="line"><span style="color: #D8DEE9FF">...    </span></span></code></pre></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Пример простого соединения 2-х таблиц (статьи и категории):</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>SELECT articles.id, articles.title, categories.name 
FROM articles
JOIN categories
  ON categories.id = articles.category_id;</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">SELECT</span><span style="color: #D8DEE9FF"> articles.id, articles.title, categories.name </span></span>
<span class="line"><span style="color: #81A1C1">FROM</span><span style="color: #D8DEE9FF"> articles</span></span>
<span class="line"><span style="color: #81A1C1">JOIN</span><span style="color: #D8DEE9FF"> categories</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">ON</span><span style="color: #D8DEE9FF"> categories.id </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> articles.category_id;</span></span></code></pre></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>В результате будут выведены все заголовки статей и их категории.</p>



<p>Если нужны все столбцы из articles:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>SELECT articles.*, categories.name 
FROM articles
JOIN categories
  ON categories.id = articles.category_id;</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">SELECT</span><span style="color: #D8DEE9FF"> articles.</span><span style="color: #81A1C1">*</span><span style="color: #D8DEE9FF">, categories.name </span></span>
<span class="line"><span style="color: #81A1C1">FROM</span><span style="color: #D8DEE9FF"> articles</span></span>
<span class="line"><span style="color: #81A1C1">JOIN</span><span style="color: #D8DEE9FF"> categories</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">ON</span><span style="color: #D8DEE9FF"> categories.id </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> articles.category_id;</span></span></code></pre></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Если нужны все столбцы из обеих таблиц:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>SELECT *
FROM articles
JOIN categories
  ON categories.id = articles.category_id;</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">SELECT</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">*</span></span>
<span class="line"><span style="color: #81A1C1">FROM</span><span style="color: #D8DEE9FF"> articles</span></span>
<span class="line"><span style="color: #81A1C1">JOIN</span><span style="color: #D8DEE9FF"> categories</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">ON</span><span style="color: #D8DEE9FF"> categories.id </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> articles.category_id;</span></span></code></pre></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Соединение может быть внутренним (INNER) или внешним (OUTER)<br>Если тип соединения не указан, то по умолчанию используется внутреннее соединение.<br>Внешнее соединение может быть левое (LEFT) или правое (RIGHT)<br>Для внешнего соединения модификатор OUTER можно не указывать, тип (LEFT/RIGHT) &#8212; обязательно.</p>



<p>Примеры указания типов:<br><strong>INNER JOIN </strong>&#8212; явно указано внутренне соединение<br><strong>JOIN </strong>&#8212; тип не указан, то же самое, что INNER JOIN<br><strong>LEFT OUTER JOIN = LEFT JOIN</strong><br><strong>RIGHT OUTER JOIN = RIGHT JOIN</strong></p>



<h2 class="wp-block-heading">Разница между типами соединений.</h2>



<ol class="wp-block-list">
<li>Внутреннее соединение возвращает только те строки, для которых выполняется условие соединения.<br>В примере:  статьи, у которых есть категории. Если в статье указана несуществующая категория &#8212; такая запись не попадет в результат.</li>
</ol>



<p>Внутреннее соединение можно релизовать через оператор <strong>WHERE</strong></p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>SELECT articles.id, articles.title, categories.name 
FROM articles, categories
WHERE articles.category_id = categories.id;</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">SELECT</span><span style="color: #D8DEE9FF"> articles.id, articles.title, categories.name </span></span>
<span class="line"><span style="color: #81A1C1">FROM</span><span style="color: #D8DEE9FF"> articles, categories</span></span>
<span class="line"><span style="color: #81A1C1">WHERE</span><span style="color: #D8DEE9FF"> articles.category_id </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> categories.id;</span></span></code></pre></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<ol start="2" class="wp-block-list">
<li>Внешнее соединение возвращает все строки. Если условие не выполняется (в статье ссылка на несущуствующую категорию) в итогой таблице вместо значений будет подставленно NULL.</li>
</ol>



<p><strong>Варианты внешнего соединения:</strong><br><strong>LEFT JOIN </strong>&#8212; берутся все записи из левой таблицы, из правой &#8212; только совпавшие по условию соединения<br><strong>RIGHT JOIN</strong> &#8212; берутся все записи из правой таблицы, из левой &#8212; только совпавшие по условию соединения</p>



<pre class="wp-block-code"><code>Положение таблицы (левая или правая) определяется ее позицией в запросе. Та что стоит первая - левая.</code></pre>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>SELECT * 
FROM левая_таблица l
LEFT JOIN правая_таблица r
ON l.user_id = r.id;</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">SELECT</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">*</span><span style="color: #D8DEE9FF"> </span></span>
<span class="line"><span style="color: #81A1C1">FROM</span><span style="color: #D8DEE9FF"> левая_таблица l</span></span>
<span class="line"><span style="color: #81A1C1">LEFT JOIN</span><span style="color: #D8DEE9FF"> правая_таблица r</span></span>
<span class="line"><span style="color: #81A1C1">ON</span><span style="color: #D8DEE9FF"> l.user_id </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> r.id;</span></span></code></pre></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><strong>Пример LEFT JOIN</strong></p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>SELECT a.*, c.name 
FROM articles a
LEFT JOIN categories c
ON a.category_id = c.id;</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">SELECT</span><span style="color: #D8DEE9FF"> a.</span><span style="color: #81A1C1">*</span><span style="color: #D8DEE9FF">, c.name </span></span>
<span class="line"><span style="color: #81A1C1">FROM</span><span style="color: #D8DEE9FF"> articles a</span></span>
<span class="line"><span style="color: #81A1C1">LEFT JOIN</span><span style="color: #D8DEE9FF"> categories c</span></span>
<span class="line"><span style="color: #81A1C1">ON</span><span style="color: #D8DEE9FF"> a.category_id </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> c.id;</span></span></code></pre></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>В результате будут выведены все статьи, если у статьи нет категории &#8212; в c.name будет NULL<br>Если у категории нет статьи &#8212; категория не появится в результатах.</p>



<p><strong>Пример RIGHT JOIN</strong></p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>SELECT a.*, c.name 
FROM articles a
RIGHT JOIN categories c
ON a.category_id = c.id;</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">SELECT</span><span style="color: #D8DEE9FF"> a.</span><span style="color: #81A1C1">*</span><span style="color: #D8DEE9FF">, c.name </span></span>
<span class="line"><span style="color: #81A1C1">FROM</span><span style="color: #D8DEE9FF"> articles a</span></span>
<span class="line"><span style="color: #81A1C1">RIGHT JOIN</span><span style="color: #D8DEE9FF"> categories c</span></span>
<span class="line"><span style="color: #81A1C1">ON</span><span style="color: #D8DEE9FF"> a.category_id </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> c.id;</span></span></code></pre></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>В результате будут выведены все категории, если у категории нет статьи &#8212; в столбцах a.* будет NULL <br>Тот же результат можно получить через LEFT JOIN, поменяв таблицы местами, поэтому на практике RIGHT JOIN редко используется.</p>



<pre class="wp-block-code"><code>Еще раз: LEFT JOIN - выводим все строки из первой таблицы, а из второй те, для которых выполняется условие соединения.</code></pre>



<h2 class="wp-block-heading">Фильтрация результатов с помощью оператора WHERE.</h2>



<p>Порядок выполнения таких запросов:<br>FROM<br>JOIN<br>WHERE<br>SELECT</p>



<p><strong>Пример:</strong><br>Необходимо вывести названия и ID всех категорий, в которых нет статей.</p>



<p><strong>Решение</strong></p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>SELECT c.id, c.name
FROM categories c
LEFT JOIN articles a
  ON c.id=a.category_id
WHERE a.id IS NULL;</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">SELECT</span><span style="color: #D8DEE9FF"> c.id, c.name</span></span>
<span class="line"><span style="color: #81A1C1">FROM</span><span style="color: #D8DEE9FF"> categories c</span></span>
<span class="line"><span style="color: #81A1C1">LEFT JOIN</span><span style="color: #D8DEE9FF"> articles a</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">ON</span><span style="color: #D8DEE9FF"> c.id</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF">a.category_id</span></span>
<span class="line"><span style="color: #81A1C1">WHERE</span><span style="color: #D8DEE9FF"> a.id </span><span style="color: #81A1C1">IS</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">NULL</span><span style="color: #D8DEE9FF">;</span></span></code></pre></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Как работает:<br>Шаг 1. FROM .. JOIN ..<br>Создается соединение, в результате получается промежуточная таблица со всеми строками из таблицы категорий. Столбцы &#8212; все из обеих таблиц. Если у категории нет статьи &#8212; в ячейках (id, title, text, …) значение NULL<br>Шаг 2<strong>. </strong>Применяется фильтр WHERE, остаются только строки с aricles.id = NULL<br>Шаг 3<strong>. </strong>Применяется SELECT, остаются только categories.id/name.</p>



<p></p>
<p>Сообщение <a href="https://mcodex.ru/joins-in-mysql/">Соединение таблиц через JOIN в MySQL</a> появились сначала на <a href="https://mcodex.ru">mcodex</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
