SQLShack (Čeština)

Tento článek poskytne úplný přehled s příklady vnějšího spojení SQL, včetně úplného, pravého a levého vnějšího spojení, jakož i pokrytí spojení mezi levým a pravým vnějším spojením SQL.

Je nezbytné porozumět procesu získávání dat z více tabulky. Začátečník nemusí mít představu o připojení na serveru SQL Server. V tomto tipu si vezmeme přehled spojování SQL, naučíme se SQL OUTER JOIN spolu s jeho syntaxí, příklady a případy použití.

V systému relačních databází je nejlepší postupovat podle zásad normalizace, ve kterém jsme v podstatě rozdělili velké stoly na menší stoly. V příkazu select můžeme načíst data z těchto tabulek pomocí spojení. Můžeme se připojit k tabulkám a získat požadovaná pole z těchto tabulek ve výsledkové sadě. Tyto tabulky by měly mít nějaká společná pole pro vzájemný vztah. Můžete najít data rozdělená do více databází a někdy je to také velmi složitá struktura. S Joins můžeme spojit data z více tabulek, databází uživatelsky přívětivým způsobem a reprezentovat tato data v aplikaci.

Můžeme reprezentovat SQL JOIN pomocí následujícího obrázku

Na serveru SQL Server můžeme mít mnoho typů připojení SQL. Na následujícím obrázku můžete vidět kategorie připojení SQL.

Podívejme se podrobněji na SQL Outer Join v nadcházející části.

Přehled SQL OUTER JOIN

K porovnání řádků mezi tabulkami používáme SQL OUTER JOIN. Možná budeme chtít získat shodné řádky spolu s nepřizpůsobenými řádky také z jedné nebo obou tabulek. Máme následující tři typy SQL OUTER JOINS.

  1. SQL Full Outer Join
  2. SQL Left Outer Join
  3. SQL Right Outer Join

Pojďme prozkoumat každý z vnějších spojení SQL s příklady.

Úplné vnější připojení SQL

V úplném vnějším spojení SQL jsou zahrnuty všechny řádky z obou tabulek . Pokud existují nesrovnatelné řádky, zobrazí pro ně hodnoty NULL.

Efektivně to pochopíme na příkladech. Vytvořme ukázkovou tabulku a vložte do ní data.

Následující datový model obou tabulek můžete odkázat.

Vložte data do tabulky zaměstnanců pomocí následujícího skriptu.

Vložit data do tabulky oddělení

Můžeme reprezentovat logický vztah mezi dvěma tabulkami pomocí Vennova diagramu. Ve Vennově diagramu obsahuje více překrývajících se kruhů a každý kruh představuje entitu nebo tabulku. Společná oblast nebo překrývající se oblast ve Vennově diagramu představují společné hodnoty mezi oběma tabulkami.

Například na následujícím snímku obrazovky máme dva překrývající se kruhy. Každý kruh nesnáší tabulku (zaměstnanec a oddělení). Rozumíme FULL Outer join pomocí následujícího příkladu.

V obou tabulkách máme společné pole (EmpID); proto můžeme připojit tabulku s tímto sloupcem. V následujícím dotazu jsme definovali FULL OUTER JOIN mezi odděleními a tabulkou zaměstnanců ve sloupci EMPID obou tabulek.

1
2
3

SELECT *
OD Zaměstnanec
FULL OUTER JOIN Departments ON Employee.EmpID = Departments.EmpID;

SQL Full Outer Join poskytuje následující řádky ve výstupu

  • Odpovídající řádky mezi oběma tabulkami
  • Nepřiřazené řádky z obou tabulek (hodnoty NULL )

Spustíme tento dotaz a vrátíme výstup dotazu Full Outer Join. Dostaneme následující výstup.

Vidíme také několik záznamů s hodnotami NULL. Pojďme to lépe pochopit pomocí Vennova diagramu.

