Relatsioonandmebaaside, nagu MySQL, kasutamise üks suurimaid eeliseid on see, et selle relatsioonistruktuur võimaldab teil teavet hõlpsalt salvestada ja päringuid esitada mitmes tabelis.

Uurime, kuidas hankida täpselt soovitud andmed mitmest andmebaasitabelist ja mitmesugustest saadaolevatest ühendustest, mis võimaldavad teil hankida täpselt soovitud tulemused.

Initsialiseeri näidisandmebaas

See pole vajalik, kuid kui soovite järgida selles artiklis toodud näiteid, võite initsialiseerida näidisandmebaasi järgmiste terminali käskudega:

git kloon https://github.com/mdizak/sample-select-db.git
cd sample-select-db
sudo mysql sudo mysql proov
mysql> SELECT COUNT (*) klientidelt;

Peaksite saama tulemuse, milles on märgitud 2000 rida klientidele tabel.

Vaikimisi / INNER Join

Selles kasutatav vaikeliit MySQL andmebaasid nimetatakse INNER liitumiseks ja see on kõige tavalisem ja sirgjoonelisem. See liitumine tagastab kõik kirjed, mille mõlemas tabelis on vastavad kirjed, ja tühistab kõik muud kirjed.

Kuidas ühendada Java-ga MySQL-i andmebaasiga

Java pakub JDBC-d Java SDK osana. Selles artiklis vaatame üksikasju MySQL-i andmebaasiga ühenduse loomise ja sellega päringute esitamise kohta.

Näiteks kui soovite näha kliendi ees- ja perekonnanimesid, lisaks kõigi tellimuste summat ja kuupäeva üle 1000 dollari, võite kasutada järgmist SQL-i lauset:


VALI
c.id, c.first_name, c.last_name, o.amount, o.created_at
PÄRAST
kliendid c, tellimused o
KUS
o.kliendi_id = c.id JA o.summa> = 1000;

Mõned märkused ülaltoodud päringu kohta:

  • Valimisel on viis erinevat veergu, kolm klientide tabelist ja kaks tellimuste tabelist.
  • FROM-lause sees on kaks tabelit määratletud, kuid neile on lisatud tähed "c" ja "o". Need lihtsalt määravad SQL-is varjunimed, võivad olla kõik, mida soovite, ja neid kasutatakse SQL-i päringu lühendamiseks.
  • The o.kliendi_id = c.id on päringu liitumisaspekt ja tagab klientide ja tellimuste vahelise korrelatsiooni.

Allpool on teine ​​ja tehniliselt süntaktiliselt korrektsem viis sama päringu kirjutamiseks:


VALI
c.id, c.first_name, c.last_name, o.amount, o.created_at
PÄRAST
kliendid c INNER JOIN tellimusi o
PEAL
klient_id = c.id
KUS
o.summa> = 1000;

Ülaltoodud päringut on veidi lihtsam lugeda, kuna näete hõlpsalt klientide ja tellimuste tabeli ühendamist. Kõigi kavatsuste korral on need kaks päringut samad ja annavad täpselt samad kirjed.

VASAK liitub

Vasakpoolsed liitumised tagastavad vasakult tabelilt kõik kirjed, mis ühtivad ka parempoolse tabeli kirjetega, ja tühistavad kõik muud kirjed. Näiteks võib-olla soovite vaadata andmebaasi iga toote müügi kogusummat, proovige kasutada järgmist päringut:


VALI
p.nimi, summa (kirje.summa) AS tamount
PÄRAST
order_items item LEFT JOIN tooted lk
PEAL
item.product_id = p.id
GROUP GROUP item.product_id TELLI tamount DESC järgi

Selle tulemuseks on kena kahe veeru vaade, mis näitab toote nime koos kogu müügisummaga ja töötab ootuspäraselt. Päring käis läbi kõik tabeli order_items tooted, liitis need toodete tabeli kirjetega ja tagastas iga toote müügisumma.

PAREM liitub

Kasutades ülaltoodud näidet, pange tähele, et ülaltoodud päring tagastas ainult 19 kirjet, samas kui andmebaasis on kokku 22 toodet. Selle põhjuseks on see, et päring algas tabeliga tellimused_üksused ja vasakul liitus see toodete tabeliga ja kuna mõnda toodet pole kunagi tellitud, pole tellimuste_üksustes nende toodete kohta ühtegi kirjet tabel.

