Vienas didžiausių reliacinių duomenų bazių, tokių kaip MySQL, naudojimo pranašumų yra tas, kad jos reliacinė struktūra leidžia lengvai saugoti informaciją ir pateikti užklausą keliose lentelėse.
Panagrinėkime, kaip tiksliai gauti norimus duomenis iš kelių duomenų bazių lentelių ir įvairių galimų sujungimų, kurie leidžia jums gauti tikslius norimus rezultatus.
Inicializuokite pavyzdinę duomenų bazę
Tai nereikalinga, bet jei norite sekti kartu su šio straipsnio pavyzdžiais, galite inicializuoti duomenų bazės pavyzdį vietoje naudodami toliau pateiktas terminalo komandas:
git klonas https://github.com/mdizak/sample-select-db.git
cd sample-select-db
sudo mysql sudo mysql sampledb
mysql> SELECT COUNT (*) IŠ klientų;
Turėtumėte gauti rezultatą, nurodantį, kad programoje yra 2000 eilučių klientų stalo.
Numatytasis / INNER Join
Numatytasis sujungimas, naudojamas „MySQL“ duomenų bazės yra vadinamas INNER prisijungti ir yra labiausiai paplitęs ir tiesus. Šis prisijungimas grąžina visus įrašus, kurių abiejose lentelėse yra atitinkančių įrašų, ir atmeta visus kitus įrašus.
„Java“ teikia JDBC kaip „Java SDK“ dalį. Šiame straipsnyje pažvelkime į prisijungimo prie „MySQL“ duomenų bazės ir su ja susijusių užklausų detales.
Pvz., Jei norite pamatyti kliento vardus ir pavardes, taip pat visų didesnių nei 1000 USD užsakymų sumą ir datą, galite naudoti šį SQL sakinį:
PASIRINKTI
c.id, c.first_name, c.last_name, o.mount, o.created_at
NUO
klientai c, užsakymai o
KUR
o.kliento_id = c.id IR o.suma> = 1000;
Keletas pastabų dėl pirmiau pateiktos užklausos:
- Pasirenkami penki skirtingi stulpeliai, trys iš klientų lentelės ir du iš užsakymų lentelės.
- Sąlygoje FROM abi lentelės yra apibrėžtos, tačiau pridedamos raidėmis „c“ ir „o“. Tai paprasčiausiai nurodo pseudonimus SQL, gali būti viskas, ko norite, ir naudojami norint sutrumpinti SQL užklausą.
- o.customer_id = c.id yra užklausos prisijungimo aspektas ir užtikrina tinkamą klientų ir užsakymų sąsają.
Toliau pateikiamas kitoks ir techniškai sintaksiniu požiūriu teisingesnis būdas parašyti tą pačią užklausą:
PASIRINKTI
c.id, c.first_name, c.last_name, o.mount, o.created_at
NUO
klientai c INNER JOIN užsakymai o
ĮJUNGTA
kliento_id = c.id
KUR
o.suma> = 1000;
Pirmiau pateiktą užklausą paprastai yra šiek tiek lengviau perskaityti, nes galite lengvai pamatyti klientų ir užsakymų lentelės sujungimą. Vis dėlto šie du klausimai yra vienodi ir pateiks tuos pačius įrašus.
Kairysis prisijungia
Kairysis prisijungimas grąžins visus kairiosios lentelės įrašus, kurie taip pat sutampa su įrašais iš dešinės lentelės, ir visus kitus įrašus atmes. Pvz., Galbūt norite peržiūrėti bendrą kiekvieno produkto pardavimą duomenų bazėje, galite pabandyti naudoti tokią užklausą kaip:
PASIRINKTI
p. vardas, suma (elemento suma) AS tamount
NUO
order_items item LEFT JOIN produktai p
ĮJUNGTA
item.product_id = p.id
GRUPĖ PAGAL item.product_id UŽSAKYTI PAGAL tamountą DESC
Dėl to gaunamas gražus dviejų stulpelių vaizdas, kuriame rodomas produkto pavadinimas su visa pardavimo suma ir jis veikia taip, kaip tikėtasi. Užklausa apėmė visus produktus užsakymų_ elementų lentelėje, sujungė juos su produktų lentelės įrašais ir grąžino bendrą kiekvieno iš jų pardavimo sumą.
TEISĖ prisijungia
Naudodamiesi aukščiau pateiktu pavyzdžiu, atkreipkite dėmesį į tai, kad pirmiau pateikta užklausa pateikė tik 19 įrašų, o duomenų bazėje yra 22 produktai. Taip yra todėl, kad užklausa prasidėjo lentele užsakymai_ elementai ir kairėje prisijungė prie produktų lentelės ir kadangi kai kurie produktai niekada nebuvo užsakyti, užsakymų_ elementuose nėra tų produktų įrašų stalo.
Kas atsitiks, jei norite gauti visų produktų sąrašą su pardavimo sumomis, įskaitant produktus, kurie nebuvo užsakyti? Išbandykite dešinįjį prisijungimą naudodami šią užklausą:
PASIRINKTI
p. vardas, suma (elemento suma) AS tamount
NUO
order_items item RIGHT JOIN produktai p
ĮJUNGTA
item.product_id = p.id
GRUPĖ PAG. ID UŽSAKYTI PAGAL tamountą DESC
Tai geriau, ir dabar užklausa pateikia visus 22 produktus, iš kurių trys turi sumą niekinis. Taip yra todėl, kad užuot naudoję užsakymų_ elementus kaip pagrindinę lentelę, kuri jungiasi prie produktų lentelės, dešinioji jungtis apverčia užsakymą ir sujungia produktų lentelę su užsakymų_ elementų lentele.
Keli prisijungimai prie užklausos
Kartais jums reikia sujungti tris ar daugiau lentelių, kad gautumėte konkretų rezultatų rinkinį.
Pavyzdžiui, galbūt norite visų mikrobangų krosnelę (produkto ID Nr. 1) įsigijusių klientų sąrašo, nurodydami jų vardus ir užsakymo datas. Tam reikia trijų lentelių SELECT, kurią galima padaryti naudojant du sujungimus su šia užklausa:
PASIRINKTI
c.vardas, c.pavarde, o.suma, o.created_at
NUO
klientai c INNER JOIN užsakymai o
ĮJUNGTA
c.id = o.customer_id INNER JOIN užsakymų elementų elementas
ĮJUNGTA
item.order_id = o.id
KUR
item.product_id = 1 UŽSAKYTI BY o.created_at;
Ši užklausa pateikia visus 426 mikrobangų užsakymus ir veikia taip, kaip tikėtasi. Pirmiausia jis suderina visus klientus su jų atitinkamais užsakymais, tada pateikia kitas užklausas, kurias nustato visus užsakymus suderinti tik su užsakymų_ elementų lentelėje esančiais užsakymais, kuriuose yra mikrobangų krosnelės produktas (ID # 1).
Niekada nenaudokite antrinių užklausų su IN sąlygomis
Kaip greitą apžvalgą, bet kokia kaina turėtumėte vengti naudoti antrines užklausas tokiose SQL užklausose kaip:
PASIRINKITE vardą, pavardę iš klientų WHERE id IN (PASIRINKITE kliento ID iš užsakymų WHERE status = 'patvirtinta' IR suma <100);
Užklausos, tokios kaip aukščiau, yra labai neefektyvios, jose naudojama daugybė išteklių ir jų reikėtų kiek įmanoma vengti. Vietoj to naudokite tinkamas jungtis, kaip aprašyta ankstesniuose skyriuose. Pavyzdžiui, aukščiau pateikta užklausa turėtų būti perrašyta taip:
PASIRINKTI c.first_name, c.last_name IŠ klientų c KAIRIUJI PRISIJUNGTI užsakymus o ON o.customer_id = c.id WHERE o.status = 'patvirtinta' IR o.suma <100;
Sutaupykite laiko prisijungdami prie SQL
Tikimės, kad šis straipsnis padės parodyti reliacinių duomenų bazių, tokių kaip „MySQL“, galią ir kaip kurti SQL užklausos kurie nuskaito įrašus iš kelių lentelių vienoje užklausoje naudodami sujungimus, leidžiančius gauti tikslius norimus rezultatus.
Jūs išmokote tris skirtingus prisijungimus SQL sistemoje, kaip pakeisti stulpelių ir lentelių pavadinimus, naudoti kelis sujungimus vienoje užklausoje ir kodėl turėtumėte vengti antrinių užklausų. Niekada daugiau nesikratykite bandydami rankiniu būdu surinkti skirtingus duomenų rinkinius į vieną ir pradėkite naudoti sujungimus, kad sužavėtumėte savo kolegas ir sutaupytumėte laiko.
„Google“ dokumentai dabar yra biurų galiūnas. Šių priedų pagalba galite padaryti „Google“ dokumentus gražius ir stilingus.
- Programavimas
- SQL
- duomenų bazė
Prenumeruokite mūsų naujienlaiškį
Prisijunkite prie mūsų naujienlaiškio, kuriame rasite techninių patarimų, apžvalgų, nemokamų el. Knygų ir išskirtinių pasiūlymų!
Dar vienas žingsnis…!
Prašome patvirtinti savo el. Pašto adresą el. Laiške, kurį jums ką tik išsiuntėme.