Külső illesztések használata

Befejeződött

Bár nem olyan gyakori, mint a belső illesztések, a külső illesztések használata többtáblás lekérdezésekben alternatív nézetet biztosíthat az üzleti adatokról. A belső illesztésekhez hasonlóan a táblák közötti logikai kapcsolatot is kifejezheti. Azonban nem csak az egyező attribútumokkal rendelkező sorokat fogja lekérni, hanem az egyik vagy mindkét táblában található összes sort is, függetlenül attól, hogy a másik táblában van-e egyezés.

Korábban megtanulta, hogyan kereshet egyező sorokat két tábla között az INNER JOIN használatával. Mint láthatta, a lekérdezésfeldolgozó egy INNER JOIN lekérdezés eredményeit úgy hozza létre, hogy kiszűri azokat a sorokat, amelyek nem felelnek meg az ON záradék predikátumában kifejezett feltételeknek. Az eredmény az, hogy csak a másik táblában egyező sorú sorok lesznek visszaadva. Az OUTER JOIN beállítással megjelenítheti az összes olyan sort, amelynek egyező sorai vannak a táblák között, valamint az összes olyan sort, amelynek nincs egyezése a másik táblában. Tekintsünk meg egy példát, majd vizsgáljuk meg a folyamatot.

Először vizsgálja meg a következő, INNER JOIN-tal írt lekérdezést:

SELECT emp.FirstName, ord.Amount
FROM HR.Employee AS emp
INNER JOIN Sales.SalesOrder AS ord
    ON emp.EmployeeID = ord.EmployeeID;

Ezek a sorok egy egyezést jelentenek a HR.Employee és a Sales.SalesOrder között. Az eredményekben csak azok az EmployeeID értékek jelennek meg, amelyek mindkét táblában szerepelnek.

Venn-diagram az Alkalmazott és a SalesOrder készlet egyező tagjairól

Most vizsgáljuk meg a következő, LEFT OUTER JOIN néven írt lekérdezést:

SELECT emp.FirstName, ord.Amount
FROM HR.Employee AS emp
LEFT OUTER JOIN Sales.SalesOrder AS ord
    ON emp.EmployeeID = ord.EmployeeID;

Ez a példa egy LEFT OUTER JOIN operátort használ, amely arra utasítja a lekérdezésfeldolgozót, hogy megőrizze a bal oldali tábla összes sorát (HR). Alkalmazott) és megjeleníti a Sales.SalesOrder egyező sorainak Összeg értékeit. A rendszer azonban minden alkalmazottat visszaad, függetlenül attól, hogy lekérte-e az értékesítési rendelést. Az Összeg érték helyett a lekérdezés NULL értéket ad vissza azoknak az alkalmazottaknak, akiknek nincs megfelelő értékesítési rendelésük.

Venn-diagram az Alkalmazott és az Értékesítési Rendelések halmazainak külső kapcsolásának eredményeiről

KÜLSŐ ILLESZTÉS szintaxisa

A külső illesztések a BAL, a JOBB vagy a TELJES kulcsszóval vannak kifejezve a KÜLSŐ ILLESZTÉS előtt. A kulcsszó célja, hogy jelezze, melyik táblát (a JOIN kulcsszó melyik oldalán) kell megőrizni, és hogy az összes sor megjelenjen; egyezés, vagy nincs egyezés.

Ha a LEFT, a RIGHT vagy a FULL billentyűkombinációt használja az illesztés definiálásához, kihagyhatja az OUTER kulcsszót az itt látható módon:

SELECT emp.FirstName, ord.Amount
FROM HR.Employee AS emp
LEFT JOIN Sales.SalesOrder AS ord
    ON emp.EmployeeID = ord.EmployeeID;

Az INNER kulcsszóhoz hasonlóan azonban gyakran hasznos olyan kódot írni, amely kifejezetten a használt illesztés típusáról szól.

Ha az OUTER JOIN használatával ír lekérdezéseket, vegye figyelembe az alábbi irányelveket:

  • Mint láthatta, a tábla aliasai nem csak a SELECT lista, hanem az ON záradék esetében is előnyben részesülnek.
  • Az INNER JOIN-hez hasonlóan a KÜLSŐ ILLESZTÉS is elvégezhető egyetlen egyező oszlopon vagy több egyező attribútumon.
  • Az INNER JOIN-nal ellentétben, az OUTER JOIN esetén számít, hogy a táblákat milyen sorrendben soroljuk fel és kapcsoljuk össze a FROM záradékban, mivel ez határozza meg, hogy BAL- vagy JOBB OLDALI illesztést választunk.
  • A többtáblás illesztések összetettebbek, ha külső illesztés van jelen. A külső illesztés eredményeiben a NULL-ek jelenléte problémákat okozhat, ha a köztes eredmények ezután egy harmadik táblához csatlakoznak. A NULL-eket tartalmazó sorokat a második illesztés predikátuma szűrheti ki.
  • Ha csak olyan sorokat szeretne megjeleníteni, ahol nincs egyezés, adjon hozzá egy NULL-tesztet egy WHERE záradékban egy OUTER JOIN predikátumot követve.
  • A TELJES KÜLSŐ ILLESZTÉS ritkán használatos. Visszaadja a két tábla közötti összes egyező sort, valamint az első tábla összes sorát, amelyben nincs egyezés a másodikban, valamint a második összes sorát anélkül, hogy az elsőben egyezés lenne.
  • Az ORDER BY záradék nélkül nem lehet előrejelezni, hogy a sorok hogyan térnek vissza. Nem lehet tudni, hogy a párosított vagy a nem párosított sorok kerülnek-e előbb visszaadásra.