Рассмотрим таблицу А и Б
id name id name -- ---- -- ---- 1 Pirate 1 Rutabaga 2 Monkey 2 Pirate 3 Ninja 3 Darth Vader 4 Spaghetti 4 Ninja
1) 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
2) Full outer join выбирает все данные из обоих таблиц возвращая Null для несвязанных полей
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
3) Left outer join выбирает все записи из таблицы А сравнивая их с полями из таблицы Б. Если записи для таблицы А не найдены в таблице Б, то возвращается NULL
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
4) 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
5) FULL OUTER JOIN с выбором уникальных записей. Выбираем данные из таблиц А и Б, записи которых не совпали и вернули NULL
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
6) CROSS JOIN выборка перекрестного соединения с выбором всех вариантов. Диаграммы для него нет.
SELECT * FROM TableA CROSS JOIN TableB
Выбирает записи по принципу «все ко всему».