Na následujícím snímku obrazovky uvidíte následující informace

  • EmpID 1, 2,3,4,5 , 6,10 existuje v tabulce Zaměstnanec i Oddělení. Ve výstupu dotazu Full Outer Join dostaneme všechny tyto řádky s daty z obou tabulek
  • EmpID 7, 8, 9 existuje v tabulce Zaměstnanec, ale ne v tabulce Oddělení. Nezahrnuje žádné odpovídající řádky v tabulce oddělení; proto; pro tyto záznamy dostaneme NULL hodnoty

Nyní pro ukázkové účely vložme do tabulek oddělení ještě jeden záznam . V tomto dotazu vložíme EmpID 11, který v tabulce Zaměstnanec neexistuje.

Znovu spusťte dotaz SQL Full Outer Join. Na následujícím obrázku získáte jeden další řádek s hodnotami NULL. V tabulce zaměstnanců nemáme žádný odpovídající řádek pro EmpID 11.Z tohoto důvodu pro něj ve výstupu dostaneme NULL hodnoty.

Jako shrnutí můžeme představit úplné připojení SQL pomocí následujícího Vennova diagramu. Dostaneme to, co je reprezentováno ve zvýrazněné oblasti na výstupu Full Outer join.

SQL FULL OUTER JOIN a WHERE clause

Můžeme přidat klauzuli WHERE s SQL FULL OUTER JOIN, abychom získali řádky bez odpovídajících dat mezi oběma tabulkami join.

V následujícím dotazu přidáme klauzuli where do zobrazit pouze záznamy s hodnotami NULL.

1
2
3
4
5

SELECT *
OD OD zaměstnanců
FULL OUTER JOIN Departments ON Employee.EmpID = Departments.EmpID
WHERE Employee.EmpID IS NULL
NEBO Departments.EmpID JE NULL;

Proveďte tento příkaz a zobrazte výstup. Vrací pouze řádky, které se neshodují v tabulce Zaměstnanec ani Oddělení.

SQL LEFT OUTER JOIN

V levém vnějším spojení SQL dostaneme v našem výstupu následující řádky.

  • Poskytne výstup odpovídajícího řádku mezi oběma tabulkami
  • Pokud se žádné záznamy neshodují z levé tabulky také zobrazuje ty záznamy s hodnotami NULL

Spusťte následující kód a vraťte výstup SQL LEFT OUTER JOIN

1
2
3

SELECT *
FROM Employee
LEFT OUTER JOIN Departments ON Employee.EmpID = Departments.EmpID

Na následujícím obrázku můžete vidět, že máme hodnoty NULL pro EmpID 7,8 a 9. Tyto EmpID neexistují na pravé straně Tabulka oddělení.

Musíme si všimnout umístění umístění tabulky v příkazu Připojit. V současné době máme na levé straně tabulku zaměstnanců a na pravé straně tabulku oddělení.

Přepíšeme dotaz a vyměníme pozici tabulek v dotazu. V tomto dotazu máme tabulku Department na levé pozici, takže Left Outer Join by měl zkontrolovat hodnoty této tabulky a v případě nesouladu vrátit hodnotu NULL.

Na následujícím snímku obrazovky můžete vidět, že pouze jedna NULL hodnota pro EmpID 11. Je to proto, že EmpID 11 není v tabulce Zaměstnanec k dispozici.

Jako shrnutí, můžeme reprezentovat SQL Left Outer Join pomocí následujícího Vennova diagramu. Získáme zvýrazněnou oblast ve výstupu SQL Left Outer Join.

SQL Right OUTER JOIN

V SQL Right Outer join, we get the following lines in our output.

  • Poskytuje výstup odpovídajícího řádku mezi oběma tabulkami
  • Pokud se žádné záznamy neshodují z pravá tabulka, zobrazuje také ty záznamy s hodnotami NULL

Proveďte následující dotaz a získejte výstup Right Outer Join

1
2
3

VYBERTE *
OD zaměstnanců
SPRÁVNĚ VNĚJŠÍ PŘIPOJENÍ Oddělení ON Employee.EmpID = Departments.EmpID

