SQLShack (Čeština)

V tomto článku se naučíme SQL koncept více spojení a posílit naše učení o docela jednoduché příklady, které jsou vysvětleny ilustracemi. V relačních databázích jsou data uložena v tabulkách. Bezpochyby a většinu času potřebujeme sadu výsledků, která je tvořena kombinací dat z několika tabulek. Spojení nám umožňují kombinovat data ze dvou nebo více tabulek, abychom mohli spojit data z tabulek, abychom mohli snadno načíst data z více tabulek. Možná se ptáte sami sebe, kolik různých typů spojení existuje na serveru SQL Server. Odpověď je, že existují čtyři hlavní typy spojení, které existují na serveru SQL Server. Nejprve je stručně popíšeme pomocí Vennových diagramů:

  • Vnitřní spojení vrátí řádky, které se shodují v obou tabulkách.

  • Left join vrátí všechny řádky z levé tabulky

  • Right join vrátí všechny řádky z pravé tabulky

  • Full join vrátí celé řádky z obou tabulek

Pokud nemáte znalosti o konceptu připojení SQL na serveru SQL Server, můžete si přečíst článek Přehled typů připojení SQL a výukový článek.

Po tomto krátkém vysvětlení typů připojení SQL projdeme více připojeními.

Co jsou vícenásobná spojení SQL?

Vícenásobná spojení lze popsat následovně; multiple join je dotaz, který obsahuje stejné nebo různé typy spojení, které se používají více než jednou. Tak jsme získali schopnost kombinovat více tabulek dat, abychom překonali problémy s relační databází.

Příklad scénáře

Společnost Green-Tree zahájila novou kampaň na Nový rok a svým online zákazníkům nabídla různé nabídky. V důsledku své kampaně se jim podařilo převést některé nabídky na prodej. V následujících příkladech odhalíme novoroční údaje o kampani společnosti Green-Tree.

Společnost uloží tyto údaje o datech kampaně v následujících tabulkách. Nyní vytvoříme tyto tabulky pomocí následujícího dotazu a naplníme je fiktivními daty:

Jak funguje vícenásobné spojení SQL?

Obchodní problém: O které zákazníky se tento nový rok zajímal kampaň?

Abychom mohli odpovědět na tuto otázku, musíme zjistit odpovídající řádky pro všechny tabulky, protože někteří zákazníci nedostali e-mailovou nabídku a některé nabídky nelze převést na výprodej. Následující Vennův diagram nám pomůže zjistit, které řádky se shodují, které potřebujeme. Stručně řečeno, výsledkem tohoto dotazu by měly být protínající se řádky všech tabulek v dotazu. Šedě zbarvená oblast specifikuje tyto řádky v Vennově diagramu:

Přístup SQL více připojení nám pomůže připojit se k online zákazníkům , tabulky objednávek a prodejů. Jak je znázorněno na Vennově diagramu, musíme porovnat řádky všech tabulek. Z tohoto důvodu spojíme všechny tabulky s klauzulí o vnitřním spojení. Následující dotaz vrátí výslednou sadu, která je od nás požadována, a odpoví na otázku:

1
2
3
4
5
6
7
8

SELECT customerName, customercity, customermail, salestotal
FROM onlinecustomers AS oc
INNER JOIN
objednávek AS o
ON oc.customerid = o.customerid
INNER JOIN
sales AS s
ON o.orderId = s.orderId

Nejprve provedeme analýzu dotazu. Klauzule o vnitřním spojení, která je mezi tabulkami online zákazníků a objednávek, odvozuje odpovídající řádky mezi těmito dvěma tabulkami. Druhá vnitřní klauzule o spojení, která kombinuje prodejní tabulku odvozenou od odpovídajících řádků z předchozí sady výsledků. Následující ilustrace barevných tabulek nám pomůže pochopit shodu dat spojených tabulek v dotazu. Žlutě zbarvené řádky určují shodná data mezi online zákazníky a objednávkami. Na druhé straně v prodejních tabulkách existují pouze modře zbarvené řádky, takže výsledkem dotazu budou modře zbarvené řádky:

Výsledek dotazu bude vypadat takto:

Použití různých typů spojení v SQL více spojení

Obchodní problém: Které nabídky nelze převést na prodej?

Můžeme použít různé typy spojení v jednom dotazu, abychom mohli překonat různé problémy s relační databází.V tomto příkladu potřebujeme všechny řádky tabulky objednávek, které se shodují s tabulkami zákazníků online. Na druhou stranu tyto řádky v prodejní tabulce neexistují. Následující Vennův diagram nám pomůže zjistit, které řádky se shodují, které potřebujeme. Šedě zbarvená oblast označuje řádky, které budou výstupem dotazu:

V prvním kroku bychom měli kombinovat tabulky onlinezákazníků a objednávek prostřednictvím klauzule vnitřní spojení, protože vnitřní spojení vrací všechny uzavřené řádky mezi tabulkami onlinezákazníků a objednávek. Ve druhém kroku zkombinujeme tabulku objednávek do prodejní tabulky prostřednictvím levého spojení a poté vyfiltrujeme nulové hodnoty, protože musíme eliminovat řádky, které jsou uloženy v prodejní tabulce:

1
2
3
4
5
6
7
8
9

SELECT customerName, customercity, customermail, ordertotal, salestotal
FROM onlinecustomers AS c
INNER JOIN
commands AS o
ON c.customerid = o.customerid
LEFT JOIN
sales AS s
ON o.orderId = s.orderId
KDE s.salesId JE NULL

Výsledek dotazu vypadat takto:

Kvíz

Q uestion: Vygenerujte správný dotaz podle níže uvedeného Vennova diagramu.

Odpověď: Jak jsme se dozvěděli, úplné připojení umožňuje nám vrátit všechny řádky z kombinovaných tabulek. Zodpovězený dotaz bude vypadat takto:

1
2
3
4
5
6
7
8

SELECT customerName, customercity, customermail, ordertotal, salestotal
FROM onlinecustomers AS c
FULL JOIN
objednávky AS o
ON c.customerid = o.customerid
FULL JOIN
sales AS s
ON o.orderId = s.orderId

Závěr

V tomto článku jsme se zaměřili na přístup SQL více spojení a naučili jsme se ho pomocí podrobných příkladů. Více spojení nám umožňuje kombinovat více než dvě tabulky, abychom mohli překonat různé problémy v systému relačních databází. Dále jsme viděli, jak bychom mohli použít různé typy spojení v jednom dotazu.

  • autor
  • poslední příspěvky
Esat Erkec je Profesionál na SQL Server, který zahájil svou kariéru před 8 a více lety jako softwarový vývojář. Je odborníkem na Microsoft SQL Certified Solutions.
Většina jeho kariéry byla zaměřena na správu a vývoj databází serveru SQL Server. V současné době se zajímá o správu databází a Business Intelligence. Najdete ho na LinkedIn.
Zobrazit všechny příspěvky od Esat Erkec

Poslední příspěvky od Esat Erkec (zobrazit všechny)
  • Začínáme s programováním SQL – 3. února 2021
  • Jak číst provedení plán se všemi podrobnostmi – 28. ledna 2021
  • Přehled a příklady příkazu SELECT SELECT SQL – 25. ledna 2021

Leave a Reply

Napsat komentář

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