Diferența dintre îmbinarea interioară și îmbinarea exterioară

Diferența dintre îmbinarea interioară și îmbinarea exterioară
Diferența dintre îmbinarea interioară și îmbinarea exterioară

Video: Diferența dintre îmbinarea interioară și îmbinarea exterioară

Video: Diferența dintre îmbinarea interioară și îmbinarea exterioară
Video: SRS and BRS 2024, Iulie
Anonim

Alăturare interioară vs. alăturare exterioară

Inner join și Outer join sunt două dintre metodele de îmbinare SQL utilizate în procesarea interogărilor pentru baze de date. Ele aparțin familiei de clauze de unire (altele două fiind uniuni de stânga și de dreapta). Cu toate acestea, există un Self Join care poate fi folosit pentru situații specializate. Scopul Join este de a combina câmpuri folosind valorile comune celor două tabele. Aceste îmbinări combină înregistrările din mai multe tabele într-o bază de date. Se creează seturi rezultate, care pot fi salvate ca alt tabel.

Ce este Inner Join?

Cea mai des folosită operațiune SQL Join este Inner Join. Poate fi considerat ca tipul implicit de îmbinare utilizat în aplicații. Îmbinarea internă folosește predicatul de îmbinare pentru a combina două tabele. Presupunând că cele două tabele sunt A și B, atunci predicatul de unire va compara rândurile lui A și B pentru a afla toate perechile care satisfac predicatul. Valorile coloanelor tuturor rândurilor satisfăcute ale tabelelor A și B sunt combinate pentru a crea rezultatul. Poate fi privit ca luând mai întâi îmbinarea încrucișată (produsul cartezian) a tuturor înregistrărilor și apoi returnând numai înregistrările care satisfac predicatul de îmbinare. Cu toate acestea, în realitate, produsul cartezian nu este calculat deoarece este foarte ineficient. În schimb, se utilizează alăturarea prin hash sau îmbinarea sortării.

Ce este Outer Join?

Spre deosebire de Inner join, outer join păstrează toate înregistrările chiar dacă nu poate găsi o înregistrare care se potrivește. Aceasta înseamnă că outer join are nevoie de o înregistrare pentru a găsi o înregistrare care să se potrivească pentru ca aceasta să apară în rezultat. În schimb, va returna toate înregistrările, dar înregistrările nepotrivite vor avea valori nule. Îmbinările exterioare sunt împărțite în trei subcategorii. Acestea sunt îmbinare exterioară stângă, îmbinare exterioară dreaptă și îmbinare exterioară completă. Această diferențiere se bazează pe rândul tabelului (tabel din stânga, tabel din dreapta sau ambele tabele) care este reținut atunci când sunt găsite înregistrări nepotrivite. Left outer joins (cunoscut și sub denumirea pur și simplu left join) păstrează toate înregistrările din tabelul din stânga. Aceasta înseamnă că, chiar dacă numărul de înregistrări care se potrivește este zero, atunci va avea în continuare înregistrări în tabelul cu rezultate, dar va avea valori nule pentru toate coloanele din B. Cu alte cuvinte, toate valorile din tabelul din stânga sunt returnate cu valorile potrivite din dreapta. tabel (sau valori nule când nu sunt corelate). Dacă valorile din mai multe rânduri din tabelul din stânga sunt potrivite cu un singur rând din tabelul din dreapta, rândul din tabelul din dreapta va fi repetat după cum este necesar. Uniunea exterioară dreaptă este aproape similară cu îmbinarea exterioară stângă, dar tratamentul tabelelor este venerat. Aceasta înseamnă că rezultatul va avea toate rândurile din tabelul din dreapta cel puțin o dată cu valori potrivite din tabelul din stânga (și valori nule pentru valorile din dreapta nepotrivite). Îmbinarea exterioară completă este mai cuprinzătoare decât îmbinările exterioare stânga și dreapta. Are ca rezultat combinarea efectului aplicării ambelor părți din stânga și din dreapta unite împreună.

Care este diferența dintre Inner Join și Outer Join?

Inner Join nu păstrează rândurile nepotrivite în rezultat, dar outer join va păstra toate înregistrările din cel puțin un tabel (în funcție de îmbinarea exterioară utilizată). Deci, comportamentul de a nu avea informații prezente pe rândurile nepotrivite din tabelul de rezultate este nedorit, trebuie să utilizați întotdeauna una dintre îmbinările exterioare (în locul îmbinării interioare). Uniunea internă poate să nu producă un rezultat dacă nu se găsesc potriviri. Dar îmbinarea exterioară va produce întotdeauna un tabel rezultat, chiar și fără rânduri care se potrivesc. Inner join va returna întotdeauna tabele cu valori (dacă este returnată). Dar îmbinările exterioare pot avea ca rezultat tabele cu valori nule.

Recomandat: