Визуальное пояснение JOIN’ов
Примеры использования 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
Комментариев к данной записи: 3
20 июня 2015
В этом что-то есть. Буду знать, большое спасибо за помощь в этом вопросе.
6 февраля 2018
Информация предоставлена просто, доступно, наглядно
5 апреля 2025
Of his works he is especially famous