Doporučená, 2024

Redakce Choice

Rozdíl mezi levým, pravým a úplným vnějším spojením

Dříve jsme hovořili o rozdílech mezi vnitřním spojem a vnějším spojením, kde jsme si přečetli typy vnějšího spojení. Vnější spojení je ten, kdo zachovává n-tice ve výsledku, který by byl ztracen během operace spojení. V tomto článku; budeme diskutovat o rozdílech mezi typy vnějšího spojení. Existují tři typy vnějšího spojení; Levý vnější spoj, pravý vnější spoj a plný vnější spoj. Levý, pravý a plný vnější spoj se liší ve svém prováděcím plánu a získaných výsledcích. Můžeme vynechat vnější slovo z levého, pravého a úplného vnějšího spojení. Prozkoumejme rozdíly mezi levým, pravým a úplným vnějším spojením pomocí srovnávací tabulky uvedené níže.

Srovnávací graf

Základ pro porovnáníLevý vnější spojPravý 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í NULLTuple 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í.

Dodržujte výsledek získaný z levé vnější spojky; má všechny n-tice z tabulky studentů spolu s odpovídajícími n-ticemi z tabulky studentů a oddělení. Žák Jimmyho, Joseph Harryho ze Studentského stolu nebyl přítomen v pracovním stole. Proto jsou hodnoty atributů tabulky oddělení pro Jimmyho, Josefa Harryho rozšířeny na NULL.

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ů.

Sledujte výsledek získaný z pravého vnějšího spojení; má všechny n-tice z tabulky oddělení spolu s odpovídajícími n-ticemi z tabulky studentů i oddělení. Student_ID 10536 a 00954, tabulka oddělení, nejsou v tabulce studenta. Hodnota atributu Name for Student_ID 10536 a 00954 je proto rozšířena na hodnotu NULL.

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.

Dodržujte výsledek získaný z celého vnějšího spoje; má všechny n-tice z tabulky studentů a oddělení spolu s odpovídajícími n-ticemi z tabulky studentů a oddělení. Student_id Jimmyho, Josefa Harryho, tj. 10026, 02256, 56362 studentského stolu, nebyl v tabulce oddělení přítomen. Proto hodnoty atributů tabulky oddělení pro Jimmyho, Josefa Harryho jsou rozšířeny na NULL . Student_ID 10536 a 00954, tabulky oddělení, nejsou ve sloupci Student_ID studentské tabulky. Hodnota atributu Name atributu pro Student_ID 10536 a 00954 je proto rozšířena na hodnotu NULL .

Klíčové rozdíly mezi levým, pravým a úplným vnějším spojením

  1. 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.
  2. 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.

Top