MYSQL JOIN — быстро, легко, просто

Оператор JOIN является одним из самых распространенных для построения сложных запросов в языке SQL. Понятие сложное, но если разобраться с ним, вы получите мощный инструмент в свое распоряжение.

Данный пост рассчитан на начинающих вебмастеров, которые хотят развиваться дальше. Без освоения оператора JOIN нормально строить сайты достаточно сложно.

Если Вы не умеете работать с псевдонимами в SQL, настоятельно рекомендую прочитать мой пост о псевдонимах в MYSQL перед прочтением данной темы. Нормально работать с JOIN без понимания псевдонимов — невозможно. Тема достаточно объемная, я ставлю целью в данном посте дать начальное понимание процесса объединения таблиц. Это должно дать мощный толчок к дальнейшему пониманию MYSQL.

Итак, что такое JOIN, зачем он нужен.

Оператор JOIN позволяет объединять две и более таблиц в одну (временную) таблицу для извлечения данных одним запросом. Для избегания избыточности и дублирования данные в базе хранятся в разных таблицах. Получить их одним запросом без объединения таблиц невозможно. А использование нескольких запросов — не вариант — значительно увеличивает время загрузки страницы. Кроме того, усложняет процесс обработки полученных данных.

Синтаксис запроса с использованием JOIN:

SELECT field_1, field_2, field_3 FROM tbl_1
{INNER, LEFT, RIGHT} JOIN tbl_2 ON {условие объединения}
WHERE {условие выборки}
    Что мы делаем:

  • SELECT field_1, field_2, field_3 — получаем в результирующую таблицу значение полей field_1, field_2, field_3. Причем любое из этих полей может быть как в tbl_1, так и в tbl_2
  • FROM tbl_1 — первая таблица, из которой выбираем данные
  • {INNER, LEFT, RIGHT} — тип объединения, ниже рассмотрим подробнее
  • JOIN tbl_2 ON {условие объединения} — присоединяем вторую таблицу используя условие. Присоединять таблицу можно и без условий, но такое объединение редко имеет смысл. Что такое {условие объединения} рассмотрим в следующем абзаце.
  • WHERE {условие выборки} — стандартное ограничение выборки для запросов SELECT

 

В {условие объединения} мы определяем соответствие данных tbl_1 и tbl_2. Как правило, мы выбираем данные из связанных таблиц — соответственно, в этом условии мы прописываем эту связь. При этом, зачастую, названия полей совпадают в обеих таблицах — соответственно, мы должны использовать псевдонимы для таблиц.

Рассмотрим пример. У нас есть две таблицы:
tbl1 — | user_id | user_name | — имя пользователя
tbl1 — | user_id | user_age | — возраст пользователя
Нам надо получить одним запросом имя пользователя и его возраст. Составляем запрос:

SELECT user_name, user_age FROM tbl_1
JOIN tbl_2 ON tbl_1.user_id = tbl_2.user_id

В данном примере имена таблиц tbl_1 и tbl_2 короткие, можно обойтись без псевдонимов. Но если они длинные — используйте псевдонимы!
В результате данного запроса мы получим таблицу | user_name | user_age | — она будет содержать и возраст и имя пользователя.

Теперь расскажу о типах {INNER, LEFT, RIGHT}

INNER JOIN — внутреннее объединение

При данном типе объединения в результирующую выборку будут включены только те строки, для которых есть записи и в первой и во второй таблице. То есть, в результат попадут пользователи для которых в первой таблице прописано имя, а во второй — возраст. Если или то или то отсутствует, то пользователь в результат не попадет. Если мы в запросе опускаем тип объединения, то используется, как раз, INNER. То есть, JOIN и INNER JOIN — одно и то-же.

LEFT JOIN — внешнее левостороннее объединение

Внешним оно называется потому, что полный синтаксис LEFT OUTER JOIN. Как правило слово OUTER опускают — оно необязательно. При данном типе объединения в результирующую таблицу будут включены ВСЕ данные из первой таблицы. Из второй таблицы будет выбран возраст всех пользователей, user_id которых есть и в первой таблице. Если же во второй таблице отсутствует возраст какого-то пользователя, то в соответствующую ячейку будет записан NULL.

RIGHT JOIN — внешнее правостороннее объединение

Используется значительно реже. Фактически, это то-же самое, что и левостороннее объединение, только таблицы меняются местами. То есть, будут выбраны все данные из таблицы с возрастами и дополнены данными из таблицы с именами. Результирующая таблица будет иметь такую-же структуру — | user_name | user_age |, только возрасты будут все, а отсутствующие имена будут заменены на NULL.

Еще есть один момент. Если в выборке или в  {условие выборки} есть совпадающие поля , то необходимо полная запись имени поля в формате {table.field}.

Вот, пожалуй и все. Это далеко не все возможности JOIN, но если вы поймете данную статью — дальже дело пойдет значительно проще. В заключение, приведу знаменитую картинку, которая отображает возможности использования JOIN в графическом виде.

mysql join

Категория: Без рубрики
Comments are disabled