Разлика между вътрешно съединение и външно съединение

Разлика между вътрешно съединение и външно съединение
Разлика между вътрешно съединение и външно съединение

Видео: Разлика между вътрешно съединение и външно съединение

Видео: Разлика между вътрешно съединение и външно съединение
Видео: Мэтт Ридли: Когда идеи занимаются сексом 2024, Юли
Anonim

Вътрешно свързване срещу външно съединение

Вътрешно присъединяване и Външно присъединяване са два от SQL методите за присъединяване, използвани при обработката на заявки за бази данни. Те принадлежат към семейството на клаузите за свързване (други две са леви и десни съединения). Има обаче Self Join, който може да се използва за специализирани ситуации. Целта на Join е да комбинира полета, използвайки общите стойности към двете таблици. Тези съединения комбинират записи от множество таблици в база данни. Той създава резултантни набори, които могат да бъдат записани като друга таблица.

Какво е вътрешно присъединяване?

Най-често използваната SQL операция за свързване е вътрешното свързване. Може да се счита за тип присъединяване по подразбиране, използван в приложенията. Вътрешното свързване използва предиката за свързване, за да комбинира две таблици. Ако приемем, че двете таблици са A и B, тогава предикатът за присъединяване ще сравни редове от A и B, за да открие всички двойки, които отговарят на предиката. Стойностите на колоните на всички удовлетворени редове на таблици A и B се комбинират, за да се създаде резултатът. Може да се разглежда като първо вземане на кръстосано съединение (декартово произведение) на всички записи и след това връщане само на записите, които отговарят на предиката за свързване. В действителност обаче декартовото произведение не се изчислява, защото е много неефективно. Вместо това се използва хеширане или сортиране-обединяване.

Какво е външно свързване?

За разлика от вътрешното присъединяване, външното присъединяване пази всички записи, дори ако не може да намери съответстващ запис. Това означава, че външното присъединяване се нуждае от запис, за да намери съответстващ запис, за да се появи в резултата. Вместо това ще върне всички записи, но несравнимите записи ще имат нулеви стойности. Външните съединения са разделени на три подкатегории. Те са ляво външно съединение, дясно външно съединение и пълно външно съединение. Това разграничаване се основава на това кой ред на таблицата (лява таблица, дясна таблица или и двете таблици) се запазва, когато се открият несъвпадащи записи. Левите външни съединения (известни също като просто ляво съединение) запазват всички записи на лявата таблица. Това означава, че дори броят на съответстващите записи да е нула, тогава той все още ще има записи в таблицата с резултати, но ще има нулеви стойности за всички колони на B. С други думи, всички стойности от лявата таблица се връщат със съвпадащи стойности от дясната таблица (или нулеви стойности, когато няма съвпадение). Ако стойностите от няколко реда от лявата таблица съвпаднат с един ред от дясната таблица, редът от дясната таблица ще се повтори според изискванията. Дясното външно съединение е почти подобно на лявото външно съединение, но обработката на таблиците е почитана. Това означава, че резултатът ще има всички редове на дясната таблица поне веднъж със съвпадащи стойности на лявата таблица (и нулеви стойности за несъвпадащи десни стойности). Пълното външно свързване е по-изчерпателно от лявото и дясното външно свързване. Резултатът е комбиниране на ефекта от прилагането както на левия, така и на десния външен обединен.

Каква е разликата между Inner Join и Outer Join?

Вътрешното обединяване не запазва несъвпадащите редове в резултата, но външното обединяване ще пази всички записи от поне една таблица (в зависимост от това кое външно обединяване е използвано). Така че поведението да няма информация за несъвпадащи редове в таблицата с резултати е нежелателно, трябва винаги да използвате едно от външните съединения (на мястото на вътрешното съединение). Вътрешното присъединяване може да не даде резултат, ако не бъдат намерени съвпадения. Но външното свързване винаги ще създава резултатна таблица, дори без съвпадащи редове. Вътрешното присъединяване винаги ще връща таблици със стойности (ако е върнато). Но външните съединения могат да доведат до таблици с нулеви стойности.

Препоръчано: