Iekšējā pievienošanās pret ārējo pievienošanos
Iekšējais savienojums un ārējais savienojums ir divas no SQL savienošanas metodēm, ko izmanto datu bāzu vaicājumu apstrādē. Tie pieder pievienošanās klauzulu saimei (pārējās divas ir kreisās un labās puses pievienošanās). Tomēr ir Self Join, ko var izmantot specializētās situācijās. Savienojuma mērķis ir apvienot laukus, izmantojot abu tabulu kopējās vērtības. Šie savienojumi apvieno ierakstus no vairākām tabulām datu bāzē. Tas izveido rezultējošās kopas, kuras var saglabāt kā citu tabulu.
Kas ir iekšējā pievienošanās?
Visbiežāk izmantotā SQL savienojuma darbība ir iekšējā savienošana. To var uzskatīt par noklusējuma savienojuma veidu, ko izmanto lietojumprogrammās. Iekšējais savienojums izmantojiet savienojuma predikātu, lai apvienotu divas tabulas. Pieņemot, ka abas tabulas ir A un B, savienojuma predikāts salīdzinās A un B rindas, lai noskaidrotu visus pārus, kas atbilst predikātam. Lai izveidotu rezultātu, tiek apvienotas visu apmierināto A un B tabulu rindu kolonnu vērtības. Var uzskatīt, ka vispirms tiek ņemts krusteniskais savienojums (Dekarta reizinājums) no visiem ierakstiem un pēc tam tiek atgriezti tikai tie ieraksti, kas atbilst savienojuma predikātam. Taču patiesībā Dekarta precizitāti neaprēķina, jo tas ir ļoti neefektīvs. Tā vietā tiek izmantots jauktais savienojums vai kārtošanas-apvienošanas savienojums.
Kas ir ārējā pievienošanās?
Atšķirībā no iekšējā savienojuma, ārējais savienojums saglabā visus ierakstus, pat ja nevar atrast atbilstošu ierakstu. Tas nozīmē, ka ārējai savienošanai ir nepieciešams ieraksts, lai atrastu atbilstošu ierakstu, lai tas tiktu parādīts rezultātā. Tā vietā tas atgriezīs visus ierakstus, bet nesaskaņotajiem ierakstiem būs nulles vērtības. Ārējie savienojumi ir sadalīti trīs apakškategorijās. Tie ir pa kreisi ārējais savienojums, labais ārējais savienojums un pilns ārējais savienojums. Šī diferenciācija ir balstīta uz to, kuras tabulas rinda (kreisā tabula, labā tabula vai abas tabulas) tiek saglabāta, kad tiek atrasti nesaskaņoti ieraksti. Kreisās ārējās savienošanas (pazīstamas arī kā vienkārši kreisās pievienošanās) saglabā visus kreisās tabulas ierakstus. Tas nozīmē, ka pat tad, ja skaitļu atbilstības ieraksti ir nulle, tam joprojām būs ieraksti rezultātu tabulā, bet visām B kolonnām būs nulles vērtības. Citiem vārdiem sakot, visas vērtības no kreisās tabulas tiek atgrieztas ar atbilstošām vērtībām no labās puses. tabula (vai nulles vērtības, ja tās nav saskaņotas). Ja vērtības no vairākām rindām no kreisās tabulas tiek saskaņotas ar vienu rindu no labās tabulas, rinda no labās tabulas tiks atkārtota pēc vajadzības. Labais ārējais savienojums ir diezgan līdzīgs kreisajam ārējam savienojumam, taču tiek cienīta attieksme pret tabulām. Tas nozīmē, ka rezultātam vismaz vienu reizi būs visas labās tabulas rindas ar atbilstošām kreisās puses tabulas vērtībām (un nulles vērtībām nesaskaņotām labajām vērtībām). Pilns ārējais savienojums ir visaptverošāks nekā gan kreisais, gan labais ārējais savienojums. Tā rezultātā tiek apvienots gan kreisās, gan labās puses ārējās puses uzklāšanas efekts.
Kāda ir atšķirība starp iekšējo savienojumu un ārējo savienojumu?
Iekšējā savienošana nesaglabā rezultāta nesaskaņotās rindas, bet ārējā savienošana saglabās visus ierakstus no vismaz vienas tabulas (atkarībā no tā, kurš ārējais savienojums ir izmantots). Tāpēc, ka rezultātu tabulas nesaskaņotajās rindās nav informācijas, nav vēlama, jums vienmēr ir jāizmanto viens no ārējiem savienojumiem (iekšējās savienojuma vietā). Iekšējā savienošana var nesniegt rezultātu, ja netiek atrasta neviena atbilstība. Taču ārējā savienošana vienmēr radīs rezultāta tabulu, pat ja nav atbilstošu rindu. Iekšējais savienojums vienmēr atgriezīs tabulas ar vērtībām (ja atgrieztas). Taču ārējo savienojumu rezultātā var tikt izveidotas tabulas ar nulles vērtībām.