Na následujícím obrázku je vidět, že dostaneme všechny odpovídající řádky spolu s jedním řádkem s hodnotami NULL. Řádek nulové hodnoty má EmpID 11, protože v tabulce Zaměstnanec neexistuje. Můžete si také všimnout, že pozice tabulky Oddělení je na správné pozici v Připojit. Z tohoto důvodu nedostáváme hodnoty z tabulky Zaměstnanec (levá pozice), která se neshoduje s tabulkou Oddělení (pravá strana).

Jak již bylo zdůrazněno, pozice tabulky je v příkazu JOIN důležitá. Pokud změníme pozice tabulky, získáme jiný výstup. V následujícím dotazu máme tabulku oddělení (vlevo) a tabulku zaměstnanců (vpravo).

1
2
3
4

SELECT *
Z ODDĚLENÍ
SPRÁVNĚ VNĚJŠÍ PŘIPOJENÍ Zaměstnanec NA Oddělení. 855a9d8a79 „>

Rozdíl v pravém vnějším spojení si můžete všimnout po výměně pozic tabulek ve výše uvedeném dotazu.

Jako souhrn můžeme představit SQL Right Outer join pomocí následujícího Vennova diagramu. Získáme zvýrazněnou oblast ve výstupu SQL Right Outer Join.

Spojení mezi SQL Left Outer Join a SQL Right Outer Join Připojit

V předchozích příkladech jsme zkoumali SQL Left Outer Join a SQL Right Outer Join s různými příklady. Můžeme udělat Unii výsledku obou SQL Left Outer Join a SQL Right Outer Join. Poskytuje výstup SQL Full Outer join.

Spusťte následující dotaz jako alternativu k SQL Full Outer Join.

1
2
3
4
5
6
7

VÝBĚR *
OD zaměstnanců
VLEVO VNĚJŠÍ PŘIPOJENÍ Oddělení ZAPNUTA Employee.EmpID = Departments.EmpID
UNION ALL
SELECT *
FROM Employee
RIGHT OUTER JOIN Departments ON Employee.EmpID = Departments.EmpID

V následujícím výstupu dostaneme všechny odpovídající záznamy, zrušit shodu záznamů z levé tabulky a zrušit shodu záznamů z pravé tabulky. Je to podobné jako výstup SQL Full Outer join.

Závěr

V tomto článku prozkoumali jsme vnější připojení SQL a jeho typy spolu s příklady. Doufám, že vám tento článek pomohl. Neváhejte nám poskytnout zpětnou vazbu v komentářích níže.

  • Autor
  • Poslední příspěvky
Jako společnost s certifikací MCSA a Microsoft Certified Trainer v indickém Gurgaonu se 13 lety zkušeností pracuje Rajendra pro celou řadu velkých společností zaměřených na optimalizaci výkonu, monitorování, vysokou dostupnost a strategie a implementaci zotavení po katastrofě. Je autorem stovek autoritativních článků o SQL Serveru, Azure, MySQL, Linuxu, Power BI, ladění výkonu, AWS / Amazon RDS, Git a souvisejících technologiích, které si dosud prohlédlo více než 10 milionů čtenářů.
Je tvůrcem jedné z největších bezplatných online sbírek článků na jedno téma se svou 50dílnou sérií o skupinách dostupnosti na serveru SQL Server Always On. Na základě svého příspěvku pro komunitu SQL Server byl oceněn různými oceněními, včetně prestižního ocenění „Nejlepší autor roku“ průběžně v letech 2020 a 2021 na serveru SQLShack.
Raj se vždy zajímá o nové výzvy, takže pokud potřebujete poradit pomoc s jakýmkoli tématem obsaženým v jeho spisech, lze ho kontaktovat na adrese [email protected]
Zobrazit všechny příspěvky od Rajendra Gupta

Poslední příspěvky od Rajendry Gupty (zobrazit všechny)
  • Časové limity relací na serveru SQL Server vždy dostupné Skupiny – 8. února 2021
  • Provádění upgradů menších a hlavních verzí pro AWS RDS SQL Server – 29. ledna 2021
  • Nasazení instancí AWS RDS PostgreSQL – 27. ledna 2021

Write a Comment

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *