Разбираем SQL JOINS

Рад снова видеть Вас, уважаемый читатель!

Сегодня мы попробуем разобраться в специфических командах SQL Joins.

Что это такое?

JOIN — оператор языка SQL, который осуществляет операции соединения реляционной алгебры.

Возьмем 2 таблицы. Таблица А слева и таблица В справа.

id name       id  name
-- ----       --  ----
1  Pirate     1   Rutabaga
2  Monkey     2   Pirate
3  Ninja      3   Darth Vader
4  Spaghetti  4   Ninja

Давайте поработаем с этими таблицами (по полю name) несколькими различными способами.

 

INNER JOIN — пересечение

SELECT * FROM TableA
INNER JOIN TableB
ON TableA.name = TableB.name

id  name       id   name
--  ----       --   ----
1   Pirate     2    Pirate
3   Ninja      4    Ninja

INNER JOIN объединит две таблицы и вернет лишь те записи, которые есть в обеих таблицах.

 

 FULL OUTER JOIN — объединение

SELECT * FROM TableA
FULL OUTER JOIN TableB
ON TableA.name = TableB.name

id    name       id    name
--    ----       --    ----
1     Pirate     2     Pirate
2     Monkey     null  null
3     Ninja      4     Ninja
4     Spaghetti  null  null
null  null       1     Rutabaga       
null  null       3     Darth Vader

Full outer join дополнит таблицы А и В, строками из каждой таблицы. Если строки из какой-либо таблицы нет, то значение будет null в соответствующей части.

 

LEFT OUTER JOIN — дополнение

SELECT * FROM TableA
LEFT OUTER JOIN TableB
ON TableA.name = TableB.name

id  name       id    name
--  ----       --    ----
1   Pirate     2     Pirate
2   Monkey     null  null
3   Ninja      4     Ninja
4   Spaghetti  null  null

Left outer join дополняет таблицу А пересеченными элементами из таблицы В. Если пересечения нет, то в правую часть попадет null. 

 

 LEFT OUTER JOIN и ON — вычитание

SELECT * FROM TableA
LEFT OUTER JOIN TableB
ON TableA.name = TableB.name
WHERE TableB.id IS null

id  name       id     name
--  ----       --     ----
2   Monkey     null   null
4   Spaghetti  null   null

С помощью Left outer join и on мы получим в результате все записи из таблицы А, которых нет в таблице В. 

 

 Получение непересекающихся значений

SELECT * FROM TableA
FULL OUTER JOIN TableB
ON TableA.name = TableB.name
WHERE TableA.id IS null 
OR TableB.id IS null

id    name       id    name
--    ----       --    ----
2     Monkey     null  null
4     Spaghetti  null  null
null  null       1     Rutabaga
null  null       3     Darth Vader

В данном случае мы получим все записи, которые не состоят одновременно в обеих  таблицах. Недостающие значения заполняются null.

 

CROSS JOIN — полное объединение

SELECT * FROM TableA
CROSS JOIN TableB

В данном случае мы получим таблицы из 4 x 4 = 16 строк, в которой будет объединение всех строк из таблицы А со всеми строками из таблицы В. Из результата видно, что использовать данную операцию нежелательно, особенно, если у вас большие таблицы.

 

Заключение

Команды языка SQL JOINS дают большие возможности для работы с таблицами. С помощью данного оператора можно заметно упростить выбор данных из таблиц. Пользуетесь на здоровье!

Что-то осталось неясным? Задавайте вопросы в комментариях!

Спасибо за внимание! Подписываемся на рассылку 😉

 

 

Автор статьи: Alex. Категория: SQL
Дата публикации: 20.04.2013