Kapcsolatok

Az Oracle által támogatott csatlakozási típusok SQL-ben: JOIN és mások. JOIN Teljes csatlakozási operátor leírás

Bármely adatbázis fejlesztése nem csak táblázatok létrehozását és különféle információkkal való kitöltését jelenti, hanem az adatokkal való további munkát is. A táblákból való adatok kiválasztására és a jelentések készítésére vonatkozó különféle feladatok helyes végrehajtásához a szabványos Select konstrukciót használjuk.

Adatok kiválasztása táblázatokból

Ha figyelembe vesszük az adatok kiválasztásának vagy valamilyen jelentés elkészítésének feladatát, akkor meghatározhatjuk ennek a műveletnek a bonyolultsági szintjét. Általános szabály, hogy ha komoly (az információ mennyiségét tekintve) adatbázisokkal dolgozik, amelyek például online áruházakban vagy nagyvállalatokban alakulnak ki, az adatok kiválasztása nem korlátozódik egyetlen táblázatra. Általános szabály, hogy a minták eléggé származhatnak egy nagy szám nemcsak összekapcsolt táblákat, hanem beágyazott lekérdezéseket/allekérdezéseket is, amelyeket a programozó maga állít össze, a neki rendelt feladattól függően. Egy táblázatból való választáshoz használhatja a legegyszerűbb konstrukciót:

Válassza a * személyt

ahol a Személy annak a táblának a neve, amelyből adatokat kell lekérni.

Ha több táblából kell adatokat kiválasztani, akkor a szabványos konstrukciók egyikével több tábla összekapcsolható.

További táblák csatlakoztatásának módjai

Ha figyelembe vesszük az ilyen szerkezetek használatát belépő szint, akkor a következő mechanizmusokat különböztethetjük meg a mintavételhez szükséges számú táblázat összekapcsolására, nevezetesen:

  1. Inner Join operátor.
  2. Left Join, vagy ez a második írásmód, Left Outer Join.
  3. keresztcsatlakozás.
  4. Teljes csatlakozás.

A táblázatos összekapcsolás operátorok használatát a gyakorlatban az SQL operátor - Inner Join használatának figyelembevételével lehet megtanulni. Egy példa a használatára így néz ki:

Válassza a * személyt

Az SQL nyelv és a Join Inner Join operátor nem csak két vagy több tábla összekapcsolására használható, hanem más allekérdezések összekapcsolására is, ami nagyban leegyszerűsíti az adatbázis-adminisztrátorok munkáját, és általában jelentősen felgyorsíthatja bizonyos táblák végrehajtását. összetett lekérdezések.

Adatok összevonása táblázatokban soronként

Ha fontolóra vesszük nagyszámú részlekérdezés összekapcsolását és az adatok soronkénti összeállítását egyetlen táblázatba, akkor az Union és Union All operátorok is használhatók.

Ezeknek a struktúráknak a használata a fejlesztő számára kitűzött feladattól és az elérni kívánt eredménytől függ.

Az Inner Join Operator leírása

A legtöbb esetben az Inner Join operátort használják több tábla összekapcsolására az SQL-ben. Az Inner Join leírása SQL-ben meglehetősen egyszerűen érthető egy átlagos programozó számára, aki csak most kezdi megérteni az adatbázisokat. Ha figyelembe vesszük ennek a kialakításnak a működési mechanizmusának leírását, a következő képet kapjuk. Az operátor egészének logikája arra a lehetőségre épül, hogy csak azokat az adatokat keresztezzük és jelöljük ki, amelyek a lekérdezésben szereplő táblákban szerepelnek.

Ha egy ilyen munkát a grafikus értelmezés szempontjából vizsgálunk, akkor az SQL Inner Join operátor felépítését kapjuk, amelyre egy példa az alábbi diagram segítségével mutatható be:

Például van két táblázatunk, amelyek sémája az ábrán látható. Ezeknek viszont különböző számú bejegyzésük van. Mindegyik tábla rendelkezik egymással összefüggő mezőkkel. Ha az ábra alapján próbáljuk megmagyarázni az operátor működését, akkor a visszaadott eredmény két tábla rekordhalmazaként jelenik meg, ahol a kapcsolódó mezők száma megegyezik. Egyszerűen fogalmazva, a lekérdezés csak azokat a rekordokat adja vissza (a kettes számú táblából), amelyek az első számú táblában tartalmaznak adatokat.

Inner Join Operator Syntax

Mint korábban említettük, az Inner Join operátor, nevezetesen a szintaxisa rendkívül egyszerű. A táblák közötti kapcsolatok megszervezéséhez ugyanazon a kijelölésen belül elegendő megjegyezni és használni a következő alapvető sémát egy operátor felépítéséhez, amely a program SQL kódjának egyik sorába van írva, nevezetesen:

  • Inner Join [Tábla neve] on [kulcsmező abból a táblából, amelyhez kapcsolódunk] = [A csatlakoztatandó tábla kulcsmezője].

Ebben az utasításban a kommunikációhoz a táblák fő kulcsait használjuk. Általános szabály, hogy az alkalmazottak adatait tároló táblák csoportjában a korábban leírt Személynek és Alosztálynak legalább egy hasonló rekordja van. Tehát nézzük meg közelebbről az Inner Join-t, amelyre egy példát egy kicsit korábban mutattunk be.

Példa és leírás egyetlen táblához való csatlakozásra

Rendelkezünk egy Személy táblával, amely a vállalatnál dolgozó összes alkalmazottról információkat tárol. Azonnal megjegyezzük, hogy ennek a táblának a fő kulcsa a Pe_ID mező. Csak rá, és menni fog a csomó.

A második alosztály tábla információkat tárol azokról a részlegekről, ahol az alkalmazottak dolgoznak. Ő viszont a Su_Person mezőn keresztül kapcsolódik a Személy táblához. Mit mond? Az adatséma alapján azt mondhatjuk, hogy az „Alkalmazottak” táblából minden rekordhoz tartozó osztályok táblázatában tájékoztatás lesz arról a részlegről, ahol dolgoznak. Ennél a kapcsolatnál fog működni az Inner Join operátor.

Az érthetőbb használat érdekében fontolja meg az SQL Inner Join operátort (példák a használatára egy és két táblához). Ha egy táblázatra vesszük a példát, akkor minden nagyon egyszerű:

Válassza a * személyt

Belső csatlakozás a Su_Person alosztályhoz = Pe_ID

Példa két tábla és egy segédlekérdezés összekapcsolására

Egy kicsit bonyolultabb elv szerint működik az SQL Inner Join operátor, amelynek több táblából történő adatkiválasztás használati esetei a fenti módon szervezhetők. Két tábla esetén bonyolítsuk a feladatot. Tegyük fel, hogy van egy Depart táblázatunk, amely az egyes részlegek összes részlegéről tárol információkat. Ebben a táblázatban az osztály létszáma és a dolgozó létszáma kerül rögzítésre, illetve az adatkiválasztást az egyes osztályok nevével kell kiegészíteni. A jövőre nézve érdemes elmondani, hogy a probléma megoldására két módszer használható.

Az első mód az, hogy a részlegtáblázatot összekapcsoljuk a kijelöléssel. Ebben az esetben a lekérdezést a következőképpen rendezheti:

Érdemes megjegyezni, hogy egy ilyen konstrukció nem mindig gyorsítja fel a lekérdezést. Néha előfordul, hogy egy ideiglenes táblában további adatkijelölést kell használni (ha túl nagy a mennyiségük), majd kombinálni kell a fő kijelöléssel.

Példa az Inner Join operátor használatára nagyszámú tábla kiválasztásához

Az összetett lekérdezések összeállítása jelentős számú egymással összekapcsolt táblát és allekérdezést jelent az adatok lekéréséhez. Az SQL Inner Join szintaxisa kielégítheti ezeket a követelményeket. Az operátor használatának példáit ebben az esetben nem csak a sok adattároló helyről történő kijelölések bonyolíthatják, hanem a nagyszámú beágyazott segédlekérdezés is. Egy konkrét példa esetében kiválaszthatja a rendszertáblázatokból származó adatokat (Inner Join SQL utasítás). Példa - 3 táblázat - ebben az esetben meglehetősen összetett szerkezetű lesz.

Ebben az esetben további három csatlakozik (a főtáblához), és több adatkiválasztási feltétel is megadásra kerül.

Az Inner Join operátor használatakor érdemes észben tartani, hogy minél összetettebb a lekérdezés, annál hosszabb ideig kerül megvalósításra, ezért érdemes keresni a feladat gyorsabb befejezésének és megoldásának módjait.

Következtetés

Végezetül egy dolgot szeretnék elmondani: az adatbázisokkal való munka nem a legnehezebb dolog a programozásban, ezért ha kívánja, teljesen mindenki elsajátíthatja az adatbázisok felépítésének ismereteit, és idővel, tapasztalatot szerezve, professzionális szinten lehet majd velük dolgozni .

Az SQL JOIN utasítás két vagy több adatbázistábla egyesítési feltétellel történő összekapcsolására szolgál. Ez az operátor csak relációs adatbázisokban létezik. A JOIN-nek köszönhető, hogy a relációs adatbázisok olyan hatékony funkcionalitással rendelkeznek, amely lehetővé teszi számukra, hogy ne csak adatokat tároljanak, hanem – legalábbis a legegyszerűbb módon – lekérdezések segítségével elemezzék azokat. Elemezzük az SQL lekérdezések JOIN operátorral történő írásának főbb árnyalatait, amelyek minden DBMS-re (adatbázis-kezelő rendszerre) jellemzőek. Két tábla összekapcsolásához az SQL JOIN utasítás a következő szintaxissal rendelkezik:

A TABLE_NAME_1 TÁBLÁBÓL KIVÁLASZTJA MEG A COLUMN_NAMES (1..N) OSZLOPOKAT CSATLAKOZÁS A TABLE_NAME_2 TÁBLÁZATHOZ, ÁLLAPOT

A JOIN operátorral való egy vagy több hivatkozás után egy opcionális WHERE vagy HAVING szakasz következhet, amelyben, csakúgy, mint egy egyszerű SELECT lekérdezésnél, a kiválasztási feltétel megadásra kerül. Minden DBMS-ben közös, hogy ebben a konstrukcióban a JOIN helyett az INNER JOIN, a LEFT OUTER JOIN, a RIGHT OUTER JOIN, a FULL OUTER JOIN, a CROSS JOIN (vagy egy vessző) adható meg.

BELSŐ CSATLAKOZÁS (belső csatlakozás)

Az INNER JOIN operátorral végzett lekérdezés táblák összekapcsolására és az eredményül kapott tábla megjelenítésére szolgál, amelyben az adatok teljesen metszik egymást az ON után megadott feltétel szerint.

Egy egyszerű JOIN ugyanezt teszi. Így a BELSŐ szó nem kötelező.

1. példa Van egy adatbázis portál hirdetéseket. Van egy táblázat Kategóriák (hirdetések kategóriái) és Alkatrészek (alkatrészek vagy más módon - kategóriákhoz tartozó címsorok). Például az Apartmanok, Dachák részei az Ingatlan kategóriába, az Autók, Motorkerékpárok alkatrészei pedig a Közlekedés kategóriába tartoznak. Ezek a kitöltött adatokat tartalmazó táblázatok így néznek ki.

Alkatrész táblázat:

Vegye figyelembe, hogy az Alkatrészek táblázatban a könyvek Cat_ID-vel rendelkeznek - egy hivatkozás egy olyan kategóriára, amely nem szerepel a Kategóriák táblázatban, és a Kategóriák táblázatban a technikáknak Cat_ID-je van elsődleges kulcs, amelyre az Alkatrészek táblázatban nincs hivatkozás. E két tábla adatait össze kell kötni úgy, hogy az így létrejövő táblázat tartalmazza a Részlet (Alkatrész), Cat (Kategória) és Ár (Hirdetésfeladás ára) mezőket, és az adatok feltételenként teljesen metsszék egymást. A feltétel a Kategóriák táblázatban található kategóriaazonosító és az Alkatrészek táblázatban a kategóriára mutató hivatkozás egyezése. Ehhez a következő lekérdezést írjuk:

ALKATRÉSZEK KIVÁLASZTÁSA, CATEGORIES.Cat_ID AS Cat, CATEGORIES.Price FROM PARTS.BEL CSATLAKOZÁS A KATEGÓRIÁKHOZ A PARTS.Cat = CATEGORIES.Cat_ID

részmacskaár
Apartmanok505 210,00
gépjármű205 160,00
Deszkák10 105,00
Szekrények30 77,00

Az eredményül kapott táblában nincsenek Könyvek, mert ez a bejegyzés olyan kategóriára hivatkozik, amely nem szerepel a Kategóriák táblában, és Technics, mert ennek a bejegyzésnek a Kategóriák táblájában van egy idegen kulcsa, amelyre nem hivatkozik az Alkatrészek táblában.

Egyes esetekben a táblák összekapcsolásakor kevésbé nehézkes lekérdezéseket hozhat létre a használatával EXISTS állítmányés a JOIN használata nélkül.

Van egy "Színház" adatbázis. A játéktábla játékadatokat tartalmaz. Table Team - a színészek szerepeiről. A Színész táblázat a színészekről szól. Táblázat igazgató - a rendezőkről. A táblázat mezői, az elsődleges és idegen kulcsok az alábbi ábrán láthatók (a nagyításhoz kattintson a bal egérgombbal).


3. példa Nyomtasd ki azon színészek listáját, akik egynél több szerepet játszanak egy előadásban, és a szerepeik számát.

A JOIN operátor egyszeri használatához. Használat HAVING, GROUP BY .

Nyom. A HAVING operátort a COUNT összesítő függvény által számolt szerepek számára alkalmazzák.

LEFT OUTER JOIN (bal külső csatlakozás)

A LEFT OUTER JOIN operátorral végzett lekérdezés táblák összekapcsolására és az eredményül kapott tábla megjelenítésére szolgál, amelyben az adatok az ON után megadott feltételnek megfelelően teljesen metszik egymást, és sorrendben az első (bal oldali) tábla rekordjaival egészül ki, még akkor is, ha nem felelnek meg a feltételnek. A feltételnek nem megfelelő bal oldali tábla rekordjainál a jobb oldali tábla oszlopának értéke NULL (undefined) lesz.

4. példa Az adatbázis és a táblák ugyanazok, mint az 1. példában.

Az eredményül kapott táblázat megszerzéséhez, amelyben a két tábla adatait a feltétel teljesen metszi, és kiegészül a Parts tábla összes olyan adatával, amely nem egyezik a feltétellel, a következő lekérdezést írjuk:

ALKATRÉSZEK KIVÁLASZTÁSA, CATEGORIES.Cat_ID AS Cat, CATEGORIES.A ALKATRÉSZEK ÁRA KÜLSŐ CSATLAKOZÁS A KATEGÓRIÁKHOZ A PARTS.Cat = CATEGORIES.Cat_ID

A lekérdezés eredménye a következő táblázat lesz:

részmacskaár
Apartmanok505 210,00
gépjármű205 160,00
Deszkák10 105,00
Szekrények30 77,00
Könyvek160 NULLA

Az eredményül kapott táblázatban az 1. példa táblázatától eltérően vannak Könyvek, de az Ár oszlop értéke NULL, mivel ennek a bejegyzésnek van egy kategóriaazonosítója, amely nem szerepel a Kategóriák táblában.

RIGHT OUTER JOIN (jobb oldali külső csatlakozás)

A RIGHT OUTER JOIN operátorral végzett lekérdezés táblák összekapcsolására és az eredményül kapott tábla megjelenítésére szolgál, amelyben az adatok az ON után megadott feltételnek megfelelően teljesen metszik egymást, és kiegészítik a második (jobb) tábla rekordjaival sorrendben, még akkor is, ha nem felelnek meg a feltételnek. A jobb oldali tábla rekordjainál, amelyek nem felelnek meg a feltételnek, a bal oldali tábla oszlopának értéke NULL (undefined).

5. példa

Ahhoz, hogy megkapjuk az eredményül kapott táblázatot, amelyben a két tábla adatai a feltételnek megfelelően teljesen metszik egymást, és kiegészülnek a Kategóriák tábla összes, a feltételnek nem megfelelő adatával, a következő lekérdezést írjuk:

ALKATRÉSZEK KIVÁLASZTÁSA, CATEGORIES.Cat_ID AS Cat, CATEGORIES.A ALKATRÉSZEK ÁRA JOBB KÜLSŐ CSATLAKOZZ A KATEGÓRIÁKHOZ AZ PARTS.Cat = CATEGORIES.Cat_ID oldalon

A lekérdezés eredménye a következő táblázat lesz:

részmacskaár
Apartmanok505 210,00
gépjármű205 160,00
Deszkák10 105,00
Szekrények30 77,00
NULLA45 65,00

Az eredményül kapott táblázatban az 1. példa táblázatától eltérően egy 45-ös kategóriájú és 65,00-es árú bejegyzés található, de az Alkatrész oszlop értéke NULL, mivel ennek a bejegyzésnek van egy kategóriaazonosítója, amelyre nem hivatkozik a Alkatrész táblázat.

TELJES KÜLSŐ CSATLAKOZÁS (teljes külső csatlakozás)

A FULL OUTER JOIN operátorral végzett lekérdezés táblák összekapcsolására és az eredményül kapott tábla megjelenítésére szolgál, amelyben az adatok az ON után megadott feltételnek megfelelően teljesen metszik egymást, és kiegészítik az első (bal) és a második (jobb) tábla rekordjaival. , még ha nem is felelnek meg a feltételnek. A feltételnek nem megfelelő rekordok esetében a másik tábla oszlopainak értéke NULL (undefined).

6. példa Az adatbázis és a táblák ugyanazok, mint az előző példákban.

Az eredményül kapott táblázat megszerzéséhez, amelyben a két tábla adatai a feltételnek megfelelően teljesen metszik egymást, és kiegészülnek mind a Parts tábla, mind a Kategóriák tábla összes, a feltételnek nem megfelelő adatával, a következő lekérdezést írjuk:

ALKATRÉSZEK KIVÁLASZTÁSA, CATEGORIES.Cat_ID AS Cat, CATEGORIES.Price FROM FROM PARTS.Cat.Cat = CATEGORIES.Cat_ID

A lekérdezés eredménye a következő táblázat lesz:

részmacskaár
Apartmanok505 210,00
gépjármű205 160,00
Deszkák10 105,00
Szekrények30 77,00
Könyvek160 NULLA
NULLA45 65,00

Az eredményül kapott tábla Könyvrekordokat tartalmaz (a bal oldali táblázatból) és 45-ös kategóriájú (jobb oldali táblázatból), amelyek közül az első határozatlan árat tartalmaz (a jobb oldali táblázat oszlopa), a második pedig egy határozatlan részt (oszlop a jobb oldali táblázatból). bal oldali táblázat).

Összekapcsolt táblázat álnevek

A korábbi lekérdezésekben ezeknek a tábláknak a teljes nevét adtuk meg a különböző táblákból kinyerendő oszlopok nevével. Az ilyen lekérdezések nehézkesnek tűnnek: ugyanaz a szó többször megismétlődik. Lehetséges valahogy leegyszerűsíteni a tervezést? Kiderült, hogy lehet. Ehhez használja a táblázat fedőneveit - azok rövidített nevét. Az álnév egy betűből is állhat. Az álnévben tetszőleges számú betű lehetséges, a lényeg az, hogy a rövidítés utáni kérés egyértelmű legyen az Ön számára. Általános szabály: az összekapcsolást meghatározó lekérdező részben, vagyis a JOIN szó körül meg kell adni a táblák teljes nevét, és minden név után egy tábla aliasnak kell lennie.

7. példaÍrja át a lekérdezést az 1. példából az összekapcsolási tábla álnevek használatával.

A kérés a következő lesz:

ALKATRÉSZ KIVÁLASZTÁSA, C.Cat_ID AS Cat, C.ÁRA P ALKATRÉSZBŐL BELSŐ CSATLAKOZÁS C KATEGÓRIÁKHOZ P.CAT-ON = C.Cat_ID

A lekérdezés ugyanazt adja vissza, mint az 1. példában szereplő lekérdezés, de sokkal tömörebb.

CSATLAKOZZ, és csatlakozzon több mint két asztalhoz

A relációs adatbázisoknak meg kell felelniük az adatintegritás és a redundanciamentesség követelményeinek, ezért egy üzleti folyamat adatai nemcsak egy, kettő, hanem három vagy több táblában is szerepelhetnek. Ezekben az esetekben összekapcsolt táblák láncait használják az adatok elemzésére: például az egyik (első) tábla tartalmaz egy bizonyos mennyiségi mutatót, a második táblát az elsővel és a harmadikkal idegen kulcsok kötik össze - az adatok metszik egymást, de csak a A harmadik táblázat egy feltételt tartalmaz, amelytől függően az első táblázatból kvantitatív mutató származtatható. Az asztalok pedig még többek lehetnek. Az SQL JOIN utasítás használatával egyetlen lekérdezésben nagyszámú táblát kapcsolhat össze. Az ilyen lekérdezésekben az egyik csatlakozási szakaszt egy másik követi, és minden további JOIN összekapcsolja a következő táblával azt a táblát, amely a lánc előző hivatkozásában a második volt. Ily módon SQL szintaxis A kettőnél több tábla összekapcsolására vonatkozó lekérdezés a következő:

CSATLAKOZÁS A TABLE_NAME_2 TÁBLÁZATHOZ (1..N) A TABLE_NAME_1 TÁBLÁZATBÓL CSATLAKOZÁS A TABLE_NAME_2 TÁBLÁZATHOZ FELTÉTELEKKEL CSATLAKOZÁS A TABLE_NAME_3 TÁBLÁZATHOZ FELTÉTELEN

8. példa Az adatbázis ugyanaz, mint az előző példákban. Ebben a példában a Hirdetések táblázat hozzáadódik a Kategóriák és Alkatrészek táblákhoz, amelyek a portálon közzétett hirdetések adatait tartalmazzák. Itt található a Hirdetések táblázat egy részlete, amelyben a rekordok között azon hirdetések szerepelnek, amelyek megjelenési ideje 2018-04-02 lejár.

TámogatásPart_IDDate_startDate_endSzöveg
21 1 "2018-02-11" "2018-04-20" "Eladom..."
22 1 "2018-02-11" "2018-05-12" "Eladom..."
... ... ... ... ...
27 1 "2018-02-11" "2018-04-02" "Eladom..."
28 2 "2018-02-11" "2018-04-21" "Eladom..."
29 2 "2018-02-11" "2018-04-02" "Eladom..."
30 3 "2018-02-11" "2018-04-22" "Eladom..."
31 4 "2018-02-11" "2018-05-02" "Eladom..."
32 4 "2018-02-11" "2018-04-13" "Eladom..."
33 3 "2018-02-11" "2018-04-12" "Eladom..."
34 4 "2018-02-11" "2018-04-23" "Eladom..."

Képzeld el, hogy ma "2018-04-02" van, vagyis ez az érték veszi függvény CURDATE() - aktuális dátum. Szeretné tudni, hogy a ma lejáró hirdetések mely kategóriákba tartoznak. A kategórianevek csak a KATEGÓRIÁK táblázatban, a hirdetések lejárati dátumai pedig csak a HIRDETÉSEK táblában találhatók. A PARTS táblázatban a megjelent hirdetések kategóriáinak (vagy egyszerűbben alkategóriáinak) részei. De a Cat_ID idegen kulcs összekapcsolja a PARTS táblát a KATEGÓRIÁK táblával, az ADS tábla pedig a Part_ID idegen kulcsot a PARTS táblával. Ezért egy lekérdezésben három táblát kapcsolunk össze, és ezt a lekérdezést maximális korrektséggel láncnak nevezhetjük.

A kérés a következő lesz:

A lekérdezés eredménye egy táblázat, amely két kategória - "Ingatlan" és "Közlekedés" - nevét tartalmazza:

Cat_name
A tulajdon
Szállítás

CROSS JOIN (cross join)

Az SQL CROSS JOIN utasítás használata a legegyszerűbb formában - az összekapcsolási feltétel nélkül - valósítja meg a műveletet Descartes szorzat a relációs algebrában. Egy ilyen összekapcsolás eredménye az első tábla minden sorának összefűzése lesz a második tábla minden sorával. A táblák lekérdezésbe írhatók a CROSS JOIN utasítással vagy vesszővel elválasztva.

9. példa Az adatbázis ugyanaz, a táblák Kategóriák és Alkatrészek. Valósítsa meg e két táblázat derékszögű szorzatát.

A kérés a következő lesz:

KIVÁLASZTÁS (*) Kategóriák KERESZTES JOIN Alkatrészek

Vagy a CROSS JOIN kifejezett jelzése nélkül – vesszővel elválasztva:

SELECT (*) Kategóriák , Alkatrészek

A lekérdezés egy 5 * 5 = 25 soros táblázatot ad vissza, amelynek egy töredéke az alábbiakban látható:

Cat_IDCat_nameárPart_IDrészmacska
10 építőanyagok105,00 1 Apartmanok505
10 építőanyagok105,00 2 gépjármű205
10 építőanyagok105,00 3 Deszkák10
10 építőanyagok105,00 4 Szekrények30
10 építőanyagok105,00 5 Könyvek160
... ... ... ... ... ...
45 Technika65,00 1 Apartmanok505
45 Technika65,00 2 gépjármű205
45 Technika65,00 3 Deszkák10
45 Technika65,00 4 Szekrények30
45 Technika65,00 5 Könyvek160

Ahogy a példából is látható, ha egy ilyen lekérdezés eredményének van bármilyen értéke, akkor ez talán vizuális érték bizonyos esetekben, amikor nem szükséges strukturált információ megjelenítése, különösen a legegyszerűbb analitikai minta esetében. Egyébként minden táblából meg lehet adni a kimeneti oszlopokat, de akkor sem nő egy ilyen lekérdezés információs értéke.

De a CROSS JOIN esetén beállíthat csatlakozási feltételt! Az eredmény teljesen más lesz. Ha a "vessző" operátort használja a CROSS JOIN kifejezett megadása helyett, az összekapcsolási feltételt nem az ON, hanem a WHERE szó határozza meg.

10. példa Ugyanaz a hirdetési portál adatbázis, Kategóriák és Alkatrészek táblázatok. Keresztillesztés segítségével kösse össze a táblákat úgy, hogy az adatok feltétel szerint teljesen metsszék egymást. A feltétel a Kategóriák táblázatban található kategóriaazonosító és az Alkatrészek táblázatban a kategóriára mutató hivatkozás egyezése.

A kérés a következő lesz:

A lekérdezés ugyanazt adja vissza, mint az 1. példában szereplő lekérdezés:

részmacskaár
Apartmanok505 210,00
gépjármű205 160,00
Deszkák10 105,00
Szekrények30 77,00

És ez a véletlen nem véletlen. Egy összekapcsolási feltételnél keresztillesztéssel rendelkező lekérdezés teljesen hasonló a belső csatlakozással (INNER JOIN) rendelkező lekérdezéshez, vagy mivel az INNER szó nem kötelező, csak JOIN.

Így az, hogy melyik lekérdezési változatot használjuk, az adatbázis-specialista stílus kérdése, sőt szokása. Talán egy keresztillesztés egy két tábla feltételével kompaktabb lehet. De a keresztcsatlakozás előnye kettőnél több tábla esetén (ez is lehetséges) erősen vitatható. Ebben az esetben a WHERE metszésfeltételek az ÉS szóval vannak felsorolva. Egy ilyen konstrukció nehézkes és nehezen olvasható lehet, ha a lekérdezés végén WHERE záradék is található, meghatározott feltételekkel.

Relációs adatbázisok és SQL nyelv

Ez az Oracle oktatóanyag a használatát ismerteti CSATLAKOZÁSOK (BELSŐ és KÜLSŐ) az Oracle-ben szintaxissal és példákkal.

Leírás

Az Oracle CSATLAKOZIK több tábla adatainak lekérésére szolgálnak. CSATLAKOZIK akkor fut le, amikor két vagy több tábla van összekapcsolva egy SQL utasításban.

4 van különféle típusok Az Oracle csatlakozik:

Vessünk egy pillantást az Oracle JOIN szintaxisára, és fedezzük fel az Oracle JOIN példákat is.

BELSŐ CSATLAKOZÁS (egyszerű csatlakozás)

Valószínűleg már írt olyan lekérdezéseket, amelyek az Oracle INNER JOIN-t használják. Ez a leggyakoribb kapcsolattípus. Az Oracle INNER JOINS több olyan tábla összes sorát adja vissza, ahol az összekapcsolási feltételek teljesülnek.

Szintaxis

INNER JOIN szintaxis az Oracle/PLSQL-ben:

Oszlopok KIVÁLASZTÁSA
táblázatból1
BELSŐ JOIN tábla2

Ezen az ábrán az Oracle INNER JOIN az árnyékolt területet adja vissza:

Az Oracle INNER JOIN olyan rekordokat ad vissza, ahol a tábla1 és a 2. tábla metszi egymást.

Példa

A következő példa egy Oracle INNER JOIN példája:

Oracle PL/SQL

SELECT beszállítók.szállító_azonosítója,

beszállítók.szállító_neve,

orders.order_date

beszállítóktól

INNER JOIN megrendelések

Ez az Oracle INNER JOIN példa visszaadja az összes olyan sort a beszállítói és rendelési táblákból, ahol mindkét táblában van egyező szállítóazonosító mezőérték.

Nézzünk meg néhány adatot, hogy megértsük, hogyan működik az INNER JOIN:

Ha végrehajtunk egy Oracle SELECT utasítást (amely tartalmaz egy INNER JOIN-t):

Oracle PL/SQL

SELECT beszállítók.szállító_azonosító, beszállítók.szállító_neve, rendelések.megrendelés_dátuma beszállítóktól BELSŐ CSATLAKOZÁS megrendelések ON beszállítók.szállító_azonosítója = rendelések.szállító_azonosítója;

A Microsoft és az NVIDIA sorai a beszállítói táblából kimaradnak, mivel az 10002 és 10003 beszállítói_id értékek nem szerepelnek mindkét táblában. Az order_id 500127 sor a rendelések táblából kimarad, mert a beszállítói azonosító 10004 nem létezik a szállítók táblájában.

Régi szintaxis

Utolsó megjegyzésként érdemes megjegyezni, hogy a fenti Oracle INNER JOIN példa átírható a régi implicit szintaxissal a következőképpen (de az INNER JOIN szintaxis javasolt):

Egy másik csatlakozási típus az Oracle LEFT OUTER JOIN. Ez az összekapcsolási típus az ON záradékban megadott bal oldali összekapcsolással rendelkező táblák összes sorát adja vissza, és csak azokat a sorokat adja vissza egy másik táblából, ahol az egyesített mezők egyenlőek.

Szintaxis

Az Oracle LEFT OUTER JOIN szintaxisa:

Oszlopok KIVÁLASZTÁSA
táblázatból1
LEFT JOIN tábla2
ON tábla1.oszlop = táblázat2.oszlop;

Egyes adatbázisok a LEFT OUTER JOIN-t a LEFT JOIN-re cserélik.

Ezen az ábrán az Oracle LEFT OUTER JOIN az árnyékolt területet adja vissza:

Az Oracle LEFT OUTER JOIN az 1. tábla összes rekordját visszaadja, és a 2. táblából csak azokat a rekordokat, amelyek metszik az 1. táblát.

Példa

Oracle PL/SQL

SELECT beszállítók.szállító_azonosítója,

beszállítók.szállító_neve,

orders.order_date

beszállítóktól

LEFT OUTER JOIN parancsok

ON beszállítók.szállító_azonosító=rendelések.szállító_azonosítója;

Ez a LEFT OUTER JOIN példa a beszállítói tábla összes sorát visszaadja, és csak azokat a sorokat a rendelési táblából, ahol az egyesített mezők egyenlőek.

Ha a beszállítói tábla beszállítói_azonosítója nem létezik a rendelések táblájában, akkor a rendelési tábla összes mezője NULL-ként jelenik meg az eredménykészletben.

Nézzünk meg néhány adatot, hogy megértsük, hogyan működik a LEFT OUTER JOIN:

Van egy beszállítói táblázatunk két mezővel (supplier_id és beszállítónév ), amely a következő adatokat tartalmazza:

Ha végrehajtunk egy Oracle SELECT utasítást (amely egy LEFT OUTER JOIN-t tartalmaz):

Oracle PL/SQL

KIVÁLASZTÁSA beszállítók.szállító_azonosítója, beszállítók.szállító_neve, rendelések.megrendelési_dátuma beszállítóktól BALRA KÜLSŐ CSATLAKOZTASSA rendeléseket beszállítók.szállítói_azonosítója = rendelések.szállító_azonosítója;

A Microsoft és az NVIDIA sorai szerepelni fognak, mert a LEFT OUTER JOIN funkciót használták. Azonban észre fogja venni, hogy ezeknek a rekordoknak az order_date mezője NULL értéket tartalmaz.

Egy másik csatlakozási típus az Oracle RIGHT OUTER JOIN. Ez az összekapcsolási típus az ON záradékban megadott jobb összekapcsolással rendelkező táblák összes sorát adja vissza, és csak azokat a sorokat adja vissza egy másik táblából, ahol az egyesített mezők egyenlőek.

Szintaxis

Az Oracle RIGHT OUTER JOIN szintaxisa:

Oszlopok KIVÁLASZTÁSA
táblázatból1
RIGHT JOIN tábla2
ON tábla1.oszlop = táblázat2.oszlop;

Egyes adatbázisokban a RIGHT OUTER JOIN szót RIGHT JOIN helyettesíti.

Ezen az ábrán az Oracle RIGHT OUTER JOIN az árnyékolt területet adja vissza:

Az Oracle RIGHT OUTER JOIN az összes rekordot visszaadja a 2. táblából, és csak az 1. tábla azon rekordjait, amelyek metszik a 2. táblát.

Példa

A következő példa egy Oracle RIGHT OUTER JOIN példája:

Oracle PL/SQL

SELECT orders.order_id,

orders.order_date,

beszállítók.szállító_neve

beszállítóktól

RIGHT OUTER JOIN megrendelések

ON beszállítók.szállító_azonosító=rendelések.szállító_azonosítója;

Ez a RIGHT OUTER JOIN példa a rendelések tábla összes sorát adja vissza, és csak azokat a sorokat a szállítók táblájából, ahol az egyesített mezők egyenlőek.

Ha a rendelések táblában szereplő beszállítói_id érték nem létezik a beszállítói táblában, akkor a beszállítói tábla összes mezője NULL-ként jelenik meg az eredménykészletben.

Nézzünk meg néhány adatot, hogy megértsük, hogyan működik a RIGHT OUTER JOIN:

Van egy beszállítói táblázatunk két mezővel (supplier_id és beszállítónév ), amely a következő adatokat tartalmazza:

Ha végrehajtunk egy Oracle SELECT utasítást (amely egy RIGHT OUTER JOIN-t tartalmaz):

Oracle PL/SQL

KIVÁLASZT rendelések.rendelési_azonosító, rendelések.megrendelési_dátuma, beszállítók.beszállítói_neve beszállítóktól JOBBRA KÜLSŐ CSATLAKOZTASSA rendeléseit beszállítók.szállítói_azonosítója = rendelések.szállító_azonosítója;

Az order_id 500127 sora szerepelni fog, mivel a RIGHT OUTER JOINS funkciót használták. Azonban észre fogja venni, hogy a beszállító_neve mező értéke NULL.

Egy másik csatlakozási típus az Oracle FULL OUTER JOIN. Ez a fajta összekapcsolás visszaadja a bal oldali és a jobb oldali táblázat összes sorát NULL értékekkel azon a helyen, ahol az összekapcsolási feltétel meghiúsul.

Szintaxis

Az Oracle FULL OUTTER JOIN szintaxisa:

Oszlopok KIVÁLASZTÁSA
táblázatból1
FULL JOIN tábla2
ON tábla1.oszlop = táblázat2.oszlop;

Egyes adatbázisokban a TELJES KÜLSŐ CSATLAKOZÁS helyébe FULL JOIN lép.

Ezen az ábrán a FULL OUTER JOIN az árnyékolt területet adja vissza:

Az Oracle FULL OUTER JOIN az összes rekordot visszaadja mind a table1, mind a table2 táblából.

Az összekapcsolási művelet, mint más bináris műveletek, úgy van kialakítva, hogy két táblából válasszon ki adatokat, és ezeket az adatokat egy eredménykészletbe foglalja. Az összekapcsolási művelet megkülönböztető jellemzője a következő:

  • az eredménytábla séma mindkét forrástábla (operandustábla) oszlopait tartalmazza, azaz az eredményséma operandussémák „láncolása”;
  • az eredménytábla minden sora egy operandustábla egy sorának "összefűzése" a második operandustábla sorával.

Annak meghatározása, hogy mely forráskarakterláncok jelenjenek meg az eredményben, és milyen kombinációkban, az összekapcsolási művelet típusától és a kifejezetten meghatározottaktól függ. csatlakozási feltételek. Az összekapcsolási feltétel, vagyis a forrástáblázatok egymáshoz illesztésének feltétele egy logikai kifejezés (predikátum).

Ha nem két, hanem több táblát kell összekapcsolni, akkor az összekapcsolási műveletet többször (egymás után) alkalmazzuk.

Üzemeltető leírása

MEZŐ KIVÁLASZTÁSA [ ,... n] 1. táblázatból ( BELSŐ | ( BALRA | JOBBRA | TELJES ) KÜLSŐ | KERESZT ) CSATLAKOZÁS A 2. táblázatból BE< condition>

A legtöbb DBMS-ben a LEFT, RIGHT, FULL szavak megadásakor a KÜLSŐ szó elhagyható. A legtöbb DBMS-ben az INNER szó is elhagyható.