Mis juhtub, kui soovite saada nimekirja kõigist toodetest koos müügisummadega, sealhulgas tellimata toodetest? Proovige parempoolset liitumist järgmise päringuga:


VALI
p.nimi, summa (kirje.summa) AS tamount
PÄRAST
order_items item RIGHT JOIN tooted lk
PEAL
item.product_id = p.id
GRUPP PID järgi TELLIMUS tamount DESC järgi

See on parem ja päring tagastab nüüd 22 toodet, millest kolmel on summa null. Selle põhjuseks on see, et selle asemel, et toodete tabeliga liituva peamise tabelina tellimuste_elemendid kasutada, pöörab parem liitumine tellimuse ümber ja ühendab toodete tabeli tellimuste_elemendid-tabeliga.

Päringus mitu liitumist

Mõnikord peate konkreetse tulemuste saamiseks ühendama kolm või enam tabelit.

Näiteks soovite ehk nimekirja kõigist mikrolaineahju (toote ID nr 1) ostnud klientidest, sealhulgas nende nime ja tellimiskuupäeva. Selleks on vaja kolme tabeli valikut SELECT, mida saab teha kahe ühendamise abil järgmise päringuga:


VALI
c.enimi, c.perekonnanimi, o.summa, o.loodud_at
PÄRAST
kliendid c INNER JOIN tellimusi o
PEAL
c.id = o.customer_id INNER JOIN üksuste üksused
PEAL
item.order_id = o.id
KUS
item.product_id = 1 TELLI o.created_at;

See päring tagastab mikrolaineahju kõik 426 tellimust ja töötab ootuspäraselt. Kõigepealt sobitatakse kõik kliendid nende vastavate tellimustega, seejärel lisatakse järgmised päringud, mille määrab kõigi tellimuste sobitamine ainult tabelis order_items olevate tellimustega, mis sisaldavad mikrolaineahju toodet (id 1).

Ärge kunagi kasutage IN-klauslitega alapäringuid

Kiire kõrvalhinnanguna peate alati iga hinna eest vältima alampäringute kasutamist oma SQL-päringutes, näiteks:

SELECT eesnimi, perekonnanimi klientidelt WHERE id IN (SELECT customer_id FROM tellimused WHERE status = 'kinnitatud' JA summa <100);

Ülaltoodud päringud on väga ebaefektiivsed, kasutavad palju ressursse ja neid tuleks võimalikult palju vältida. Selle asemel kasutage õigeid ühendusi, nagu on kirjeldatud ülaltoodud jaotistes. Näiteks tuleks ülaltoodud päring uuesti kirjutada järgmiselt:

VALI c.enime_nimi, c.perenimi klientidelt c VASAKU LIITU tellimusi o SEES o.kliendi_id = c.id KUS o.status = 'kinnitatud' JA o.summa <100;

Säästke aega SQL-i liitumiste abil

Loodetavasti aitab see artikkel näidata teile relatsiooniliste andmebaaside, nagu MySQL, võimet ja selle loomist SQL-päringud mis toovad kirjed mitme päringu kaudu ühe päringu kaudu liitumiste abil, mis võimaldab teil hankida täpsed soovitud tulemused.

Olete õppinud SQL-is kolm erinevat liitumist, kuidas veergude ja tabelite nimed pseudonüümidena kasutada, mitu ühendamist ühes päringus kasutada ja miks peaksite päringuid vältima. Ärge kunagi enam ringi rabelege, proovides erinevaid andmekogumeid käsitsi ühte kompileerida ja alustage liitmike kasutamist, et oma töökaaslastele muljet avaldada ja aega kokku hoida.

E-post
10 korralikku viisi ilusate Google'i dokumentide loomiseks

Google Docs on nüüd kontorivõim. Nende lisandmoodulite abil saate oma Google Docs'i ilusa ja stiilse väljanägemise muuta.

Seotud teemad
  • Programmeerimine
  • SQL
  • andmebaasi
Autori kohta
Matt Dizak (13 artiklit on avaldatud)Veel Matt Dizakilt

Telli meie uudiskiri

Liituge meie uudiskirjaga, et saada tehnilisi näpunäiteid, ülevaateid, tasuta e-raamatuid ja eksklusiivseid pakkumisi!

Veel üks samm !!!

Palun kinnitage oma e-posti aadress meilis, mille me just saatsime.

.