SQL външно присъединяване

Sql V Nsno Pris Edinavane



От само себе си се разбира, че присъединяването е една от най-разпознаваемите характеристики на релационните бази данни. Съединенията ни позволяват да комбинираме данните от една или повече таблици въз основа на свързано условие, за да създадем съгласувана операция с данни.

В SQL има различни типове съединения, всяко с уникален начин за това как обработва данните от участващите таблици или резултантния набор. Един от най-разпространените типове съединяване в SQL е ВЪНШНО СЪЕДИНЯВАНЕ.







OUTER JOIN в SQL извлича всички съвпадащи редове от участващите таблици, както и несъвпадащите редове от една или и двете таблици. Това е полезно, когато имате работа с таблици, които съдържат NULL стойности или липсващи набори.



Нека проучим по-нататък какво правят тези съединения, как работят и как можем да ги използваме в SQL база данни.



Изисквания:

За този урок ще работим с MySQL 8.0 и ще използваме примерната база данни Sakila. Въпреки това не се колебайте да използвате всеки друг набор от данни, който смятате за приложим.





Видове външни съединения

В SQL има три основни типа ВЪНШНИ СЪЕДИНЕНИЯ. Тези типове ВЪНШНИ СЪЕДИНЕНИЯ включват:

  1. Ляво ВЪНШНИ СЪЕДИНЕНИЯ

  2. В случай на LEFT OUTER JOINS, съединението извлича всички редове от лявата таблица и само съответстващите редове от дясната таблица. Ако няма съответстващи редове от дясната таблица, съединението връща стойностите NULL за колоните в дясната таблица.



  3. Десен OUTER JOINS

  4. Това е подобно на RIGHT OUTER JOIN. Той обаче извлича всички редове от дясната таблица, но само съответстващите редове от лявата таблица. Ако няма съответстващи редове от лявата таблица, съединението включва NULL стойностите за колоните в лявата таблица.

  5. ПЪЛНИ ВЪНШНИ СЪЕДИНЕНИЯ

  6. И накрая, имаме ПЪЛНИТЕ ВЪНШНИ СЪЕДИНЕНИЯ. Този тип свързване съчетава ДЯСНОТО и ЛЯВОТО външно свързване. В резултат на това съединението извлича всички редове, когато има съвпадение в лявата или дясната таблица. Ако няма съвпадение, съединението връща стойностите NULL за колоните от таблицата без съвпадение.

Синтаксис на SQL OUTER JOIN

Следното изразява синтаксиса на SQL OUTER JOIN. Въпреки това е добре да имате предвид, че синтаксисът може леко да варира в зависимост от целевата база данни.

Следното е обща структура:

ИЗБЕРЕТЕ колони
ОТ таблица1
[НАЛЯВО | ДЯСНО | ПЪЛЕН] OUTER JOIN таблица2
НА table1.column_name = table2.column_name;

Синтаксисът на OUTER JOIN в SQL е доста разбираем.

Примери:

Нека разгледаме примерна употреба за това как можем да приложим различните типове OUTER JOINS в SQL.

Както споменахме, ще използваме примерната база данни на Sakila за демонстрация. В този случай използваме таблиците „клиент“ и „плащане“.

Пример 1: ЛЯВО ВЪНШНО СЪЕДИНЕНИЕ

Нека започнем с OUTER JOIN. Да предположим, че искаме да извлечем цялата информация за клиента заедно с информацията за плащането им, ако има такава.

Това прави LEFT OUTER JOIN приложим, тъй като искаме цялата информация за клиента (вляво) и информация за плащане, ако е налична (вдясно).

Ако клиентът не е направил плащане, присъединяването ще покаже NULL стойностите за колоните, свързани с плащането.

Пример е следният:

ИЗБЕРЕТЕ
c.customer_id,
c.first_name,
c.last_name,
p.сума,
p.payment_date
ОТ
клиент c
ЛЯВО ВЪНШНО СЪЕДИНЯВАНЕ плащане стр
НА
c.customer_id = p.customer_id;

В дадената заявка включваме колоните „customer_id“, „first_name“ и „last_name“ от таблицата „customer“. Ние също така включваме сумата и „дата на плащане“ от таблицата „плащане“.

След това извършваме LEFT OUTER JOIN между таблиците „customer“ и „payment“ въз основа на „customer_id“.

Това са всички клиенти (независимо дали е извършено плащане или не) заедно с техните данни за плащане (ако има такива).

Примерен изход е както следва:

Пример 2: ДЯСНО ВЪНШНО СЪЕДИНЕНИЕ

Сега нека да преминем към ДЕСНОТО ВЪНШНО СЪЕДИНЕНИЕ. Да предположим, че искаме да включим цялата информация за плащане и свързания клиент в този случай, ако има такъв.

В този случай, ако плащането е направено от клиент, присъединяването ще покаже подробностите за този клиент. Ако има плащане без асоцииран клиент, то ще покаже NULL стойностите за свързаните с клиента колони.

ИЗБЕРЕТЕ
c.customer_id,
c.first_name,
c.last_name,
p.сума,
p.payment_date
ОТ
клиент c
RIGHT OUTER JOIN плащане p
НА
c.customer_id = p.customer_id;

Полученият набор е както следва:

Пример 3: ПЪЛНО ВЪНШНО СЪЕДИНЯВАНЕ

FULL OUTER JOIN, от друга страна, извлича цялата информация за клиентите и плащанията. Това включва всички клиенти и всички плащания и показва NULL стойностите, където няма съответствие между таблиците.

ИЗБЕРЕТЕ
c.customer_id,
c.first_name,
c.last_name,
p.сума,
p.payment_date
ОТ
клиент c
FULL OUTER JOIN плащане p
НА
c.customer_id = p.customer_id;

Добре е да имате предвид, че MySQL не поддържа първоначално FULL OUTER JOIN. Трябва да направите малко джиуджицу магия с ЛЯВОТО СЪЕДИНЕНИЕ, СЪЕДИНЕНИЕТО и ДЕСНОТО СЪЕДИНЯВАНЕ. Доста досадно, можем да добавим.

Заключение

В този урок научихме всичко за OUTER JOINS. Научихме какво е OUTER JOIN в SQL, видовете OUTER JOIN и примерите как да използваме тези типове OUTER JOIN.