Általános esetben a DBMS a kapcsolat létrehozásakor ellenőrzi a feltételt (predikátum) feltétel. A CROSS JOIN esetén nincs megadva feltétel.

Keresztillesztéshez (derékszögű termék) CROSS JOIN esetén egyes SQL-megvalósítások a vessző operátort ( , ):

MEZŐ KIVÁLASZTÁSA [ ,...n] FROM Table1, Table2

A JOIN operátor típusai

A további magyarázatokhoz a következő táblázatokat használjuk:

Városokban élők (Személy táblázat)

BELSŐ ÖSSZEKAPCSOLÁS

Operátor belső kapcsolat Az INNER JOIN két asztalt egyesít. Az utasítás táblázatainak sorrendje nem fontos, mert az utasítás szimmetrikus.

fejlécösszefűzés

Test Az eredmény logikusan a következőképpen alakul. Az egyik tábla minden sorát összehasonlítja a második táblázat minden sorával, majd ellenőrzi az összekapcsolási feltételt az eredményül kapott „összekapcsolt” sorra (az összekapcsolási predikátum kiszámítása). Ha a feltétel igaz, akkor a megfelelő „csatlakozott” sor hozzáadódik az eredménytáblázathoz.

A leírt műveleti algoritmus szigorúan logikus, azaz csak azt az eredményt magyarázza meg, amelyet a művelet végrehajtása során kell elérni, de nem írja elő, hogy egy adott DBMS a megadott módon hajtsa végre a kapcsolatot. Az összekapcsolási művelet végrehajtásának számos módja van, például beágyazott hurokillesztések. belső hurkok csatlakoznak), hash csatlakozás hash csatlakozás), egyesülési csatlakozás egyesítése csatlakozás). Az egyetlen követelmény az, hogy bármely implementáció logikailag ugyanazt az eredményt adja, mint a leírt algoritmus alkalmazásakor.

KIVÁLASZTÁS * FROM Személy BELSŐ CSATLAKOZÁS Város ON Személy. CityId = város. ID

Eredmény:

Személy.Név Személy.Városazonosító Város.Id Város Név
Andrey 1 1 Moszkva
Leonyid 2 2 Szentpétervár
Szergej 1 1 Moszkva

KÜLSŐ CSATLAKOZÁS

Két tábla összekapcsolása, amelynek az egyik vagy mindkét táblából sorokat kell eredményeznie.

BAL KÜLSŐ CSATLAKOZÁS

Operátor bal külső csatlakozás A LEFT OUTTER JOIN két táblát egyesít. Az utasítás táblázatainak sorrendje azért fontos, mert az állítás nem szimmetrikus.

fejléc Az eredménytábla az egyesített táblák fejléceinek egyesítése (összefűzése).

Test p.

  1. p.
  2. Ezután a bal oldali tábla azon rekordjai, amelyek az 1. lépésben nem szerepeltek a belső összekapcsolásban, hozzáadódnak az eredményhez, és az ilyen rekordok esetében a jobb oldali táblának megfelelő mezők kitöltésre kerülnek az értékekkel NULLA.

SELECT * FROM FROM LEFT OUTER JOIN City ON személy. CityId = város. ID

Eredmény:

Személy.Név Személy.Városazonosító Város.Id Város Név
Andrey 1 1 Moszkva
Leonyid 2 2 Szentpétervár
Szergej 1 1 Moszkva
Gregory 4 NULLA NULLA

JOBB KÜLSŐ CSATLAKOZÁS

Operátor jobb külső csatlakozás A RIGHT OUTER JOIN két asztalt egyesít. Az utasítás táblázatainak sorrendje azért fontos, mert az állítás nem szimmetrikus.

fejléc Az eredménytábla az egyesített táblák fejléceinek egyesítése (összefűzése).

Test Az eredmény logikusan a következőképpen alakul. A bal és a jobb oldali táblákat csatlakoztassuk predikátummal (feltétel) p.

  1. Az eredmény tartalmazza a bal és a jobb oldali táblák predikátum szerinti belső összekapcsolását (INNER JOIN). p.
  2. Ezután a jobb oldali tábla azon rekordjai, amelyek az 1. lépésben nem szerepeltek a belső összekapcsolásban, hozzáadódnak az eredményhez, és az ilyen rekordok esetében a bal oldali táblának megfelelő mezők kitöltésre kerülnek értékekkel NULLA.

KIVÁLASZTÁS * Személytől JOBBRA KÜLSŐ CSATLAKOZÁS Város ON Személyre. CityId = város. ID

Eredmény:

Személy.Név Személy.Városazonosító Város.Id Város Név
Andrey 1 1 Moszkva
Szergej 1 1 Moszkva
Leonyid 2 2 Szentpétervár
NULLA NULLA 3 Kazan

TELJES KÜLSŐ CSATLAKOZÁS

Operátor teljes külső csatlakozás A FULL OUTTER JOIN két táblát egyesít. Az utasítás táblázatainak sorrendje nem fontos, mert az utasítás szimmetrikus.

fejléc Az eredménytábla az egyesített táblák fejléceinek egyesítése (összefűzése).

Test Az eredmény logikusan a következőképpen alakul. Legyen az első és a második tábla egy predikátummal összekötve (feltétel) p. Az "első" és a "második" szavak itt nem a rekord sorrendjét jelzik (ami nem fontos), hanem csak a táblák megkülönböztetésére szolgálnak.

  1. Az eredmény tartalmazza az első és a második tábla belső összekapcsolását (INNER JOIN) a predikátum alapján p.
  2. Az első tábla azon rekordjai, amelyek az 1. lépésben nem szerepeltek a belső összekapcsolásban, hozzáadódnak az eredményhez, ilyen rekordok esetén a második táblának megfelelő mezők kitöltésre kerülnek az értékekkel NULLA.
  3. A második tábla azon rekordjai, amelyek az 1. lépésben nem szerepeltek a belső összekapcsolásban, hozzáadódnak az eredményhez, ilyen rekordok esetén az első táblának megfelelő mezők kitöltésre kerülnek az értékekkel NULLA.

KIVÁLASZTÁS * FROM Személy TELJES KÜLSŐ CSATLAKOZÁS Város ON Személy. CityId = város. ID

Eredmény:

Személy.Név Személy.Városazonosító Város.Id Város Név
Andrey 1 1 Moszkva
Szergej 1 1 Moszkva
Leonyid 2 2 Szentpétervár
NULLA NULLA 3 Kazan
Gregory 4 NULLA NULLA

KERESZT CSATLAKOZÁS

Operátor keresztkapcsolat, vagy Descartes termék A CROSS JOIN két asztalt egyesít. Az utasítás táblázatainak sorrendje nem fontos, mert az utasítás szimmetrikus.

fejléc Az eredménytábla az egyesített táblák fejléceinek egyesítése (összefűzése).

Test Az eredmény logikusan a következőképpen alakul. Az egyik táblázat minden sora a második táblázat minden sorához kapcsolódik, így a két táblázat minden lehetséges kombinációja megadható.

KIVÁLASZTÁS * FROM személyről CROSS JOIN City

SELECT * FROM személy, város

Eredmény:

Személy.Név Személy.Városazonosító Város.Id Város Név
Andrey 1 1 Moszkva
Andrey 1 2 Szentpétervár
Andrey 1 3 Kazan
Leonyid 2 1 Moszkva
Leonyid 2 2 Szentpétervár
Leonyid 2 3 Kazan
Szergej 1 1 Moszkva
Szergej 1 2 Szentpétervár
Szergej 1 3 Kazan
Gregory 4 1 Moszkva
Gregory 4 2 Szentpétervár
Gregory 4 3 Kazan

