Yksi relaatiotietokantojen, kuten MySQL: n, suurimmista eduista on, että sen relaatiorakenteen avulla voit helposti tallentaa ja kysellä tietoja useisiin taulukoihin.
Tutkitaan, miten voit hakea tarkalleen haluamasi tiedot useista tietokantataulukoista ja käytettävissä olevista erilaisista liitoksista, joiden avulla voit saada haluamasi tulokset.
Alusta näytetietokanta
Tätä ei vaadita, mutta jos haluat seurata tämän artikkelin esimerkkejä, voit alustaa näytetietokannan paikallisesti seuraavilla päätelaitteen komennoilla:
git-klooni https://github.com/mdizak/sample-select-db.git
cd sample-select-db
sudo mysql sudo mysql samplesb
mysql> SELECT COUNT (*) asiakkailta;
Sinun pitäisi saada tulos, jonka mukaan rivissä on 2000 riviä Asiakkaat pöytä.
Oletus / INNER Join
Sisällä käytetty oletusliitos MySQL-tietokannat kutsutaan INNER-liittymäksi, ja se on yleisin ja suoraan eteenpäin. Tämä liittyminen palauttaa kaikki tietueet, joiden molemmissa taulukoissa on vastaavia tietueita, ja hylkää kaikki muut tietueet.
Java tarjoaa JDBC: n osana Java SDK: ta. Tässä artikkelissa tarkastellaan yksityiskohtia yhteyden muodostamisesta MySQL-tietokantaan ja kyselyjen tekemisestä sen kanssa.
Esimerkiksi, jos haluat nähdä asiakkaan etu- ja sukunimet sekä tilausten määrän ja päivämäärän kaikille yli 1000 dollaria tilauksille, voit käyttää seuraavaa SQL-käskyä:
VALITSE
c.id, c.sukunimi, c.sukunimi, o.summa, o.created_at
Alkaen
asiakkaat c, tilaukset o
MISSÄ
o.asiakas_id = c.id JA o.määrä> = 1000;
Muutama huomautus yllä olevasta kyselystä:
- Viisi erilaista saraketta valitaan, kolme asiakastaulukosta ja kaksi tilaustaulukosta.
- FROM-lausekkeessa kaksi taulukkoa on määritelty, mutta niihin on liitetty kirjaimet "c" ja "o". Nämä yksinkertaisesti määrittävät aliakset SQL: ssä, voivat olla mitä tahansa haluamiasi, ja niitä käytetään lyhentämään SQL-kyselyä.
- o.asiakas_id = c.id on kyselyn liittymisaspekti ja varmistaa oikean korrelaation asiakkaiden ja tilausten välillä.
Alla on erilainen ja teknisesti syntaktisesti oikea tapa kirjoittaa sama kysely:
VALITSE
c.id, c.sukunimi, c.sukunimi, o.summa, o.created_at
Alkaen
asiakkaita c INNER JOIN -tilauksia o
PÄÄLLÄ
asiakas_id = c.id
MISSÄ
o. määrä> = 1000;
Yllä oleva kysely on yleensä hieman helpompi lukea, koska näet helposti asiakkaiden ja tilausten taulukon yhdistämisen. Kaikista syistä nämä kaksi kyselyä ovat kuitenkin samat ja tuottavat täsmälleen samat tietueet.
VASEN Liittyy
Vasen liittyminen palauttaa kaikki vasemman taulukon tietueet, jotka vastaavat myös oikean taulukon tietueita, ja hylkää kaikki muut tietueet. Esimerkiksi, jos haluat esimerkiksi tarkastella tietokannan jokaisen tuotteen kokonaismyyntiä, voit kokeilla esimerkiksi seuraavaa kyselyä:
VALITSE
p.name, summa (item.amount) AS-määränä
Alkaen
tilaukset_tuotteet LEFT JOIN -tuotteet s
PÄÄLLÄ
item.product_id = p.id
RYHMITTÄY tuote.tuotetunnus TILAA MÄÄRÄN MÄÄRÄ DESC
Tuloksena on mukava kahden sarakkeen näkymä, joka näyttää tuotteen nimen ja kokonaismyynnin ja toimii odotetusti. Kysely kävi läpi kaikki tuotteet tilaukset_tuotteet -taulukossa, liittänyt ne tuotetaulukon tietueisiin ja palautti kunkin myynnin kokonaissumman.
OIKEA Liittyy
Käyttämällä yllä olevaa esimerkkiä, ota huomioon, että yllä oleva kysely palautti vain 19 tietuetta, kun tietokannassa on yhteensä 22 tuotetta. Tämä johtuu siitä, että kysely alkoi tilaukset_tuotteet-taulukosta ja vasemmalle liittyi siihen tuotetaulukkoon ja koska joitain tuotteita ei ole koskaan tilattu, tilauksista ei ole tietoja näistä tuotteista pöytä.
Mitä tapahtuu, jos haluat saada luettelon kaikista tuotteista, joissa on myyntimäärät, mukaan lukien tuotteet, joita ei ole tilattu? Kokeile oikeaa liittymistä seuraavalla kyselyllä:
VALITSE
p.name, summa (item.amount) AS-määränä
Alkaen
tilaukset_tuotteet RIGHT JOIN -tuotteet s
PÄÄLLÄ
item.product_id = p.id
RYHMÄ SIVUIDEN JÄLKEEN TILAUS Tamount DESC
Se on parempi, ja kysely palauttaa nyt kaikki 22 tuotetta, joista kolmella on määrä tyhjä. Tämä johtuu siitä, että sen sijaan, että tilaukset_tuotteita käytettäisiin ensisijaisena taulukkona, joka liittyy tuotetaulukkoon, oikea liitos kääntää tilauksen ja liittää tuotetaulukon tilaukset_tuotteet-taulukkoon.
Useita liittymiä kyselyyn
Joskus sinun on liitettävä kolme tai useampia taulukoita yhteen saadaksesi tietyn joukon tuloksia.
Ehkä haluat esimerkiksi luettelon kaikista asiakkaista, jotka ovat ostaneet mikroaaltouunin (tuotetunnus 1), mukaan lukien heidän nimensä ja tilauspäivänsä. Tämä vaatii SELECTin kolmen taulukon yli, mikä voidaan tehdä käyttämällä kahta liitosta seuraavan kyselyn kanssa:
VALITSE
c.nimi, c.sukunimi, o.määrä, o.luonut_at
Alkaen
asiakkaita c INNER JOIN -tilauksia o
PÄÄLLÄ
c.id = o.customer_id INNER JOIN tilaukset_tuote -kohde
PÄÄLLÄ
item.order_id = o.id
MISSÄ
item.product_id = 1 TILAA MÄÄRÄ o.created_at;
Tämä kysely palauttaa kaikki 426 mikroaaltotilausta ja toimii odotetulla tavalla. Se sovittaa ensin kaikki asiakkaat heidän tilauksiinsa, sitten lisää kyselyjä, jotka on asettanut sovitetaan kaikki tilaukset vain tilausten_taulukossa oleviin tilauksiin, jotka sisältävät mikroaaltotuotteen (id # 1).
Älä koskaan käytä alakyselyjä IN-lausekkeiden kanssa
Pikalinkkinä sinun tulee aina välttää alihakemusten käyttöä SQL-kyselyissäsi, kuten:
VALITSE etunimi, sukunimi asiakkailta WHERE id IN (VALITA asiakastunnus tilauksista WHERE status = 'hyväksytty' JA summa <100);
Edellä mainitut kyselyt ovat hyvin tehotonta, käyttävät paljon resursseja, ja niitä tulisi välttää mahdollisimman paljon. Käytä sen sijaan oikeita liitoksia yllä olevien osien mukaisesti. Esimerkiksi yllä oleva kysely tulisi kirjoittaa uudelleen seuraavasti:
VALITSE c.nimi, c.sukunimi asiakkailta c VASEN LIITÄ tilaukset o ON o.asiakas_tunnus = c.id WHERE o.status = 'hyväksytty' JA o.summa <100;
Säästä aikaa SQL-liittymillä
Tämä artikkeli on toivottavasti auttanut näyttämään relaatiotietokantojen, kuten MySQL: n, voiman ja rakentamisen SQL-kyselyt jotka noutavat tietueita useista taulukoista yhdellä kyselyllä liitosten avulla, jolloin voit noutaa tarkat halutut tulokset.
Olet oppinut kolme erilaista liitosta SQL: ssä, miten sarakkeiden ja taulukoiden nimien aliaksia käytetään, useita liitoksia käytetään yhdessä kyselyssä ja miksi sinun tulisi välttää alakyselyjä. Älä koskaan ryntäsi uudelleen yrittäessäsi koota eri tietojoukot manuaalisesti yhdeksi ja aloita liittymien avulla vaikutusta työtovereihisi ja säästää aikaa.
Google Docs on nyt toimistovoimamies. Näiden lisäosien avulla voit tehdä Google-dokumenteistasi kauniin ja tyylikkään.
- Ohjelmointi
- SQL
- tietokanta
Tilaa uutiskirjeemme
Liity uutiskirjeeseemme, jossa on teknisiä vinkkejä, arvosteluja, ilmaisia e-kirjoja ja erikoistarjouksia!
Vielä yksi askel !!!
Vahvista sähköpostiosoitteesi juuri lähettämässäsi sähköpostiviestissä.