В этой статье мы рассмотрим визуальное представление соединение таблиц SQL командой JOIN.
Очень часто не хватает визуального представления, для понимания как происходит соединенная выборка данных в таблицах с использованием условий:
- INNER JOIN
- FULL OUTER JOIN
- LEFT OUTER JOIN
- LEFT OUTER JOIN с исключением записей
- FULL OUTER JOIN с выбором уникальных записей
- CROSS JOIN
В качестве визуализации будем использовать диаграммы Эйлера
Для начала нам потребуется две таблицы с некоторыми перекликающимся записями:
1 2 3 4 5 6 7 |
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
Рассмотрим классический выбор данных которые присутствуют в обеих таблицах
|
||
![]() |
Внутреннее соединение INNER JOIN производит выборку только записей, которые соответствуют как в таблице А, так и в таблице В.
FULL OUTER JOIN
|
||
![]() |
Полное внешнее объединение FULL OUTER JOIN производит выборку множество всех записей в таблице А и в таблице B, с соответствующими записями с обеих сторон при их наличии. Если совпадения нет, отсутствует сторона будет содержать NULL.
LEFT OUTER JOIN
|
||
![]() |
Левое внешнее объединение LEFT OUTER JOIN производит полный набор записей из таблицы А, с соответствующей записи (если таковые имеются) к Таблице B. Если совпадения нет, то правая часть будет содержать NULL.
LEFT OUTER JOIN с исключением записей
|
||
![]() |
Для получения набора записей только в таблице А, но не в таблице B, мы выполняем тоже самое левое внешнее соединение LEFT OUTER JOIN, но исключаем записи, оставляя только случай в котором нету сопоставимых записей левой стороне. В итоге справа у нас только NULL.
FULL OUTER JOIN с выбором уникальных записей
|
||
![]() |
Для получения уникального набора записей в таблице A и в таблице B, мы выполняем полное внешнее соединение FULL OUTER JOIN, исключая отсутствующие записи при полной выборке с обеих сторон.
CROSS JOIN
Так же существует выборка перекрестного соединения, CROSS JOIN, с перебором все вариантов, которое не объяснить данными диаграммами
1 2 |
SELECT * FROM TableA CROSS JOIN TableB |
Данное перекрестное соединение выбирает буквально «все к всему», в результате мы получим 4 x 4 = 16 записей, намного более чем в оригинале мы имеем в таблицах.