A belső és a külső összekapcsolást két vagy több táblázatból származó adatok egyesítésére használják; van azonban néhány kulcsfontosságú különbség! Olvassa el ezt a cikket, hogy megtudja az egyes parancsok erősségeit és mikor használja őket.
Ennek és a többi leckénknek a lehető legtöbb kihasználásához mindenképpen gyakorolja a példák használatát!
Minden A lecke példái a Microsoft SQL Server Management Studio és az AdventureWorks2012 adatbázisra épülnek. Kezdje el kezdeni ezeket az ingyenes eszközöket az Útmutató segítségével Az első lépések az SQL Server használatához.
Mi a különbség a belső illesztések és a külső illesztések között?
A belső és a külső összekapcsolás két vagy több kombinált sor. több táblázat egyetlen találatba egy csatlakozási feltétel felhasználásával. A csatlakozási feltétel megadja, hogy az egyes táblázatok oszlopai hogyan illeszkednek egymáshoz. A legtöbb esetben az a cél, hogy egyenlő értékeket találjanak a táblák között, és belefoglalják ezeket az egyezéseket.
Ennek leggyakoribb esete, amikor az egyik tábla idegen kulcsát egy másik elsődleges kulcsához igazítja. , például amikor az érték és az ID használatával értéket keres.
Bár a belső és a külső összekapcsolás mindkét táblázatból tartalmaz sorokat, ha az egyezés feltétele sikeres, különböznek abban, hogy miként kezelik a hamis egyezési feltételt.
A belső csatlakozások nem tartalmaznak nem egyező sorokat; míg a külső illesztések tartalmazzák is őket.
Vessünk egy kicsit mélyebb mélységet mindegyik mechanikájában.
Belső illesztés mechanikája
Belső illesztést használunk az eredmények visszaadásához két vagy több táblázatból álló sorok kombinálásával.
A legegyszerűbb esetben, amikor nincs összekapcsolási feltétel, egy belső összekapcsolás egyesíti az egyik táblázat összes sorát a másikéval. Ha az első táblázat három sort tartalmazna, a második pedig négyet, akkor a végeredmény tizenkettőt tartalmazna (3 x 4 = 12)!
A csatlakozási feltétel célja az egyesített sorok korlátozása. A legtöbb esetben a sorokat csak az oszlopnak megfelelőekre korlátozzuk.
Ha egy személynek több telefonszáma van, akkor egynél több egyezés történik. Ebből láthatja, hogy több sort adhatunk vissza, mint amennyit minden egyes személyhez megadunk.
Ezzel szemben, ha egy személynek nincs telefonszáma, akkor a PersonPhone-ban nem lesz bejegyzés, és nem történt egyezés. Az a bizonyos személy nem szerepel az eredmények között, mivel csak az egyezéssel rendelkező személyek szerepelnek benne.
Próbáljunk ki egy példát.
Belső csatlakozási példa
Tegyük fel, hogy a HR menedzser telefonkönyvt akar létrehozni. Azt akarják, hogy az illető keresztneve, vezetékneve, címe és telefonszáma legyen. Milyen lekérdezést használhatna ennek létrehozásához?
Itt van egy trükk:
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
Az INNER JOIN meghatározza, hogy mely táblák csatlakozni, és ennek a mérkőzés feltétele. A PH.Phone NumberTyeID = 3 feltétel a lekérdezést munkaszámokra korlátozza.
Ha a fentieket futtatja, a következő eredményeket kapja:
Ne feledje, hogy a belső illesztés csak azt a sort adja vissza, ahol az egyezési feltétel igaz. Ebben a példában nem szerepelnek azok a sorok, amelyekben a BusinessEntityID nem egyezik. Ez problémát jelenthet, ha egy személynek nincs telefonszáma, mivel ezek az alkalmazottak nem lennének a listán.
Ha fel akarja venni ezeket az alkalmazottakat, használhat külső csatlakozást.
Külső illesztés mechanikája
Egy külső illesztést használnak az eredmények visszaadásához két vagy több táblázat sorainak kombinálásával. De a belső összekapcsolással ellentétben a külső összekapcsolás minden egyes táblázat táblázatát visszaadja, még akkor is, ha az összekapcsolási feltétel meghiúsul.
Vegyük a fenti telefonkönyv példát. Ha a HR-menedzser minden alkalmazottat fel akarna sorolni, függetlenül attól, hogy van-e munkahelyi telefonszáma, akkor egy külső csatlakozás használatával ez így lesz.
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
Megteheti Tudjon meg többet a bal és a jobb külső összekapcsolásról ebben a cikkben, egyelőre csak azt kell megértenie, hogy ha LEFT OUTER JOIN-t használunk, akkor a FROM záradék táblázatának minden sora benne lesz az eredményben, még akkor is, ha nem található egyezés a másik táblázat.
Ha nem található egyezés, akkor NULL kerül az oszlopba.
Ezt az alábbi műveletben láthatja:
Figyelem a példában Catherine Abel telefonszáma NULL. Ez azért van, mert Catherine munkaszáma nincs felsorolva, és a csatlakozás során sem található egyezés.
Ha ez belső csatlakozás lett volna, akkor ez a sor nem lett volna benne az eredményekben.