Ha egy csatlakozási feltételt ad hozzá a WHERE záradékhoz, azaz korlátozásokat a sorok kombinációira, akkor az eredmény egyenértékű egy azonos feltétellel rendelkező INNER JOIN művelettel:

Tehát CROSS JOIN + WHERE( állítmány) és BELSŐ JOIN( állítmány) szintaktikailag alternatív formái ugyanazon logikai belső összekapcsolási művelet írásának. Az összekapcsolási művelet CROSS JOIN + WHERE szintaxisa elavult, mert az ANSI SQL szabvány elavult.

Megjegyzések

Linkek

  • Az Oracle csatlakozási típusainak leírása (orosz)
  • Jeff Atwood, Az SQL-csatlakozások vizuális magyarázata

Ez az Oracle oktatóanyag a használatát ismerteti CSATLAKOZÁS(belső és külső) az Oracle-ben szintaxissal, vizuális illusztrációkkal és példákkal.

Leírás

Az Oracle JOINS segítségével több táblából lehet adatokat lekérni. Az Oracle JOIN művelet végrehajtásra kerül, amikor két vagy több tábla van összekapcsolva egy SQL utasításban.

4 különböző típusú Oracle csatlakozás létezik:

  • Oracle INNER JOIN (vagy néha egyszerű csatlakozásnak nevezik)
  • Oracle LEFT OUTER JOIN (vagy néha LEFT JOIN néven)
  • Oracle RIGHT OUTTER JOIN (vagy néha RIGHT JOIN néven)
  • Oracle FULL OUTTER JOIN (vagy néha TELJES CSATLAKOZÁS)

Tehát beszéljük meg az Oracle JOIN szintaxisát, nézzük meg az Oracle JOINS vizuális illusztrációit, és fedezzük fel az Oracle JOIN példákat.

BELSŐ CSATLAKOZÁS (egyszerű csatlakozás)

Valószínűleg már írt egy utasítást, amely Oracle INNER JOIN-t használ. Ez a leggyakoribb csatlakozási típus. Az Oracle INNER JOINS visszaadja az összes olyan sort több táblából, ahol az összekapcsolási feltétel teljesül.

Szintaxis

Az Oracle/PLSQL INNER JOIN szintaxisa a következő:

SELECT oszlopok FROM tábla1 BELSŐ JOIN tábla2 ON tábla1.oszlop = tábla2.oszlop;

vizuális illusztráció

Ezen a vizuális diagramon az Oracle INNER JOIN az árnyékolt területet adja vissza:

Az Oracle INNER JOIN visszaadja a rekordokat, ahol Asztal 1és táblázat2 metszik egymást.

példa

Íme egy példa az Oracle INNER JOIN-re:

Ez az Oracle INNER JOIN példa a beszállítói és rendelési táblák összes sorát visszaadja, ahol a beszállítói és a rendelési táblákban is van egyező szállítóazonosító érték.

Nézzünk néhány adatot a BELSŐ CSATLAKOZÁSOK működésének magyarázatához:

Van egy asztalunk szállítók

beszállítói_azonosító Szállító neve
10000 IBM
10001 Hewlett-Packard
10002 Microsoft
10003 NVIDIA

Van egy másik asztalunk is parancsokat

Rendelés azonosító beszállítói_azonosító rendelés dátuma
500125 10000 2003/05/12
500126 10001 2003/05/13
500127 10004 2003/05/14

Ha futtatjuk a Oracle SELECT alábbi nyilatkozat (amely BELSŐ JOIN-t tartalmaz):

SELECT beszállítók.szállító_azonosító, beszállítók.szállító_neve, rendelések.megrendelés_dátuma beszállítóktól BELSŐ CSATLAKOZÁS megrendelések ON beszállítók.szállító_azonosítója = rendelések.szállító_azonosítója;

beszállítói_azonosító név rendelés dátuma
10000 IBM 2003/05/12
10001 Hewlett-Packard 2003/05/13

A sorok Microsoftés NVIDIA a beszállítói táblából kimaradna, mivel az 10002 és 10003 beszállítói azonosító nem létezik mindkét táblában. Az 500127 (order_id) sor a rendelési táblából kimaradna, mivel az 10004 beszállítói azonosító nem létezik a beszállítói táblában.

Régi szintaxis

Utolsó megjegyzésként érdemes megemlíteni, hogy a fenti Oracle INNER JOIN példa átírható a régebbi implicit szintaxissal a következőképpen (de továbbra is az INNER JOIN kulcsszó szintaxisát javasoljuk):

SELECT beszállítók.szállító_azonosító, beszállítók.szállító_neve, rendelések.megrendelés_dátuma beszállítóktól, rendelések WHERE szállítók.szállító_azonosító = rendelések.szállító_azonosítója;

BAL KÜLSŐ CSATLAKOZÁS

Az összekapcsolás egy másik típusát Oracle LEFT OUTER JOIN-nak hívják. Ez a fajta összekapcsolás az ON feltételben és a BAL oldali tábla összes sorát adja vissza csak

Szintaxis

Az Oracle szintaxisa BAL KÜLSŐ CSATLAKOZÁS ez:

SELECT oszlopok FROM tábla1 LEFT JOIN tábla2 ON tábla1.oszlop = tábla2.oszlop;

Egyes adatbázisokban a LEFT OUTER JOIN kulcsszavakat LEFT JOIN-re cserélik.

vizuális illusztráció

Ezen a vizuális diagramon az Oracle LEFT OUTER JOIN az árnyékolt területet adja vissza:

Az Oracle LEFT OUTER JOIN az összes rekordot visszaadja Asztal 1és csak azokat a feljegyzéseket táblázat2 amelyek metszik egymást Asztal 1.

példa

Íme egy példa az Oracle LEFT OUTER JOIN-re:

Ez a LEFT OUTER JOIN példa a beszállítói tábla összes sorát adja vissza, és csak azokat a sorokat a rendelések táblából, ahol az egyesített mezők egyenlőek.

> az eredményhalmazban.

Nézzünk meg néhány adatot a BAL KÜLSŐ CSATLAKOZÁS működésének magyarázatához:

Van egy asztalunk szállítók két mezővel (szállító_azonosítója és szállítói_neve). A következő adatokat tartalmazza:

beszállítói_azonosító Szállító neve
10000 IBM
10001 Hewlett-Packard
10002 Microsoft
10003 NVIDIA

parancsokat három mezővel (rendelési_azonosító, szállítói_azonosítója és rendelési_dátuma). A következő adatokat tartalmazza:

Rendelés azonosító beszállítói_azonosító rendelés dátuma
500125 10000 2003/05/12
500126 10001 2003/05/13

Ha lefuttatjuk a SELECT utasítást (amely egy LEFT OUTER JOIN-t tartalmaz):

KIVÁLASZTÁSA beszállítók.szállító_azonosítója, beszállítók.szállító_neve, rendelések.megrendelési_dátuma beszállítóktól BALRA KÜLSŐ CSATLAKOZTASSA rendeléseket beszállítók.szállítói_azonosítója = rendelések.szállító_azonosítója;

Eredménykészletünk így nézne ki:

beszállítói_azonosító Szállító neve rendelés dátuma
10000 IBM 2003/05/12
10001 Hewlett-Packard 2003/05/13
10002 Microsoft
10003 NVIDIA

A sorok Microsoftés NVIDIA szerepelne, mert LEFT OUTER JOIN került felhasználásra. Azonban észre fogja venni, hogy ezeknek a rekordoknak az order_date mezője tartalmazza a érték.

Régi szintaxis

Utolsó megjegyzésként érdemes megemlíteni, hogy a fenti LEFT OUTER JOIN példa átírható a régebbi implicit szintaxissal, amely a külső csatlakozási operátort (+) használja az alábbiak szerint (de továbbra is javasoljuk a LEFT OUTER JOIN kulcsszó szintaxisát):

