Примеры использования JOIN’ов.

Есть две таблицы. Таблица А находится слева,  таблица В справа. В каждой по четыре записи.

Table A                    Table B
id     name          id    name 
1    Pirate              1   Rutabaga
2    Monkey           2    Pirate
3    Ninja               3    Darth Vader
4    Spaghetti        4    Ninja

Соединяем их разными способами (для наглядности используются диаграммы Венна).

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 JOUN делает отбор всех записей в таблице А и в таблице В с возможностью совпадений записей в левой и правой таблицах. Если таковых нет, то на пустой стороне выводится 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.

RIGHT OUTER JOIN (правое внешнее соединение)

RIGHT JOIN работает по аналогии с LEFT OUTER JOIN, только берется таблица справа.

LEFT OUTER JOIN с условием

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

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

FULL OUTER JOIN с условием

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

Этот запрос также удаляет совпадающие записи, но теперь включает в выдачу  те записи таблицы В, которых нет в таблице А.

CROSS JOIN
CROSS JOIN не может быть выражен  на диаграмме Венна.

SELECT * FROM TableA
CROSS JOIN TableB

CROSS JOIN означает «все к всему» («everything to everything»), выдающий 4 х 4 = 16 строк, что намного больше, чем было в начале.

Источник: Codding Horror: A Visual Explanation of SQL Joins