Главная » Программирование » Основы SQL. Соединение таблиц с помощью Join

Основы SQL. Соединение таблиц с помощью Join

21 июля 2012 - Рубрики Программирование

3487 просмотров

В сайдбар справа добавлена кнопка Google+. Если вам поможет данный материал, прошу вас нажмите на кнопку - порекомендуйте сайт в Google.

Привет всем!

Как вы помните для выборки данных из нескольких таблиц есть несколько способов: коррелированные подзапросы и соединение таблиц с помощью JOIN.
Про первый вариант я рассказывал раньше. Рассмотрим второй способ соединения таблиц. Существует несколько различных вариантов соединения таблиц.
Рассмотрим сначала внутреннее соединение Inner Join. Синтаксис следующий

select <список полей>
from table1 t inner join table2 tt
on <условие соединения, например, t.id=tt.t_id>

Кстати, обратите внимание на такую полезную вещь как псевдонимы таблиц (t и tt) — вместо написания имени таблицы вы пишете псевдоним и
значительно экономите время.

Также имеется альтернативный синтаксис, который лично для меня удобнее

select <список полей>
from table1 t, table2 tt
where t.id=tt.t_id

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

Теперь об особенностях соединения таблиц данным методом. Из результатов выборки будут выкидываться строки содержащие null
К примеру, у вас должен был вернуться результат

1 1
1 2
1 null
2 null
3 3
2 1

но если используется inner join, то в результате получите

1 1
1 2
3 3
2 1

Теперь о внешних соединениях. Внешние соединения как раз позволяют вывести в набор строки содержащие null значения.
Синтаксис такой же, только меняется название join-a.
Left join позволяет вывести в результирующий набор все строки из первой таблицы на основании условия соединения.
Right join действует наоборот, выводит все записи из второй таблицы на основании условия соединения.
Full join выводит все записи с null из обоих таблиц.

updated 23.08.2012:

как справедливо заметил m-r Tarakanoff, если при использовании Left Join во второй таблице несколько строк соответствуют условию соединения, то в результат будет выведены все эти строки. То же самое касается Right Join — будет выведено несколько строк, если в первой таблице несколько строк удовлетворяют условию соединения. Несколько скринов на эту тему

таблица a1 и таблица a2

a1 left join a2 on a1.name_=a2.name_

a1 right join a2 on a1.name_=a2.name_

a1 full join a2 on a1.name_=a2.name_

Кроме того есть еще Cross join, который выводит декартово произведение таблиц, т.е. для каждой строчки таблицы 1 будет сопоставлена каждая строчка таблицы 2. Например, в таблице1 две строки, в таблице2 три строки — результат соединения Cross join-ом вернет 2х3=6 строк.

Стоит упомянуть о преимуществах использования join-ов. По сравнению с подзапросами join позволяют сильно уменьшить объем кода. Кроме того значительно проще использовать Group by — для подзапросов нужно весь подзапрос копировать в group by, при использовании join можно лишь указать имя поля соответствующей таблицы.

Но при всех этих преимуществах легко запутаться и потерять некоторые данные (см. выше).

На этом на сегодня все, попробуйте создать 2 таблички и поэкспериментировать с данными операторами. Если вы ими не пользуетесь, то самое время начинать, они значительно упростят вам жизнь :)

Если этот материал оказался вам полезен, порекомендуйте его в в Google, нажав кнопку Google+ справа в сайдбаре или через кнопки социальных сервисов ниже.

П.С. не забудьте оставить комментарий к статье, а также поделиться ссылкой с друзьями и коллегами через социальные сервисы или скопировав ссылку на статью ниже. Кроме того, вы можете предложить тему статьи через кнопку слева "Предложить тему статьи". Там же можно оставить пожелания, идеи по развитию сайта, а также благодарности (ну а вдруг)
П.П.С. предлагаю вам также вступить в Группа Вконтакте!группу Вконтакте, где вы сможете пообщаться с участниками на интересующие вас темы. Смелее!!!
Если вы больше времени проводите в Twitter, то за обновлениями на сайте можно следить, подписавшись на мою лентуTwitter: follow me!

Наиболее популярные статьи

 

Предыдущие материалы из данной категории:

Комментариев: 3 , , , , , , ,

Понравилась статья? Поделитесь ссылкой




Комментарии к «Основы SQL. Соединение таблиц с помощью Join»:

  1.  m-r Tarakanoff 23 августа 2012 08:36:19

    Здравствуйте,

    «… т.е. количество записей в результате будет равно количеству записей в первой таблице.» — Вы уверены, что количество записей в результате будет равно количеству записей в первой таблице? LEFT JOIN создает результирующую таблицу, в которую добавляет записи, на основании истинности условия. Проверьте на примере.

    •  Руслан 23 августа 2012 08:54:45

      Добрый день!
      да, конечно, вы правы. Не знаю, почему не добавил это сразу. Исправил в статье

      •  m-r Tarakanoff 23 августа 2012 08:58:26

        Количество записей в результате НЕ будет равно количеству записей в первой таблице. Объедините две таблицы, где во второй таблице значение поля, по которому производится сравнение, не уникально. Т.е. проверка на истинность возвращает несколько результатов. И операция LEFT JOIN включит их в результат. Количество строк в результате, не будет равно количеству строк первой таблицы.

Оставьте комментарий:




:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)

Я человек, а не бот.