{{tag>sql mysql}}

====== Join / Sql / database ======

{{:sql:mysql:sql-join_dmi3vo.jpg?600|}}

===== JOINS =====

=== author ===

^ id  ^ name  ^
| 1   | Вася  |
| 2   | Коля  |
| 3   | Петя  |

=== util ===

^ id  ^ author_id  | name                            |
| 1   | 1          | Вася Мега продукт               |
| 2   | 0          | Крутая, но неизвестная утилита  |

===== SQL INNER / INNER JOIN - естественное или внутреннее соединение =====

Возвращает записи, у которых есть соответствующие записи в обеих таблицах.

<code sql>
-- Выводим все поля
select *
-- Указываем таблицу авторов
from author
-- Соединяем с таблицей программ
inner join util
-- Указываем условие
on author.id = util.author_id
</code>

^ id  ^ name  | id  | author_id  | name               |
| 1   | Вася  | 1   | 1          | Вася Мега продукт  |

===== LEFT JOIN =====

Возвращает все записи из левой таблицы и соответствующие записи из правой таблицы. Если соответствия нет, возвращает NULL для правой таблицы.

<code sql>
-- Выводим все поля
select *
-- Указываем таблицу авторов
from author
-- Соединяем с таблицей программ
left join util
-- Указываем условие
on author.id = util.author_id
</code>

^ id  ^ name  | id    | author_id  | name               |
| 1   | Вася  | 1     | 1          | Вася Мега продукт  |
| 2   | Коля  | NULL  | NULL       | NULL               |
| 3   | Петя  | NULL  | NULL       | NULL               |

===== RIGHT JOIN =====

Возвращает все записи из правой таблицы и соответствующие записи из левой таблицы. Если соответствия нет, возвращает NULL для левой таблицы.

<code sql>
-- Выводим все поля
select *
-- Указываем таблицу авторов
from author
-- Соединяем с таблицей программ
right join util
-- Указываем условие
on author.id = util.author_id
</code>

^ id    ^ name  | id  | author_id  | name                            |
| 1     | Вася  | 1   | 1          | Вася Мега продукт               |
| NULL  | NULL  | 2   | 0          | Крутая, но неизвестная утилита  |

===== LEFT OUTER JOIN - левое внешнее соединение =====

Возвращает все записи из левой таблицы и соответствующие записи из правой таблицы. Если соответствия нет, возвращает NULL для правой таблицы.

<code sql>

</code>

===== RIGHT OUTER JOIN - правое внешнее соединение =====

Возвращает все записи из правой таблицы и соответствующие записи из левой таблицы. Если соответствия нет, возвращает NULL для левой таблицы.

<code sql>

</code>

===== FULL JOIN - полное внешнее соединение =====

Возвращает все записи, когда есть соответствие в одной из таблиц.

<code sql>

</code>

===== CROSS JOIN - перекрестное или декартово соединение =====

Выполняет декартово произведение двух таблиц, объединяя каждую строку первой таблицы с каждой строкой второй таблицы.

<code sql>

</code>

===== UNIOUN =====

<code sql>

</code>


