Jednou z najväčších výhod používania relačných databáz, ako je MySQL, je to, že jej relačná štruktúra umožňuje jednoduché ukladanie a dopytovanie informácií vo viacerých tabuľkách.

Poďme preskúmať, ako presne získať požadované dáta z viacerých databázových tabuliek a rôznych spojení, ktoré sú k dispozícii a ktoré vám umožňujú získať presné výsledky, ktoré požadujete.

Inicializovať ukážkovú databázu

Toto nie je potrebné, ale ak by ste chceli postupovať podľa príkladov v tomto článku, môžete inicializovať vzorovú databázu lokálne pomocou nasledujúcich príkazov 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ÍKOV;

Mali by ste dostať výsledok s uvedením, že v rámci súboru je 2 000 riadkov zákazníkov stôl.

Predvolené / VNÚTORNÉ pripojenie

Predvolené spojenie použité v MySQL databázy sa nazýva VNÚTORNÉ spojenie a je najbežnejším a najpriamejším riešením. Toto spojenie vráti všetky záznamy, pre ktoré sú v oboch tabuľkách zodpovedajúce záznamy, a zruší všetky ostatné záznamy.

instagram viewer
Ako sa pripojiť k databáze MySQL pomocou Java

Java poskytuje JDBC ako súčasť súpravy Java SDK. V tomto článku sa pozrime na podrobnosti pripojenia k databáze MySQL a vykonávania dotazov s ňou.

Napríklad ak chcete vidieť meno a priezvisko zákazníka, plus sumu a dátum objednávky pre všetky objednávky väčšie ako 1 000 USD, môžete použiť nasledujúci príkaz SQL:


VYBERTE
c.id, c.first_name, c.last_name, o.amount, o.created_at
ZO
zákazníci c, objednávky o
KDE
o.customer_id = c.id AND o.amount> = 1000;

Niekoľko poznámok k vyššie uvedenému dotazu:

  • Vyberá sa päť rôznych stĺpcov, tri z tabuľky zákazníkov a dva z tabuľky objednávok.
  • V klauzule FROM sú definované dve tabuľky, ktoré sú však doplnené písmenami „c“ a „o“. Jednoducho určujú aliasy v rámci SQL, môžu byť akékoľvek, čo si prajete, a používajú sa na skrátenie dotazu SQL.
  • The o.customer_id = c.id je spojovacím aspektom dotazu a zaisťuje správnu koreláciu medzi zákazníkmi a objednávkami.

Odlišný a technicky syntakticky správnejší spôsob písania rovnakého dotazu je uvedený nižšie:


VYBERTE
c.id, c.first_name, c.last_name, o.amount, o.created_at
ZO
zákazníci c VNÚTORNÉ PRIPOJENIE objednávky o
ZAP
customer_id = c.id
KDE
o.číslo> = 1000;

Vyššie uvedený dopyt má tendenciu byť o niečo ľahšie čitateľný, pretože môžete ľahko vidieť spojenie medzi tabuľkou zákazníkov a objednávok. Pre všetky účely sú však tieto dva dotazy rovnaké a vytvoria úplne rovnaké záznamy.

LEFT sa pripája

Pripojenie doľava vráti všetky záznamy z ľavej tabuľky, ktoré sa tiež zhodujú so záznamami z pravej tabuľky, a zruší všetky ostatné záznamy. Napríklad chcete zobraziť celkovú sumu predaja každého produktu v databáze, môžete skúsiť použiť dotaz, ako napríklad:


VYBERTE
p.name, suma (item.amount) AS tamount
ZO
order_items item LEFT JOIN products str
ZAP
item.product_id = p.id
SKUPINA PODĽA item.product_id OBJEDNAŤ podľa tamount DESC

Výsledkom je pekné zobrazenie v dvoch stĺpcoch, ktoré zobrazuje názov produktu s celkovou sumou predaja a funguje podľa očakávaní. Dotaz prešiel všetkými produktmi v tabuľke order_items, spojil ich so záznamami v tabuľke produktov a vrátil celkový objem predaja každého z nich.

SPRÁVNE sa pripája

Pomocou vyššie uvedeného príkladu si všimnite skutočnosť, že vyššie uvedený dotaz vrátil iba 19 záznamov, zatiaľ čo v databáze je celkovo 22 produktov. Je to tak preto, lebo dopyt sa začínal tabuľkou order_items a nechal sa ju spojiť s tabuľkou produktov, a pretože niektoré výrobky neboli nikdy objednané, v rámci položiek order_items neexistujú žiadne záznamy o týchto výrobkoch stôl.

