SQL Outer Join

Sql Outer Join



Este de la sine înțeles că îmbinările sunt una dintre caracteristicile cele mai identificabile ale bazelor de date relaționale. Unirile ne permit să combinăm datele dintr-unul sau mai multe tabele pe baza unei condiții asociate pentru a crea o operație de date coerentă.

Există diferite tipuri de îmbinări în SQL, fiecare având un mod unic de modul în care gestionează datele din tabelele participante sau din setul rezultat. Unul dintre cele mai comune tipuri de unire în SQL este un OUTER JOIN.







Un OUTER JOIN în SQL preia toate rândurile care se potrivesc din tabelele implicate, precum și rândurile nepotrivite din unul sau ambele tabele. Este util atunci când aveți de-a face cu tabele care conțin valori NULL sau seturi lipsă.



Să explorăm în continuare ce fac aceste îmbinări, cum funcționează și cum le putem folosi într-o bază de date SQL.



Cerințe:

Pentru acest tutorial, vom lucra cu MySQL 8.0 și vom folosi baza de date exemplu Sakila. Cu toate acestea, nu ezitați să utilizați orice alt set de date pe care îl considerați aplicabil.





Tipuri de îmbinări exterioare

Există trei tipuri principale de OUTER JOINS în SQL. Aceste tipuri de UNIUNI EXTERIOARE includ:

  1. Stânga OUTER JOINS

  2. În cazul LEFT OUTER JOINS, îmbinarea preia toate rândurile din tabelul din stânga și numai rândurile care se potrivesc din tabelul din dreapta. Dacă nu există rânduri care se potrivesc din tabelul din dreapta, îmbinarea returnează valorile NULL pentru coloanele din tabelul din dreapta.



  3. Dreapta UNIUNI EXTERIOARE

  4. Aceasta este similară cu un RIGHT OUTER JOIN. Totuși, preia toate rândurile din tabelul din dreapta, dar numai rândurile care se potrivesc din tabelul din stânga. Dacă nu există rânduri care se potrivesc din tabelul din stânga, îmbinarea include valorile NULL pentru coloanele din tabelul din stânga.

  5. ÎMPĂRĂRI EXTERIOARE COMPLETE

  6. În cele din urmă, avem FULL OUTER JOINS. Acest tip de îmbinare combină atât îmbinările exterioare DREAPTA, cât și cele STANGA. Ca rezultat, îmbinarea preia toate rândurile atunci când există o potrivire fie în tabelul din stânga, fie în cel din dreapta. Dacă nu există nicio potrivire, îmbinarea returnează valorile NULL pentru coloanele din tabel fără potrivire.

Sintaxa SQL OUTER JOIN

Următoarele exprimă sintaxa unui SQL OUTER JOIN. Cu toate acestea, este bine să rețineți că sintaxa poate varia ușor în funcție de motorul bazei de date țintă.

Următoarea este o structură generală:

SELECTAȚI coloanele
DIN tabelul 1
[STÂNGA | DREAPTA | FULL] OUTER JOIN table2
ON table1.column_name = table2.column_name;

Sintaxa unui OUTER JOIN în SQL este destul de explicită.

Exemple:

Să ne uităm la câteva exemple de utilizare despre cum putem aplica diferitele tipuri de OUTER JOINS în SQL.

După cum am menționat, vom folosi baza de date eșantion Sakila pentru demonstrație. În acest caz, folosim tabelele „client” și „plată”.

Exemplul 1: LEFT OUTER JOIN

Să începem cu un OUTER JOIN. Să presupunem că dorim să extragem toate informațiile despre clienți împreună cu informațiile de plată ale acestora, dacă sunt disponibile.

Acest lucru face aplicabilă o LEFT OUTER JOIN, deoarece dorim toate informațiile despre clienți (în stânga) și informațiile de plată, dacă sunt disponibile (dreapta).

Dacă clientul nu a efectuat nicio plată, unirea va afișa valorile NULL pentru coloanele legate de plată.

Un exemplu este următorul:

SELECTAȚI
c.client_id,
c.prenume,
c.nume,
p.cantitate,
p.data_plata
DIN
client c
plată LEFT OUTER JOIN p
PE
c.customer_id = p.customer_id;

În interogarea dată, includem coloanele „customer_id”, „first_name” și „last_name” din tabelul „customer”. Includem, de asemenea, suma și „data_plată” din tabelul „plată”.

Apoi efectuăm un LEFT OUTER JOIN între tabelele „client” și „plată” pe baza „customer_id”.

Aceștia sunt toți clienții (indiferent dacă plata a fost efectuată sau nu) împreună cu detaliile lor de plată (dacă există).

Un exemplu de ieșire este după cum urmează:

Exemplul 2: RIGHT OUTER JOIN

Acum, să trecem la UNIREA EXTERIOARĂ DREAPTA. Să presupunem că dorim să includem toate informațiile de plată și clientul asociat în acest caz, dacă este cazul.

În acest caz, dacă o plată este efectuată de un client, înscrierea va afișa detaliile clientului respectiv. Dacă există o plată fără client asociat, aceasta va afișa valorile NULL pentru coloanele legate de client.

SELECTAȚI
c.client_id,
c.prenume,
c.nume,
p.cantitate,
p.data_plata
DIN
client c
DREAPTA OUTER JOIN plata p
PE
c.customer_id = p.customer_id;

Setul rezultat este următorul:

Exemplul 3: FULL OUTER JOIN

O FULL OUTER JOIN, pe de altă parte, preia toate informațiile despre clienți și plata. Aceasta include toți clienții și toate plățile și arată valorile NULL în cazul în care nu există nicio potrivire între tabele.

SELECTAȚI
c.client_id,
c.prenume,
c.nume,
p.cantitate,
p.data_plata
DIN
client c
plată FULL OUTER JOIN p
PE
c.customer_id = p.customer_id;

Este bine să rețineți că MySQL nu acceptă în mod nativ un FULL OUTER JOIN. Trebuie să faci niște magie jiujitsu cu LEFT JOIN, UNION și RIGHT JOIN. Destul de enervant, am putea adăuga.

Concluzie

În acest tutorial, am învățat totul despre OUTER JOINS. Am învățat ce este un OUTER JOIN în SQL, tipurile de OUTER JOINS și exemplele de utilizare a acestor tipuri de OUTER JOINS.