SELECT beszállítók.szállító_azonosító, beszállítók.szállító_neve, rendelések.megrendelés_dátuma beszállítóktól, rendelések WHERE beszállítók.szállító_azonosító = rendelések.szállító_azonosítója(+);

JOBB KÜLSŐ CSATLAKOZÁS

Az összekapcsolás egy másik típusát Oracle RIGHT OUTER JOIN-nek hívják. Ez a típusú összekapcsolás a JOBB oldali tábla összes sorát visszaadja az ON feltételben és csak a másik tábla azon sorai, ahol az egyesített mezők egyenlőek (az összekapcsolási feltétel teljesül).

Szintaxis

Az Oracle szintaxisa JOBB KÜLSŐ CSATLAKOZÁS ez:

SELECT oszlopok FROM tábla1 RIGHT JOIN tábla2 ON tábla1.oszlop = tábla2.oszlop;

Egyes adatbázisokban a RIGHT OUTER JOIN kulcsszavakat RIGHT JOIN-re cserélik.

vizuális illusztráció

Ezen a vizuális diagramon az Oracle RIGHT OUTER JOIN az árnyékolt területet adja vissza:

Az Oracle RIGHT OUTER JOIN az összes rekordot visszaadja táblázat2és csak azokat a feljegyzéseket Asztal 1 amelyek metszik egymást táblázat2.

példa

Íme egy példa az Oracle RIGHT OUTER JOIN-re:

Ez a RIGHT OUTER JOIN példa a rendelések tábla összes sorát visszaadja, és csak azokat a sorokat a beszállítói táblából, ahol az egyesített mezők egyenlőek.

Ha a rendelések táblában szereplő beszállítói_id érték nem létezik a beszállítói táblában, a beszállítói tábla összes mezője a következőképpen fog megjelenni: > az eredményhalmazban.

Nézzünk meg néhány adatot a JOBB KÜLSŐ CSATLAKOZÁSOK működésének magyarázatához:

Van egy asztalunk szállítók két mezővel (szállító_azonosítója és szállítói_neve). A következő adatokat tartalmazza:

beszállítói_azonosító Szállító neve
10000 alma
10001 Google

Van egy második asztalunk parancsokat három mezővel (rendelési_azonosító, szállítói_azonosítója és rendelési_dátuma). A következő adatokat tartalmazza:

Rendelés azonosító beszállítói_azonosító rendelés dátuma
500125 10000 2013/08/12
500126 10001 2013/08/13
500127 10002 2013/08/14

Ha az alábbi SELECT utasítást futtatjuk (amely egy RIGHT OUTER JOIN-t tartalmaz):

KIVÁLASZT rendelések.megrendelési_azonosító, rendelések.megrendelési_dátuma, beszállítók.beszállítói_neve beszállítóktól JOBBRA KÜLSŐ JOIN rendelések beszállítók.szállítói_azonosítója = rendelések.szállító_azonosítója;

Eredménykészletünk így nézne ki:

Rendelés azonosító rendelés dátuma Szállító neve
500125 2013/08/12 alma
500126 2013/08/13 Google
500127 2013/08/14

A sor a 500127 (order_id) szerepelne, mert RIGHT OUTER JOIN került felhasználásra. Azonban észre fogja venni, hogy az adott rekordhoz tartozó beszállító_neve mezőben a érték.

Régi szintaxis

Utolsó megjegyzésként érdemes megemlíteni, hogy a fenti RIGHT OUTER JOIN példa átírható a régebbi implicit szintaxissal, amely a külső csatlakozási operátort (+) használja a következőképpen (de továbbra is a RIGHT OUTER JOIN kulcsszó szintaxisát javasoljuk):

SELECT orders.order_id, orders.order_date, beszállítók.szállítónév FROM beszállítóktól, rendelések WHERE beszállítók.szállító_azonosító(+) = rendelések.szállító_azonosítója;

TELJES KÜLSŐ CSATLAKOZÁS

Az összekapcsolás egy másik típusát Oracle FULL OUTER JOIN-nak hívják. Ez a fajta összekapcsolás a BAL oldali és a JOBB oldali táblák összes sorát nullával adja vissza, ahol az összekapcsolási feltétel nem teljesül.

Szintaxis

Az Oracle szintaxisa TELJES KÜLSŐ CSATLAKOZÁS ez:

SELECT oszlopok FROM tábla1 FULL JOIN tábla2 ON tábla1.oszlop = tábla2.oszlop;

Egyes adatbázisokban a FULL OUTER JOIN kulcsszavakat FULL JOIN-re cserélik.

vizuális illusztráció

Ezen a vizuális diagramon az Oracle FULL OUTER JOIN az árnyékolt területet adja vissza:

Az Oracle FULL OUTER JOIN mindkettőből visszaadja az összes rekordot Asztal 1és táblázat2.

példa

Íme egy példa az Oracle TELJES KÜLSŐ CSATLAKOZÁSÁRA:

Ez a TELJES KÜLSŐ CSATLAKOZÁS példa visszaadja az összes sort a beszállítói táblából és az összes sort a rendelési táblából, és amikor az összekapcsolási feltétel nem teljesül, kiterjesztésre kerül az eredménykészletben szereplő mezőkre.

Ha a beszállítói táblában szereplő beszállítói_id érték nem létezik a rendelések táblájában, a rendelések tábla összes mezője a következőképpen fog megjelenni: > az eredményhalmazban. Ha a rendelések táblában szereplő beszállítói_id érték nem létezik a beszállítói táblában, a beszállítói tábla összes mezője a következőképpen fog megjelenni: az eredményhalmazban.

Nézzünk meg néhány adatot a TELJES KÜLSŐ CSATLAKOZÁS működésének magyarázatához:

Van egy asztalunk szállítók két mezővel (szállító_azonosítója és szállítói_neve). A következő adatokat tartalmazza:

beszállítói_azonosító Szállító neve
10000 IBM
10001 Hewlett-Packard
10002 Microsoft
10003 NVIDIA

Van egy második asztalunk parancsokat három mezővel (rendelési_azonosító, szállítói_azonosítója és rendelési_dátuma). A következő adatokat tartalmazza:

Rendelés azonosító beszállítói_azonosító rendelés dátuma
500125 10000 2013/08/12
500126 10001 2013/08/13
500127 10004 2013/08/14

Ha lefuttatjuk a SELECT utasítást (amely egy FULL OUTER JOIN-t tartalmaz):

KIVÁLASZTÁSA beszállítók.szállító_azonosítója, beszállítók.szállító_neve, rendelések.megrendelési_dátuma beszállítóktól TELJES KÜLSŐ CSATLAKOZÁS megrendelések ON beszállítók.szállító_azonosítója = rendelések.szállító_azonosítója;

Eredménykészletünk így nézne ki:

beszállítói_azonosító Szállító neve rendelés dátuma
10000 IBM 2013/08/12
10001 Hewlett-Packard 2013/08/13
10002 Microsoft
10003 NVIDIA
2013/08/14

A sorok Microsoftés NVIDIA szerepelne, mert TELJES KÜLSŐ CSATLAKOZÁS került felhasználásra. Azonban észre fogja venni, hogy ezeknek a rekordoknak az order_date mezője tartalmazza a érték.

A 10004-es beszállítói azonosító sora is szerepelne, mert TELJES KÜLSŐ JOIN került felhasználásra. Azonban észre fogja venni, hogy ezeknek a rekordoknak a beszállítói_azonosítója és szállítói_neve mezője tartalmazza a érték.

Régi szintaxis

Utolsó megjegyzésként érdemes megemlíteni, hogy a fenti FULL OUTER JOIN példát nem lehetett volna megírni a régi szintaxisban



Tetszett a cikk? Oszd meg