Srovnávací graf
Základ pro porovnání | Levý vnější spoj | Pravý vnější spoj | Úplné vnější spojení |
---|---|---|---|
Základní | Ve výsledku zůstávají všechny n-tice levé tabulky. | Všechny n-tice pravého stolu zůstávají ve výsledku. | Ve výsledku zůstávají všechny n-tice zleva i pravý stůl. |
Rozšíření NULL | Tuple levé tabulky, která nemá odpovídající tuple v pravé tabulce, jsou rozšířeny o hodnotu NULL pro atributy pravé tabulky. | Tupice pravé tabulky, která nemá odpovídající tuple v levé tabulce, jsou rozšířeny o hodnotu NULL pro atributy levé tabulky. | N-tice levých a pravých tabulek, které nemají odpovídající tupice v pravé a levé tabulce, jsou rozšířeny o hodnotu NULL pro atributy pravého a levého stolu. |
Definice levého vnějšího spojení
Předpokládejme, že máme „ Table_A Left Outer Join Table_B “. Takže Table_A je naše levá tabulka, jak se zdá, že je vlevo od levého vnějšího spojení a Table_B je náš pravý stůl.
Zpočátku bude vnitřní spojení aplikováno na Table_A a Table_B, které vrátí všechny odpovídající tuple z tabulky A a B.
Dále vrátí všechny n-tice z tabulky Table_A, které nemají odpovídající tabulku v tabulce_B. Takové výsledné n-tice by byly vyplněny hodnotami NULL pro atributy pravé tabulky.
Výsledek získaný z levého vnějšího spoje tedy zachovává všechny n-tice z levé tabulky a pouze odpovídající n-tice z pravé tabulky.
Pojďme diskutovat o levém vnějším spojení s příkladem; máme dvě tabulky níže, Student Table a Department Table.
Nyní použijeme levý vnější spoj, na tabulku studentů a oddělení.
SELECT * FROM Student LEFT OUTER JOIN Department
O studentovi. Student_ID = Department.Student_ID
Ve výše uvedeném dotazu je tabulka Student levá tabulka a tabulka Oddíl je správná tabulka. Takže podle levého vnějšího spojení musí mít výsledek všechny n-tice ze studentské tabulky a pouze odpovídající n-tice z tabulky oddělení.
Definice pravého vnějšího spojení
Předpokládejme, že máme „ Table_A Right Outer Join Table_B “. Takže Table_A je naše levá tabulka, jak to vypadá, že vlevo od pravého vnějšího spojení operace a Table_B je náš pravý stůl.
Stejně jako v levém vnějším spoji, zpočátku bude vnitřní spojení aplikováno na Table_A a Table_B, které vrátí všechny odpovídající tuple z tabulky A a B.
Dále vrátí všechny n-tice z Table_B, které v tabulce_A nemají odpovídající n-tici. Takové výsledné n-tice by byly vyplněny hodnotami NULL pro atributy levé tabulky.
Výsledek získaný z pravého vnějšího spojení tedy zachovává všechny n-tice z pravé tabulky a pouze odpovídající n-tice z levé tabulky.
Pojďme diskutovat o pravém vnějším spojení s příkladem; výše máme dvě tabulky, Student Table a Department Table.
Nyní použijeme pravý vnější spoj s tabulkou studentů a tabulkou oddělení.
SELECT * FROM Student RIGHT OUTER JOIN Oddělení
O studentovi. Student_ID = Department.Student_ID
Ve výše uvedeném dotazu je tabulka studentů náš levý stůl a tabulka oddělení je naším pravým stolem. Podle operace pravého vnějšího spojení musí výsledek zahrnovat všechny n-tice z tabulky oddělení a pouze odpovídající n-tice z tabulky studentů.
Definice úplného vnějšího spojení
Předpokládejme, že máme „ Table_A Full Outer Join Table_B “. Takže Table_A je naše levá tabulka, jak se zdá, že zůstane v provozu Full Outer Join a tabulka_B je náš pravý stůl.
Úplné vnější spojení je kombinací levého vnějšího spojení a pravého vnějšího spojení . Zpočátku aplikuje vnitřní spojení na Table_A a Table_B pro načtení odpovídajících n-tic z obou tabulek. Pak rozšíří ty n-tice tabulky_A s NULL, které nemají odpovídající tuple v Table_B. Dále rozšiřuje tyto n-tice z Table_B s NULL, které nemají odpovídající n-tici v tabulce_A.
Plné vnější spojení tedy zachovává všechny n-tice zleva i pravý stůl spolu s odpovídajícími n-ticemi obou tabulek.
Pojďme diskutovat příklad FULL Outer Join; máme dvě tabulky výše, Student Table a Department Table.
Nyní použijeme Full Outer Join to Student table a Department table.
SELECT * FROM Student FULL OUTER JOIN Oddělení
O studentovi. Student_ID = Department.Student_ID
Ve výše uvedeném dotazu je tabulka studentů naší tabulkou vlevo a tabulka oddělení je naším pravým stolem. Podle úplného vnějšího spojení musí výsledek zahrnovat všechny n-tice z obou tabulek.
Klíčové rozdíly mezi levým, pravým a úplným vnějším spojením
- Výsledek levého vnějšího spojení má všechny n-tice levé tabulky. Podobně výsledek pravého vnějšího spojení má všechny n-tice pravé tabulky. Výsledek Full Outer Join má všechny n-tice z levého i pravého stolu.
- V levém vnějším spojení jsou n-tice levé tabulky, které nemají odpovídající tuple v pravé tabulce, rozšířeny o hodnoty Null pro atributy pravé tabulky. Naproti tomu je případ pravého vnějšího spojení. A v úplném vnějším spojení jsou n-tice z levých a pravých tabulek, které nemají odpovídající n-tice v pravém a levém tabulce, rozšířeny o NULL pro atributy pravé a levé tabulky.
Závěr:
Postarejte se o pozice názvů tabulek v dotazu. Vzhledem k tomu, že pozice názvu tabulky v dotazu rozhoduje, zda bude tabulka považována za tabulku vlevo nebo vpravo.