Jedna od najvećih blagodati korištenja relacijskih baza podataka kao što je MySQL je ta što njihova relacijska struktura omogućuje jednostavno pohranjivanje i traženje podataka u više tablica.

Istražimo kako točno dohvatiti podatke koje želite iz više tablica baze podataka i razne dostupne spojeve koji vam omogućuju da izvučete točne rezultate koje želite.

Inicijalizirajte uzorak baze podataka

To nije potrebno, ali ako želite slijediti primjere u ovom članku, možete lokalno inicijalizirati uzorak baze podataka donjim naredbama terminala:

git klon https://github.com/mdizak/sample-select-db.git
cd sample-select-db
sudo mysql sudo mysql sampledb
mysql> ODABERI BROJ (*) OD kupaca;

Trebali biste dobiti rezultat u kojem se navodi da ima 2000 redaka u kupci stol.

Zadano / INNER Join

Zadani spoj koji se koristi unutar MySQL baze podataka naziva se UNUTARNJE spajanje i najčešće je i ravno prema naprijed. Ovo pridruživanje vraća sve zapise za koje postoje podudarni zapisi u obje tablice i odbacuje sve ostale zapise.

Kako se povezati s MySQL bazom podataka pomoću Jave

Java pruža JDBC kao dio Java SDK-a. U ovom članku pogledajmo detalje povezivanja s MySQL bazom podataka i izvršavanja upita s njom.

Na primjer, ako želite vidjeti kupčeva imena i prezimena, plus iznos i datum narudžbe za sve narudžbe veće od 1000 USD, mogli biste upotrijebiti sljedeći SQL izraz:


IZABERI
c.id, c.first_name, c.last_name, o.omount, o.created_at
IZ
kupci c, narudžbe o
GDJE
o.customer_id = c.id I o.omount> = 1000;

Nekoliko napomena u vezi s gornjim upitom:

  • Odabire se pet različitih stupaca, tri iz tablice kupaca i dva iz tablice narudžbi.
  • Unutar klauzule FROM dvije su tablice definirane, ali sufiksirane slovima "c" i "o". Oni jednostavno navode pseudonime unutar SQL-a, mogu biti sve što poželite i koriste se za skraćivanje SQL upita.
  • The o.customer_id = c.id je aspekt pridruživanja upita i osigurava odgovarajuću korelaciju između kupaca i narudžbi.

U nastavku se nalazi drugačiji i tehnički ispravniji sintaksički način pisanja istog upita:


IZABERI
c.id, c.first_name, c.last_name, o.omount, o.created_at
IZ
kupci c UNUTARNJE PRIDRUŽIVANJE narudžbe o
NA
customer_id = c.id
GDJE
o.iznos> = 1000;

Gornji upit obično je malo lakši za čitanje jer lako možete vidjeti spajanje između tablice kupaca i narudžbi. Ipak, za sve namjere, ova su dva upita jednaka i proizvest će potpuno iste zapise.

LIJEVO se pridružuje

Lijevo spajanje vratit će sve zapise s lijeve tablice koji se također podudaraju sa zapisima iz desne tablice i odbaciti sve ostale zapise. Na primjer, možda želite pogledati ukupan iznos prodaje za svaki proizvod u bazi podataka, možete pokušati koristiti upit kao što je:


IZABERI
p.ime, zbroj (item.amount) KAO tamount
IZ
order_items stavka LIJEVO PRIDRUŽITE se proizvodi str
NA
item.product_id = p.id
GRUPIRAJ PO item.product_id NARUČI PO TOMANT DESC

To rezultira lijepim prikazom u dva stupca koji prikazuje naziv proizvoda s ukupnim iznosom prodaje i funkcionira prema očekivanjima. Upit je prošao sve proizvode unutar tablice narudžbi_postavki, pridružio ih zapisima unutar tablice proizvoda i vratio ukupan iznos prodaje svakog od njih.

DESNO se pridružuje

Koristeći gornji primjer, primijetite činjenicu da je gornji upit vratio samo 19 zapisa, dok je u bazi podataka ukupno 22 proizvoda. To je zato što je upit započeo tablicom orders_items i lijevo ga pridružio tablici products, i Budući da neki proizvodi nikada nisu naručeni, ne postoje zapisi o tim proizvodima unutar stavki narudžbi stol.

