Jednou z největších výhod používání relačních databází, jako je MySQL, je to, že její relační struktura umožňuje snadné ukládání a dotazování informací napříč několika tabulkami.
Pojďme prozkoumat, jak načíst přesně ta data, která chcete, z více databázových tabulek a různých spojení, která jsou k dispozici a která vám umožní získat přesné výsledky, které chcete.
Inicializovat ukázkovou databázi
To není povinné, ale pokud byste chtěli postupovat podle příkladů v tomto článku, můžete lokálně inicializovat ukázkovou databázi pomocí níže uvedených příkazů terminálu:
git klon https://github.com/mdizak/sample-select-db.git
cd sample-select-db
sudo mysql sudo mysql sampledb
mysql> VYBERTE POČET (*) OD ZÁKAZNÍKŮ;
Měli byste získat výsledek s uvedením, že uvnitř souboru je 2000 řádků zákazníky stůl.
Výchozí / VNITŘNÍ připojení
Výchozí spojení použité v rámci MySQL databáze se nazývá VNITŘNÍ spojení a je nejběžnější a nejpřímější. Toto spojení vrátí všechny záznamy, pro které jsou v obou tabulkách shodné záznamy, a zruší všechny ostatní záznamy.
Java poskytuje JDBC jako součást sady Java SDK. V tomto článku se podívejme na podrobnosti připojení k databázi MySQL a provádění dotazů s ní.
Pokud byste například chtěli vidět křestní jméno a příjmení zákazníka, plus částku a datum objednávky u všech objednávek větších než 1 000 $, můžete použít následující příkaz SQL:
VYBRAT
c.id, c.first_name, c.last_name, o.amount, o.created_at
Z
zákazníci c, objednávky o
KDE
o.customer_id = c.id AND o.amount> = 1000;
Několik poznámek k výše uvedenému dotazu:
- Vybírá se pět různých sloupců, tři z tabulky zákazníků a dva z tabulky objednávek.
- V klauzuli FROM jsou dvě tabulky definovány, ale jsou doplněny písmeny „c“ a „o“. Tyto jednoduše určují aliasy v rámci SQL, mohou být cokoli, co si přejete, a používají se ke zkrácení dotazu SQL.
- The o.customer_id = c.id je spojovacím aspektem dotazu a zajišťuje správnou korelaci mezi zákazníky a objednávkami.
Níže je uveden jiný a technicky syntakticky správnější způsob psaní stejného dotazu:
VYBRAT
c.id, c.first_name, c.last_name, o.amount, o.created_at
Z
zákazníci c VNITŘNÍ PŘIPOJENÍ objednávky o
NA
customer_id = c.id
KDE
o. množství> = 1000;
Výše uvedený dotaz má tendenci být o něco snadněji čitelný, protože můžete snadno vidět spojení mezi tabulkou zákazníků a objednávek. Pro všechny záměry jsou však tyto dva dotazy stejné a vytvoří přesně stejné záznamy.
VLEVO se připojí
Levé spojení vrátí všechny záznamy z levé tabulky, které se také shodují se záznamy z pravé tabulky, a zruší všechny ostatní záznamy. Například možná chcete zobrazit celkovou částku prodeje každého produktu v databázi, můžete zkusit použít dotaz, jako například:
VYBRAT
p.name, sum (item.amount) AS tamount
Z
order_items item LEFT JOIN products str
NA
item.product_id = p.id
GROUP BY item.product_id OBJEDNAT BY tamount DESC
Výsledkem je pěkné zobrazení ve dvou sloupcích, které zobrazuje název produktu s celkovou částkou prodeje a funguje podle očekávání. Dotaz prošel všemi produkty v tabulce order_items, připojil je k záznamům v tabulce produktů a vrátil celkovou částku prodeje každého z nich.
SPRÁVNĚ se připojí
Pomocí výše uvedeného příkladu si všimněte skutečnosti, že výše uvedený dotaz vrátil pouze 19 záznamů, zatímco v databázi je celkem 22 produktů. Důvodem je, že dotaz začínal tabulkou order_items a nechal ji připojenou k tabulce produktů, a protože některé produkty nebyly nikdy objednány, neexistují žádné záznamy o těchto produktech v rámci order_items stůl.
Co se stane, pokud chcete získat seznam všech produktů s částkami prodeje, včetně produktů, které nebyly objednány? Zkuste správné připojení pomocí následujícího dotazu:
VYBRAT
p.name, sum (item.amount) AS tamount
Z
order_items item RIGHT JOIN products str
NA
item.product_id = p.id
SKUPINA PODLE p.id OBJEDNAT PODLE tamount POP
To je lepší a dotaz nyní vrací celých 22 produktů, přičemž tři z nich mají určité množství nula. Důvodem je, že namísto použití order_items jako primární tabulky, která se připojí k tabulce produktů, pravé spojení převrátí objednávku a připojí tabulku produktů k tabulce orders_items.
Více připojení v dotazu
Někdy potřebujete spojit tři nebo více tabulek dohromady, abyste získali konkrétní sadu výsledků.
Například byste možná chtěli seznam všech zákazníků, kteří si koupili mikrovlnnou troubu (číslo produktu # 1), včetně jejich jména a data objednávky. To vyžaduje VÝBĚR přes tři tabulky, který lze provést pomocí dvou spojení s následujícím dotazem:
VYBRAT
c.first_name, c.last_name, o.amount, o.created_at
Z
zákazníci c VNITŘNÍ PŘIPOJENÍ objednávky o
NA
c.id = o.customer_id VNITŘNÍ PŘIPOJENÍ item_tems
NA
item.order_id = o.id
KDE
item.product_id = 1 OBJEDNAT BY o.created_at;
Tento dotaz vrátí všech 426 objednávek mikrovlnné trouby a funguje podle očekávání. Nejprve porovná všechny zákazníky s jejich příslušnými objednávkami, poté další dotazy, jejichž výsledkem je sada přiřazení všech objednávek pouze k těm v tabulce order_items, které obsahují mikrovlnný produkt (id # 1).
Nikdy nepoužívejte dílčí dotazy s klauzulemi IN
Jako rychlý sidenote byste se za každou cenu měli vždy vyhnout používání poddotazů v rámci svých dotazů SQL, jako například:
SELECT first_name, last_name FROM customers WHERE id IN (SELECT customer_id FROM objednávek WHERE status = 'schváleno' A částka <100);
Dotazy jako výše jsou velmi neefektivní, využívají velké množství zdrojů a je třeba se jim co nejvíce vyhnout. Místo toho použijte správná spojení, jak je uvedeno ve výše uvedených částech. Například výše uvedený dotaz by měl být přepsán jako:
SELECT c.first_name, c.last_name FROM customers c LEFT JOIN commands o ON o.customer_id = c.id WHERE o.status = 'schváleno' AND o.amount <100;
Ušetřete čas spojením SQL
Tento článek snad pomůže ukázat vám sílu relačních databází, jako je MySQL, a jak stavět SQL dotazy které načítají záznamy z více tabulek v rámci jednoho dotazu pomocí spojení, což vám umožňuje získat přesné požadované výsledky.
Naučili jste se tři různá spojení v rámci SQL, jak pojmenovat názvy sloupců a tabulek, použít více spojení v jednom dotazu a proč byste se měli vyhnout poddotazům. Nikdy se nepokoušejte znovu zkoušet ručně kompilovat různé datové sady do jedné a začněte používat spojení, abyste zapůsobili na své pracovní kolegy a ušetřili čas.
Dokumenty Google jsou nyní kancelářskou elektrárnou. Pomocí těchto doplňků můžete své Dokumenty Google vypadat hezky a stylově.
- Programování
- SQL
- databáze
Přihlaste se k odběru našeho zpravodaje
Připojte se k našemu zpravodaji s technickými tipy, recenzemi, bezplatnými elektronickými knihami a exkluzivními nabídkami!
Ještě jeden krok…!
V e-mailu, který jsme vám právě poslali, potvrďte svou e-mailovou adresu.