Čo sa stane, ak chcete získať zoznam všetkých produktov s objemom predaja vrátane produktov, ktoré neboli objednané? Vyskúšajte pravé spojenie s nasledujúcim dotazom:


VYBERTE
p.name, suma (item.amount) AS tamount
ZO
order_items item RIGHT JOIN products str
ZAP
item.product_id = p.id
SKUPINA PODĽA p.id OBJEDNÁVKA PODĽA tamount POP

To je lepšie a dopyt teraz vracia celých 22 produktov, pričom tri z nich majú množstvo nulový. Je to tak preto, že namiesto použitia order_items ako primárnej tabuľky, ktorá sa pripája k tabuľke produktov, pravé spojenie prevráti objednávku a pripojí tabuľku produktov k tabuľke orders_items.

Viaceré pripojenia v dotaze

Niekedy potrebujete spojiť tri alebo viac tabuliek, aby ste dosiahli konkrétnu sadu výsledkov.

Napríklad by ste možno chceli zoznam všetkých zákazníkov, ktorí si kúpili mikrovlnnú rúru (ID produktu č. 1), vrátane ich mena a dátumu objednávky. To si vyžaduje VÝBER v troch tabuľkách, čo je možné vykonať pomocou dvoch spojení s nasledujúcim dotazom:


VYBERTE
c.first_name, c.last_name, o.amount, o.created_at
ZO
zákazníci c VNÚTORNÉ PRIPOJENIE objednávky o
ZAP
c.id = o.customer_id položka VNÚTORNÉHO SPOJENIA objednávky_položky
ZAP
item.order_id = o.id
KDE
item.product_id = 1 OBJEDNÁVKA BY o.created_at;

Tento dopyt vráti všetkých 426 objednávok mikrovlnnej rúry a funguje podľa očakávania. Najskôr priradí všetkých zákazníkov k ich príslušným objednávkam a potom k ďalším dotazom, ktoré nastaví priraďovanie všetkých objednávok iba k tým v rámci tabuľky order_items, ktoré obsahujú mikrovlnný produkt (id # 1).

Nikdy nepoužívajte poddotazy s klauzulami IN

Ako rýchly pomocník by ste sa mali za každú cenu vyhnúť používaniu poddotazov v rámci svojich dotazov SQL, ako napríklad:

SELECT first_name, last_name FROM customers WHERE id IN (SELECT customer_id FROM objednávok WHERE status = 'schválené' A suma <100);

Dotazy, ako sú uvedené vyššie, sú veľmi neefektívne, využívajú veľké množstvo zdrojov a je potrebné sa im čo najviac vyhnúť. Namiesto toho použite správne spojenia, ako je uvedené v predchádzajúcich častiach. Napríklad vyššie uvedený dopyt by mal byť prepísaný ako:

VYBERTE c.first_name, c.last_name OD ZÁKAZNÍKOV c LEFT JOIN objednávky o ZAP o.customer_id = c.id KDE o.status = 'schválené' A o.číslo <100;

Ušetrite čas spojením s SQL

Tento článok, dúfajme, pomôže ukázať vám silu relačných databáz, ako je MySQL, a ako ich zostavovať SQL dotazy ktoré načítajú záznamy z viacerých tabuliek v rámci jedného dotazu pomocou spojení, čo vám umožní získať presné požadované výsledky.

Naučili ste sa tri rôzne spojenia v rámci SQL, ako aliasovať názvy stĺpcov a tabuliek, používať viac spojov v jednom dotaze a prečo by ste sa mali vyhnúť poddotazom. Už nikdy sa nepokúšajte dokola sa pokúšať ručne zostaviť rôzne súbory údajov do jednej a začnite používať spojenia, aby ste zapôsobili na svojich kolegov z práce a ušetrili čas.

Email
10 elegantných spôsobov, ako vytvárať nádherné dokumenty Google

Služba Dokumenty Google je teraz kancelárskou budovou. Pomocou týchto doplnkov môžete dosiahnuť, aby vaše Dokumenty Google vyzerali pekne a štýlovo.

Súvisiace témy
  • Programovanie
  • SQL
  • databázy
O autorovi
Matt Dizak (13 publikovaných článkov)Viac od Matta Dizaka

Prihlásiť sa ku odberu noviniek

Pripojte sa k nášmu bulletinu s technickými tipmi, recenziami, bezplatnými elektronickými knihami a exkluzívnymi ponukami!

Ešte jeden krok…!

V e-maile, ktorý sme vám práve poslali, potvrďte svoju e-mailovú adresu.

.