Atât îmbinările interioare, cât și cele externe sunt utilizate pentru a combina date din două sau mai multe tabele; cu toate acestea, există câteva diferențe cheie! Citiți acest articol pentru a afla punctele forte ale fiecărei comenzi și când să le utilizați.
Pentru a profita la maximum de acest lucru și de celelalte lecții ale noastre, asigurați-vă că practicați folosind exemplele!
Toate exemple pentru această lecție se bazează pe Microsoft SQL Server Management Studio și baza de date AdventureWorks2012. Începeți să utilizați aceste instrumente gratuite folosind Ghidul meu Noțiuni introductive despre SQL Server.
Care este diferența dintre îmbinările interioare și îmbinările exterioare?
Îmbinările interioare și externe sunt rânduri de combinație de la două sau mai multe tabele într-un singur rezultat folosind o condiție de asociere. Condiția de asociere specifică modul în care coloanele din fiecare tabel sunt potrivite între ele. În majoritatea cazurilor, scopul este de a găsi valori egale între tabele și de a include aceste potriviri.
Cel mai frecvent caz pentru acest lucru este atunci când se potrivește cheia străină a unui tabel cu cheia principală a altuia , cum ar fi atunci când utilizați și ID pentru a căuta o valoare.
Deși ambele îmbinări interioare și externe includ rânduri din ambele tabele atunci când condiția de potrivire este reușită, acestea diferă în modul în care gestionează o condiție de potrivire falsă.
Îmbinările interioare nu includ rânduri care nu se potrivesc; întrucât, îmbinările exterioare le includ.
Să sapăm puțin mai adânc în mecanica fiecăruia
Mecanica de îmbinare interioară
O îmbinare interioară este utilizată pentru a returna rezultatele prin combinarea rândurilor din două sau mai multe tabele.
În cel mai simplu caz, în care nu există condiția de îmbinare, o îmbinare interioară ar combina toate rândurile dintr-un tabel cu cele din altul. Dacă primul tabel ar conține trei rânduri, iar al doilea, patru, atunci rezultatul final ar conține douăsprezece (3 x 4 = 12)!
Scopul condiției de asociere este de a limita care rânduri sunt combinate. În majoritatea cazurilor, limităm rândurile la cele care se potrivesc cu o coloană.
Dacă o persoană are mai multe numere de telefon, atunci se face mai mult de o potrivire. Din aceasta, puteți vedea că putem obține mai multe rânduri returnate decât avem pentru fiecare persoană.
În schimb, dacă o persoană nu are un număr de telefon, atunci nu va exista o intrare în PersonPhone și nu va exista nicio potrivire. Persoana respectivă nu va fi inclusă în rezultate, deoarece sunt incluse doar cele cu potriviri.
Să încercăm un exemplu.
Exemplu de îmbinare interioară
Să presupunem Managerul de resurse umane dorește să creeze un director telefonic. Vor numele, prenumele, titlul și numerele de telefon ale persoanei. Ce interogare ați putea folosi pentru a crea acest lucru?
Iată una care ar face trucul:
SELECT P.FirstName, P.LastName, P.Title, PH.PhoneNumberFROM Person.Person AS P INNER JOIN Person.PersonPhone AS PH ON P.BusinessEntityID = PH.BusinessEntityID AND PH.PhoneNumberTypeID = 3ORDER BY P.LastName
INNER JOIN specifică ce tabele să vă alăturați și condiția meciului pentru a face acest lucru. Condiția PH.Phone NumberTyeID = 3 limitează interogarea la numerele de lucru.
Dacă executați cele de mai sus, obțineți următoarele rezultate:
Rețineți că îmbinarea interioară returnează numai rândul în care condiția de potrivire este adevarat. În acest exemplu, rândurile în care ID-ul BusinessEntity nu se potrivesc nu sunt incluse. Aceasta ar putea fi o problemă dacă o persoană nu are un număr de telefon, deoarece acei angajați nu ar fi pe listă.
Dacă doriți să îi includeți pe acești angajați, puteți utiliza o înscriere externă.
Mecanica de îmbinare exterioară
O îmbinare exterioară este utilizată pentru a returna rezultate prin combinarea rândurilor din două sau mai multe tabele. Dar, spre deosebire de o îmbinare interioară, îmbinarea exterioară va reveni la fiecare rând dintr-un tabel specificat, chiar dacă condiția de îmbinare eșuează.
Luați exemplul de director telefonic de mai sus. Dacă managerul de resurse umane ar dori să enumere fiecare angajat, indiferent dacă a avut un număr de telefon la serviciu, atunci utilizarea unei îmbinări exterioare ar face ca acest lucru să fie așa.
SELECT P.FirstName, P.LastName, P.Title, PH.PhoneNumberFROM Person.Person AS P LEFT OUTER JOIN Person.PersonPhone AS PH ON P.BusinessEntityID = PH.BusinessEntityID AND PH.PhoneNumberTypeID = 3ORDER BY P.LastName
Puteți Aflați mai multe despre îmbinările exterioare stânga și dreapta în acest articol, deocamdată înțelegeți că atunci când este utilizată o ÎNCHIDERE EXTERNĂ STÂNGĂ, toate rândurile pentru tabelul din clauza FROM sunt incluse în rezultat, chiar dacă nu se găsește o potrivire cu alt tabel.
Când nu se găsește o potrivire, atunci se plasează un NULL în coloană.
Puteți vedea acest lucru în acțiune mai jos:
Observați în exemplu Numărul de telefon pentru Catherine Abel este NUL. Acest lucru se datorează faptului că numărul de lucru al Catherinei nu este listat și nu s-a găsit nicio potrivire în timpul înscrierii.
Dacă ar fi fost o îmbinare interioară, atunci acest rând nu ar fi fost inclus în rezultate.