Både indre og ytre sammenføyninger brukes til å kombinere data fra to eller flere tabeller; det er imidlertid noen viktige forskjeller! Les denne artikkelen for å finne ut styrken til hver kommando og når du skal bruke dem.
For å få mest mulig ut av dette og andre leksjoner, må du øve på å bruke eksemplene!
Alle eksempler på denne leksjonen er basert på Microsoft SQL Server Management Studio og AdventureWorks2012-databasen. Kom i gang med å bruke disse gratisverktøyene ved hjelp av min guide Komme i gang med SQL Server.
Hva er forskjellen mellom indre sammenføyninger og ytre sammenføyninger?
Indre og ytre sammenføyninger er kombinasjonsrader fra to eller to flere tabeller til et enkelt resultat ved hjelp av en sammenkoblingsbetingelse Sammenføyningsbetingelsen spesifiserer hvordan kolonner fra hver tabell blir matchet med hverandre. I de fleste tilfeller er målet å finne like verdier mellom tabellene og inkludere disse treffene.
Det vanligste tilfellet for dette er når du samsvarer den fremmede nøkkelen til en tabell med den primære nøkkelen til en annen. , for eksempel når du bruker og ID for å slå opp en verdi.
Selv om både indre og ytre sammenføyninger inkluderer rader fra begge tabeller når samsvarstilstanden er vellykket, er de forskjellige i hvordan de håndterer en feil samsvarstilstand.
Indre sammenføyninger inkluderer ikke rader som ikke samsvarer; mens ytre skjøter inkluderer dem.
La oss grave litt dypere inn i mekanikken til hver
Inner Join Mechanics
En indre sammenføyning brukes til å gi resultater ved å kombinere rader fra to eller flere tabeller.
I sitt enkleste tilfelle, der det ikke er noen sammenføyningsbetingelse, vil en indre sammenføyning kombinere alle rader fra en tabell med de fra en annen. Hvis den første tabellen inneholdt tre rader, og den andre, fire, ville det endelige resultatet inneholde tolv (3 x 4 = 12)!
Formålet med sammenkoblingsbetingelsen er å begrense hvilke rader som kombineres. I de fleste tilfeller begrenser vi rader til de som samsvarer med en kolonne.
Hvis en person har mer enn ett telefonnummer, blir det laget mer enn ett treff. Fra dette kan du se at vi kan få flere rader tilbake enn vi har for hver person.
Omvendt, hvis en person ikke har noe telefonnummer, vil det ikke være en oppføring i PersonPhone, og ingen samsvar er laget. Den aktuelle personen vil ikke bli inkludert i resultatene, da bare de med treff er inkludert.
La oss prøve et eksempel.
Eksempel på indre sammenføyning
Anta HR Manager ønsker å opprette en telefonkatalog. De vil ha personens fornavn, etternavn, tittel og telefonnummer. Hvilket spørsmål kan du bruke til å lage dette?
Her er en som kan gjøre susen:
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 spesifiserer hvilke tabeller å bli med og kampvilkåret for å gjøre det. Betingelsen PH.Phone NumberTyeID = 3 begrenser spørringen til arbeidsnumre.
Hvis du kjører ovenstående, får du følgende resultater:
Husk at den indre sammenføyningen bare returnerer rad der kamptilstanden er sant. I dette eksemplet er ikke radene der BusinessEntityID ikke stemmer overens, inkludert. Dette kan være et problem hvis en person ikke har et telefonnummer, da de ansatte ikke ville være på listen.
Hvis du ønsker å inkludere disse ansatte, kan du bruke en ytre sammenkobling.
Mekanikk for ytre sammenføyning
En ytre sammenføyning brukes til å gi resultater ved å kombinere rader fra to eller flere tabeller. Men i motsetning til en indre sammenføyning, vil den ytre sammenføyningen returnere hver rad fra en spesifisert tabell, selv om tilknytningsbetingelsen mislykkes.
Ta eksemplet med telefonkatalogen ovenfor. Hvis HR-sjefen ønsket å liste opp hver ansatt, uavhengig av om de hadde et arbeidstelefonnummer, ville det være slik å bruke en ytre sammenføyning.
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
Du kan lære mer om venstre og høyre ytre sammenføyning i denne artikkelen, for nå er det bare å forstå at når en VENSTRE YTRE JOIN brukes, er alle radene for tabellen i FROM-leddet inkludert i resultatet, selv om det ikke finnes en kamp med annen tabell.
Når et treff ikke blir funnet, plasseres en NULL i kolonnen.
Du kan se dette i handling nedenfor:
Legg merke til i eksemplet Telefonnummer for Catherine Abel er NULL. Dette er fordi Catharines arbeidsnummer ikke er oppført, og ingen treff ble funnet under sammenføyningen.
Hvis dette ville ha vært en indre sammenføyning, ville denne raden ikke blitt inkludert i resultatene.