Både indre og ydre sammenføjninger bruges til at kombinere data fra to eller flere tabeller; der er dog nogle vigtige forskelle! Læs denne artikel for at finde ud af styrken på hver kommando, og hvornår du skal bruge dem.
For at få mest muligt ud af dette og vores andre lektioner skal du sørge for at øve dig ved at bruge eksemplerne!
Alle eksempler på denne lektion er baseret på Microsoft SQL Server Management Studio og AdventureWorks2012-databasen. Kom godt i gang med disse gratis værktøjer ved hjælp af min vejledning Kom godt i gang ved hjælp af SQL Server.
Hvad er forskellen mellem indre forbindelser og ydre sammenføjninger?
Indvendige og ydre sammenføjninger er kombinerede rækker fra to eller to flere tabeller til et enkelt resultat ved hjælp af en tilslutningsbetingelse. Forbindelsesbetingelsen specificerer, hvordan kolonner fra hver tabel matches med hinanden. I de fleste tilfælde er målet at finde lige værdier mellem tabellerne og inkludere disse matches.
Det mest almindelige tilfælde for dette er, når du matche den fremmede nøgle i en tabel til den primære nøgle til en anden , f.eks. når du bruger og ID for at slå en værdi op.
Selvom både indre og ydre sammenføjninger inkluderer rækker fra begge tabeller, når matchbetingelsen er vellykket, adskiller de sig i, hvordan de håndterer en falsk matchbetingelse.
Indvendige sammenføjninger inkluderer ikke ikke-matchende rækker; hvorimod ydre sammenføjninger inkluderer dem.
Lad os grave lidt dybere ned i mekanikken for hver
Indre sammenføjningsmekanik
En indre sammenføjning bruges til at returnere resultater ved at kombinere rækker fra to eller flere tabeller.
I det enkleste tilfælde, hvor der ikke er nogen sammenføjningsbetingelse, vil en indre sammenføjning kombinere alle rækker fra en tabel med dem fra en anden. Hvis den første tabel indeholdt tre rækker, og den anden, fire, ville det endelige resultat indeholde tolv (3 x 4 = 12)!
Formålet med sammenføjningsbetingelsen er at begrænse, hvilke rækker der kombineres. I de fleste tilfælde begrænser vi rækker til dem, der matcher en kolonne.
Hvis en person har mere end et telefonnummer, foretages der mere end et match. Herfra kan du se, at vi muligvis får flere rækker tilbage, end vi har for hver person.
Omvendt, hvis en person ikke har noget telefonnummer, er der ikke en post i PersonPhone, og der er ikke foretaget nogen match. Den pågældende person medtages ikke i resultaterne, da kun dem med matches er inkluderet.
Lad os prøve et eksempel.
Eksempel på indre sammenføjning
Antag HR Manager ønsker at oprette et telefonkatalog. De vil have personens fornavn, efternavn, titel og telefonnumre. Hvilken forespørgsel kan du bruge til at oprette dette?
Her er en, der ville gøre tricket:
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 specificerer hvilke tabeller at deltage og matchbetingelsen for at gøre det. Betingelsen PH.Phone NumberTyeID = 3 begrænser forespørgslen til arbejdsnumre.
Hvis du kører ovenstående, får du følgende resultater:
Husk, at den indre sammenføjning kun returnerer række, hvor kamptilstanden er sandt. I dette eksempel er de rækker, hvor BusinessEntityID ikke stemmer overens, ikke inkluderet. Dette kan være et problem, hvis en person ikke har et telefonnummer, da disse medarbejdere ikke ville være på listen.
Hvis du ønsker at medtage disse medarbejdere, kan du bruge en ydre sammenføjning.
Mekanik for ydre sammenføjninger
En ydre sammenføjning bruges til at returnere resultater ved at kombinere rækker fra to eller flere tabeller. Men i modsætning til en indre sammenføjning returnerer den ydre sammenføjning hver række fra en angivet tabel, selvom tilslutningsbetingelsen mislykkes.
Tag eksemplet med telefonbogen ovenfor. Hvis HR-chefen ville liste hver medarbejder, uanset om de havde et arbejdstelefonnummer, ville det ved at bruge en ydre sammenføjning gøre det.
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ær mere om venstre og højre ydre sammenføjning i denne artikel, for nu skal du bare forstå, at når en VENSTRE YDRE JOIN bruges, er alle rækker til tabellen i FROM-klausulen inkluderet i resultatet, selvom der ikke findes et match med anden tabel.
Når et match ikke findes, placeres en NULL i kolonnen.
Du kan se dette i handling nedenfor:
Bemærk i eksemplet Telefonnummer til Catherine Abel er NULL. Dette skyldes, at Catherines arbejdsnummer ikke er angivet, og der ikke blev fundet nogen match under tilmeldingen.
Hvis dette ville have været en indre sammenføjning, ville denne række ikke være inkluderet i resultaterne.