Вътрешно присъединяване срещу Външно присъединяване
Вътрешното присъединяване и Външното присъединяване са два от методите за присъединяване към SQL, използвани при обработката на заявки за бази данни. Те принадлежат към семейството на клаузите за присъединяване (други две са Left and Right Joins). Въпреки това, има Self Join, който може да се използва за специализирани ситуации. Целта на Join е да комбинира полета, използвайки общите стойности в двете таблици. Тези обединения комбинират записи от множество таблици в база данни. Той създава получени набори, които могат да бъдат записани като друга таблица.
Какво е вътрешно присъединяване?
Най-често използваната операция SQL Join е Вътрешното присъединяване. Може да се счита за тип по подразбиране на присъединяване, използван в приложенията. Вътрешното присъединяване използвайте предиката за присъединяване, за да комбинирате две таблици. Ако приемем, че двете таблици са А и В, тогава предикатът за присъединяване ще сравнява редове от А и В, за да открие всички двойки, които удовлетворяват предиката. Стойностите на колоните на всички удовлетворени редове от таблици A и B се комбинират, за да се създаде резултатът. Може да се разглежда като първо вземане на кръстосаното съединение (декартово изделие) на всички записи и след това връщане само на записите, които отговарят на предиката за присъединяване. В действителност обаче декартовият продукт не се изчислява, защото е много неефективен. Вместо това се използва Hash join или сортиране на сливане.
Какво е външно присъединяване?
За разлика от Inner join, външното присъединяване съхранява всички записи, дори ако не може да намери съвпадение. Това означава, че външното присъединяване се нуждае от запис, за да намери съвпадащ запис, за да се появи в резултата. Вместо това той ще върне всички записи, но несравнените записи ще имат нулеви стойности. Външните съединения са разделени на три подкатегории. Те са ляво външно съединение, дясно външно съединение и пълно външно съединение. Това диференциране се основава на коя таблица (лявата, дясната или двете таблици) се запазва ред, когато се открият несъответстващи записи. Лявото външно съединение (известно също като просто ляво съединение) запазва всички записи на лявата таблица. Това означава, че дори записите за съвпадение на числата да са нула, то все пак ще има записи в резултата таблица, но ще има нулеви стойности за всички колони от B. С други думи, всички стойности от лявата таблица се връщат със съвпадащи стойности отдясно таблица (или нулеви стойности, когато няма съответствие). Ако стойностите от няколко реда от лявата таблица са съчетани с един ред от дясната таблица, редът от дясната таблица ще бъде повторен, както се изисква. Дясната външна връзка е почти подобна на лявата външна връзка, но третирането на таблиците е почитано. Това означава, че резултатът ще има всички редове на дясната таблица поне веднъж с съвпадащи стойности на лявата таблица (и нулеви стойности за несравнени десни стойности). Пълното външно съединение е по-цялостно от двете ляво и дясно външно съединение. Това води до комбиниране на ефекта от прилагането на лявата и дясната външна част, съединени заедно.
Каква е разликата между Вътрешно присъединяване и Външно присъединяване?
Вътрешното присъединяване не запазва несравнимите редове в резултата, но външното присъединяване ще съхранява всички записи от поне една таблица (в зависимост от това коя външна връзка е била използвана). Така че поведението на липсата на информация в несравнени редове в таблицата с резултати е нежелателно, винаги трябва да използвате някое от външните съединения (вместо вътрешно съединяване). Вътрешното присъединяване може да не доведе до резултат, ако не бъдат намерени съвпадения. Но външното съединяване винаги ще произведе резултираща таблица, дори и без съответстващи редове. Вътрешното присъединяване винаги ще връща таблици със стойности (ако е върнато). Но външните съединения могат да доведат до таблици с нулеви стойности.