Što se događa ako želite dobiti popis svih proizvoda s iznosima prodaje, uključujući proizvode koji nisu naručeni? Isprobajte pravo pridruživanje sa sljedećim upitom:


IZABERI
p.ime, zbroj (item.amount) KAO tamount
IZ
order_items stavka RIGHT JOIN proizvodi str
NA
item.product_id = p.id
GRUPIRAJ PO str. ID NARUČI PO TOMANT DESC

To je bolje, a upit sada vraća puna 22 proizvoda, od kojih tri imaju količinu nula. To je zato što umjesto korištenja items_items kao primarne tablice koja se spaja s tablicom products, desno join preokreće narudžbu i spaja tablicu products s ​​tablicom order_items.

Višestruki pridruživanja u upitu

Ponekad trebate spojiti tri ili više tablica kako biste dobili određeni skup rezultata.

Na primjer, možda želite popis svih kupaca koji su kupili mikrovalnu pećnicu (ID proizvoda 1), uključujući njihovo ime i datum narudžbe. To zahtijeva SELECT kroz tri tablice, što se može učiniti pomoću dva spajanja sa sljedećim upitom:


IZABERI
c.first_name, c.last_name, o.omount, o.created_at
IZ
kupci c UNUTARNJE PRIDRUŽIVANJE narudžbe o
NA
c.id = o.customer_id UNUTARNJE PRIDRUŽIVANJE stavke_naredbe
NA
item.order_id = o.id
GDJE
item.product_id = 1 NARUČI po o.created_at;

Ovaj upit vraća svih 426 narudžbi mikrovalne pećnice i radi prema očekivanjima. Prvo podudara sve kupce s njihovim narudžbama, a zatim daljnje upite koje rezultat postavlja podudaranje svih narudžbi samo s onim unutar tablice order_items koje sadrže mikrovalni proizvod (id # 1).

Nikada ne koristite potupite s IN klauzulama

Kao brzi prilog, pod svaku cijenu uvijek biste trebali izbjegavati upotrebu podupita u okviru svojih SQL upita, kao što su:

ODABERITE ime, prezime FROM kupci WHERE id IN (ODABERITE customer_id IZ narudžbi WHERE status = 'odobreno' I iznos <100);

Upiti poput ovih vrlo su neučinkoviti, koriste velik broj resursa i treba ih izbjegavati što je više moguće. Umjesto toga, upotrijebite odgovarajuće spojeve kako je navedeno u gornjim odjeljcima. Na primjer, gornji upit treba prepisati kao:

ODABERITE c.first_name, c.last_name OD STRANE kupaca c LIJEVE PRIDRUŽITE naloge o UKLJUČENO o.customer_id = c.id GDJE o.status = 'odobreno' I o.iznos <100;

Uštedite vrijeme pomoću SQL pridruživanja

Nadamo se da će vam ovaj članak pomoći pokazati moć relacijskih baza podataka kao što je MySQL i kako ih graditi SQL upiti koji dohvaćaju zapise iz više tablica unutar jednog upita pomoću spajanja, omogućujući vam dohvaćanje točnih željenih rezultata.

Naučili ste tri različita spajanja unutar SQL-a, kako zamjenjivati ​​imena stupaca i tablica, koristiti višestruka spajanja u jednom upitu i zašto biste trebali izbjegavati podupitaje. Nikada se više ne brkajte pokušavajući ručno kompilirati različite skupove podataka u jedan i počnite koristiti udruživanje kako biste impresionirali svoje radne kolege i uštedjeli vrijeme.

E-mail
10 zgodnih načina za stvaranje lijepih Google dokumenata

Google Docs sada je uredska snaga. Uz pomoć ovih dodataka možete učiniti da vaši Google dokumenti izgledaju lijepo i stilski.

Povezane teme
  • Programiranje
  • SQL
  • baza podataka
O autoru
Matt Dizak (Objavljeno 13 članaka)Više od Matta Dizaka

Pretplatite se na naše obavijesti

Pridružite se našem biltenu za tehničke savjete, recenzije, besplatne e-knjige i ekskluzivne ponude!

Još jedan korak…!

Potvrdite svoju e-adresu u e-pošti koju smo vam upravo poslali.

.