Ena največjih prednosti uporabe relacijskih baz podatkov, kot je MySQL, je ta, da njegova relacijska struktura omogoča enostavno shranjevanje in iskanje informacij v več tabelah.
Raziščimo, kako natančno pridobiti želene podatke iz več tabel zbirke podatkov in različne združitve, ki so na voljo, ki vam omogočajo, da potegnete natančno želene rezultate.
Inicializirajte vzorčno zbirko podatkov
To ni potrebno, če pa želite slediti primerom v tem članku, lahko vzorčno bazo podatkov lokalno inicializirate s spodnjimi ukazi terminala:
klon git https://github.com/mdizak/sample-select-db.git
cd sample-select-db
sudo mysql sudo mysql sampledb
mysql> IZBERI ŠTEVILO (*) OD kupcev;
Morali bi dobiti rezultat, ki navaja, da je v vrstici 2000 vrstic stranke tabela.
Privzeto / INNER Pridružite se
Privzeto združitev, uporabljena znotraj Podatkovne baze MySQL se imenuje INNER join in je najpogostejši in naravnost naprej. To združevanje vrne vse zapise, za katere obstajajo ujemajoči se zapisi v obeh tabelah, in zavrže vse druge zapise.
Java ponuja JDBC kot del Java SDK. V tem članku si oglejmo podrobnosti povezovanja z bazo podatkov MySQL in izvajanja poizvedb z njo.
Če želite na primer videti imena in priimke stranke ter plus znesek in datum naročila za vsa naročila, večja od 1000 USD, lahko uporabite naslednji stavek SQL:
IZBERI
c.id, c.first_name, c.last_name, o.omount, o.created_at
OD
stranke c, naročila o
KJE
o.customer_id = c.id IN o.znesek> = 1000;
Nekaj opomb v zvezi z zgornjo poizvedbo:
- Izbere se pet različnih stolpcev, tri iz tabele strank in dva iz tabele naročil.
- Znotraj klavzule FROM sta obe tabeli opredeljeni, vendar s pripono s črkama "c" in "o". Ti preprosto določajo vzdevke znotraj SQL, lahko so karkoli želite in se uporabljajo za skrajšanje poizvedbe SQL.
- The o.customer_id = c.id je vidik združevanja poizvedbe in zagotavlja pravilno korelacijo med kupci in naročili.
Spodaj je drugačen in tehnično bolj skladen način pisanja iste poizvedbe:
IZBERI
c.id, c.first_name, c.last_name, o.omount, o.created_at
OD
stranke c INNER JOIN naročila o
VKLOPLJENO
customer_id = c.id
KJE
o.znesek> = 1000;
Zgornjo poizvedbo je nekoliko lažje prebrati, saj lahko zlahka vidite povezavo med tabelo strank in naročil. Za vse namene pa sta ti dve poizvedbi enaki in bosta ustvarili popolnoma enake zapise.
LEVO se pridruži
Leva združevanja bodo vrnila vse zapise iz leve tabele, ki se prav tako ujemajo z zapisi iz desne tabele, in opuščala vse druge zapise. Na primer, če si želite na primer ogledati skupni znesek prodaje za vsak izdelek v zbirki podatkov, lahko poskusite uporabiti poizvedbo, kot je:
IZBERI
p.ime, vsota (item.amount) KOT tamount
OD
naročila_postavke artikel LEFT JOIN izdelki str
VKLOPLJENO
item.product_id = p.id
RAZVRŠČI PO item.product_id NAROČI PO TOMANT DESC
Rezultat je lep pogled v dveh stolpcih, ki prikazuje ime izdelka s skupnim zneskom prodaje in deluje po pričakovanjih. Poizvedba je šla skozi vse izdelke v tabeli naročila_številke, jih združila v zapise v tabeli izdelkov in vrnila skupni znesek prodaje vsakega.
PRAVO Pridruži se
Na zgornjem primeru upoštevajte dejstvo, da je zgornja poizvedba vrnila samo 19 zapisov, medtem ko je v zbirki podatkov skupno 22 izdelkov. To je zato, ker se je poizvedba začela s tabelo orders_items in jo levo pridružila tabeli products, in ker nekateri izdelki niso bili nikoli naročeni, znotraj postavk_naročil ni zapisov o teh izdelkih tabela.
Kaj se zgodi, če želite dobiti seznam vseh izdelkov z zneski prodaje, vključno z izdelki, ki niso bili naročeni? Poskusite pravilno pridružiti z naslednjo poizvedbo:
IZBERI
p.ime, vsota (item.amount) KOT tamount
OD
naročila_postavke artikel RIGHT JOIN izdelki str
VKLOPLJENO
item.product_id = p.id
GROUP BY p.id NAROČI PO TOMANT DESC
To je bolje in poizvedba zdaj vrne celotnih 22 izdelkov, od katerih imajo tri količino nič. To je zato, ker namesto da order_items uporabimo kot primarno tabelo, ki se pridruži tabeli products, desni join preklopi vrstni red in tabelo products pridruži tabeli order_items.
Več združitev v poizvedbi
Včasih morate združiti tri ali več tabel, da dobite določen nabor rezultatov.
Na primer, morda želite seznam vseh strank, ki so kupile mikrovalovno pečico (ID izdelka 1), vključno z njihovim imenom in datumom naročila. To zahteva SELECT v treh tabelah, ki ga je mogoče narediti z uporabo dveh združitev z naslednjo poizvedbo:
IZBERI
c.first_name, c.last_name, o.omount, o.created_at
OD
stranke c INNER JOIN naročila o
VKLOPLJENO
c.id = o.customer_id INNER JOIN order_items item
VKLOPLJENO
item.order_id = o.id
KJE
item.product_id = 1 NAROČI po o.created_at;
Ta poizvedba vrne vseh 426 naročil mikrovalovne pečice in deluje po pričakovanjih. Najprej vse stranke ujema z njihovimi naročili, nato pa nadaljnje poizvedbe, ki jih nastavi ujemanje vseh naročil samo s tistimi v tabeli order_items, ki vsebujejo mikrovalovni izdelek (id # 1).
Nikoli ne uporabljajte podpoizvedb s klavzulami IN
Kot hiter začetek se za vsako ceno vedno izogibajte uporabi podpoizvedb z vašimi poizvedbami SQL, kot so:
IZBERI ime, priimek FROM kupcev WHERE id IN (SELECT customer_id FROM naročil WHERE status = 'odobren' IN znesek <100);
Poizvedbe, kot so zgoraj, so zelo neučinkovite, uporabljajo veliko število virov in se jim je treba čim bolj izogibati. Namesto tega uporabite ustrezne spoje, kot je opisano v zgornjih oddelkih. Na primer, zgornjo poizvedbo je treba prepisati kot:
IZBERI c.first_name, c.last_name FROM kupcev c LEVO PRIDRUŽI naročila o ON o.customer_id = c.id KJE o.status = 'odobren' IN o.znesek <100;
Prihranite čas s pridružitvami SQL
Upajmo, da vam bo ta članek pokazal moč relacijskih baz podatkov, kot je MySQL, in kako zgraditi Poizvedbe SQL ki pridobivajo zapise iz več tabel znotraj ene poizvedbe s pomočjo združevanja, kar vam omogoča, da pridobite natančno želene rezultate.
V SQL ste se naučili treh različnih združitev, kako vzdevek imen stolpcev in tabel, več združitev v eni poizvedbi in zakaj bi se morali izogibati podpoizvedbam. Nikoli več se ne premetavajte, poskušajte ročno zbrati različne nabore podatkov v enega in začnite uporabljati združitve, da boste navdušili svoje delovne kolege in prihranili čas.
Google Dokumenti so zdaj pisarna. S pomočjo teh dodatkov lahko poskrbite, da bodo vaši Google Dokumenti videti lepo in elegantno.
- Programiranje
- SQL
- zbirka podatkov
Naročite se na naše novice
Pridružite se našemu glasilu za tehnične nasvete, preglede, brezplačne e-knjige in ekskluzivne ponudbe!
Še en korak…!
Potrdite svoj e-poštni naslov v e-poštnem sporočilu, ki smo vam ga pravkar poslali.