Давно хотел понять для себя смысл и принцип работы JOIN. Особо с ними не работал, так как весь необходимый функционал работы с БД присоздании сайтов на MODx у меня всегда был под рукой в виде API. А в те несколько случаев необходимости использования JOIN я обошолся LEFT JOIN‘ом, а дальше лишнее обрабатывал уже в PHP. Знаю, это совсем неправильно, однако оно работало и мне было этого достаточно.

Сейчас я решил улучшить свои знания MySQL.  Почитал литературу, узнал много о типах БД, о настройке и т.п. Теперь пришло время разобраться сJOIN. Я нашел статью по теме, которая наглядно показывает что из себя представляет результат работы JOIN. Представляю вашему вниманию вольный ее перевод (http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html).

Итак, мы имеем 2 таблицы.

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

1. INNER JOIN

SQL:MySQL

Представление в виде таблиц:

Пояснение результата с помощью диаграмм Эйлера-Венна:

join-inner

Пояснение словами:

Результатом объединения таблиц с помощью INNER JOIN являются записи, общие для левой и правой таблиц.

2. FULL OUTER JOIN

SQL: MySQL

Представление в виде таблиц:

Пояснение результата с помощью диаграмм Эйлера-Венна:

join-cartesian

Пояснение словами:

Результатом объединения таблиц с помощью FULL OUTER JOIN являются все записи, которые присутствуют в каждой из таблиц.

3. LEFT OUTER JOIN

SQL: MySQL

Представление в виде таблиц:

Пояснение результата с помощью диаграмм Эйлера-Венна:

join-left

4. LEFT OUTER JOIN за исключением записей, которые присутствую в правой таблице

SQL: MySQL

Представление в виде таблиц:

Пояснение результата с помощью диаграмм Эйлера-Венна:

join-left-outer

5. FULL OUTER JOIN за исключением записей, которые присутствуют в обоих таблицах

SQL: MySQL

Представление в виде таблиц:

Пояснение результата с помощью диаграмм Эйлера-Венна:

join-outer

Как мы видим, диаграммы наглядно показывают смысл объединения таблиц различными способами. Надеюсь данный материал будет вам полезен в разработке.