Съгласен съм с Кейд относно ограниченията на диаграмите на Вен тук. Това може да бъде по-подходящо визуално представяне.
Таблици
ИЗБЕРЕТЕ A.Colour, B.Colour ОТ КРЪСТО ПРИСЪЕДИНЯВАНЕ B SQL Fiddle
Кръстосаното свързване (или декартово произведение) дава резултат с всяка комбинация от редовете от двете таблици. Всяка таблица има 4 реда, така че това дава 16 реда в резултата.
ИЗБЕРЕТЕ A.Colour, B.Colour ОТ A INNER JOIN B ON A.Colour =B.Colour SQL Fiddle
Вътрешното съединение връща логически всички редове от кръстосаното съединение, които отговарят на условието за свързване. В този случай пет го правят.
ИЗБЕРЕТЕ A. Цвят, B. Цвят ОТ ВЪТРЕШНО ПРИСЪЕДИНЯВАНЕ B ВЪРХУ A. Цвят НЕ ВЪВ ('Green','Blue') SQL Fiddle
Вътрешното условие за свързване не е задължително да бъде условие за равенство и не е необходимо да препраща към колони от двете (или дори от едната) от таблиците. Оценяване на A.Colour NOT IN ('Green','Blue')
на всеки ред от кръстосаното съединение се връща.
Условие за вътрешно присъединяване на 1=1
ще се оцени на true за всеки ред в кръстосаното съединение, така че двете са еквивалентни (SQL Fiddle
).
ИЗБЕРЕТЕ A.Colour, B.Colour ОТ A LEFT OUTER JOIN B ON A.Colour =B.Colour SQL цигулка
Външните обединявания се оценяват логически по същия начин като вътрешните свързвания, с изключение на това, че ако ред от лявата таблица (за ляво присъединяване) изобщо не се съединява с никакви редове от дясната таблица, той се запазва в резултата с NULL
стойности за десните колони.
ИЗБЕРЕТЕ A.Colour, B.Colour ОТ A LEFT OUTER JOIN B ON A.Colour =B.Colour WHERE B.Colour IS NULL SQL Fiddle
Това просто ограничава предишния резултат, за да върне само редовете, където B.Colour IS NULL
. В този конкретен случай това ще бъдат редовете, които са били запазени, тъй като не са имали съвпадение в дясната таблица и заявката връща единичния червен ред, който не е съвпаден в таблица B
. Това е известно като анти полусъединяване.
Важно е да изберете колона за IS NULL
тест, който или не е нулев, или за който условието за присъединяване гарантира, че всеки NULL
стойностите ще бъдат изключени, за да може този модел да работи правилно и да се избегне просто връщане на редове, които случайно имат NULL
стойност за тази колона в допълнение към несъпоставените редове.
ИЗБЕРЕТЕ A.Colour, B.Colour ОТ ДЯСНО ВЪНШНО ПРИСЪЕДИНЕНИЕ B НА A.Colour =B.Colour SQL Fiddle
Десните външни съединения действат подобно на лявото външни съединения, с изключение на това, че запазват несъответстващи редове от дясната таблица и нула разширяват левите колони.
ИЗБЕРЕТЕ A.Colour, B.Colour ОТ ПЪЛНО ВЪНШНО ПРИСЪЕДИНЕНИЕ B НА A.Colour =B.Colour SQL Fiddle
Пълните външни свързвания комбинират поведението на лявото и дясното свързване и запазват несъответстващите редове както от лявата, така и от дясната таблица.