MySQL Liitos: Sisempi, Ulompi, Vasen, Oikea, Ristikkäinen

⚡ Älykäs yhteenveto

MySQL LIITOKSET yhdistävät kahden tai useamman toisiinsa liittyvän taulukon rivit yhdeksi tulosjoukoksi. Tämä resurssi selittää CROSS-, INNER-, LEFT-, RIGHT- ja OUTER-LIITOKSET suoritettavien kyselyiden, esimerkkitietojen ja selkeiden tulostaulukoiden avulla käytännön tietokantatyöskentelyä varten.

  • 🔗 Keskeinen periaate: JOIN-operaattori yhdistää rivit taulukoiden välillä käyttämällä ensisijaisen avaimen ja viiteavaimen suhteita.
  • Miksi sillä on merkitystä: Yksi JOIN-kysely käyttää indeksointia ja vähentää palvelimen edestakaisia ​​matkoja useisiin erillisiin kyselyihin verrattuna.
  • ✖️ Ristiliittymisen käyttäytyminen: Ensimmäisen taulukon jokainen rivi parittuu toisen taulukon jokaisen rivin kanssa, jolloin saadaan karteesinen tulo.
  • 🎯 Sisäisen LIITTYMISEN käyttäytyminen: Palautetaan vain rivit, jotka täyttävät molempien taulukoiden vastaavuusehdot.
  • ↔️ Ulkoisen LIITTYMISEN käyttäytyminen: LEFT ja RIGHT JOIN palauttavat myös täsmäämättömät rivit ja täyttävät puuttuvat sarakkeet NULL-arvolla.
  • 🧩 PÄÄLLÄ vs. KÄYTÖSSÄ: USING edellyttää identtisiä sarakenimiä, kun taas ON tukee mitä tahansa vastaavaa lauseketta.

MySQL LÄHTEE

Mitä JOINS ovat?

Liitokset auttavat hakemaan tietoja kahdesta tai useammasta tietokantataulukosta.

Taulukot liittyvät toisiinsa ensisijaisilla ja vierailla avaimilla.

Huomautus: JOIN on SQL-oppilaiden keskuudessa väärinymmärretty aihe. Yksinkertaisuuden ja ymmärryksen helpottamiseksi käytämme harjoitusesimerkkinä uutta tietokantaa. Kuten alla on esitetty.

Jokaisessa alla olevassa esimerkissä käytetään näitä kahta taulukkoa. elokuvan_tunnus sarake sisään jäseniä viittaa siihen id sarake sisään Elokuvat — suhde, johon kukin JOIN-operaatio vastaa.

jäseniä

id etunimi sukunimi elokuvan_tunnus
1 Aatami Seppä 1
2 Ravi Kumar 2
3 Susan Davidson 5
4 Jenny Adrianna 8
5 Lee Lemu 10

Elokuvat

id otsikko luokka
1 ASSASSIN'S CREED: EMBERS Animaatiot
2 Real Steel (2012) Animaatiot
3 Alvin ja pikkuoravat Animaatiot
4 Tin Tinin seikkailut Animaatiot
5 Turvallinen (2012) Toiminta
6 Turvallinen talo (2012) Toiminta
7 GIA 18+
8 Määräaika 2009 18+
9 Likainen kuva 18+
10 Marley ja minä romanssi

Miksi meidän pitäisi käyttää JOIN-menetelmiä?

Ennen kuin tarkastellaan kutakin JOIN-tyyppiä, on syytä tietää, miksi JOIN-tyyppiä suositaan useiden kyselyiden suorittamiseen verrattuna.

Nyt saatat miettiä, miksi käytämme JOINeja, kun voimme tehdä saman tehtävän suorittamalla kyselyitä. Varsinkin jos sinulla on kokemusta tietokantaohjelmoinnista, tiedät, että voimme suorittaa kyselyitä yksitellen, käytä kunkin tulostetta peräkkäisissä kyselyissä. Tietysti se on mahdollista. Mutta käyttämällä JOIN-koodeja, voit tehdä työn käyttämällä vain yhtä kyselyä millä tahansa hakuparametreilla. Toisaalta MySQL voi saavuttaa parempaa suorituskykyä JOIN:illa, koska se voi käyttää indeksointia. Yksinkertaisesti yhden JOIN-kyselyn käyttö useiden kyselyjen suorittamisen sijaan vähentää palvelimen ylimääräisiä kustannuksia. Useiden kyselyjen käyttäminen sen sijaan johtaa enemmän tiedonsiirtoon välillä MySQL ja sovellukset (ohjelmistot). Lisäksi se vaatii enemmän tietojen käsittelyä myös sovelluksen lopussa.

On selvää, että voimme saavuttaa paremmin MySQL ja sovellusten suorituskyky JOIN:ien avulla.

LIITOSTEN tyypit

MySQL tukee useita JOIN-tyyppejä, joista jokainen vastaa eri kysymykseen samoista kahdesta taulukosta. Alla oleva taulukko vertailee niitä; kutakin tyyppiä esitellään sitten kyselyn ja sen tulosteen avulla.

LIITTYMISEN tyyppi Palautetut rivit Tuloksessa NULL-arvoja? Tyypillinen käyttö
Ristiliittymä Jokainen taulukon A rivi on yhdistetty jokaisen taulukon B rivin kanssa Ei Kaikkien mahdollisten yhdistelmien luominen
INNER JOIN Vain rivit, jotka vastaavat ehtoa molemmissa taulukoissa Ei Jäsenet, jotka todella vuokrasivat elokuvan
LEFT LIITY Kaikki vasemman taulukon rivit sekä oikean taulukon osumat Kyllä, oikealla puolella Kaikki elokuvat, myös ne, joita ei ole koskaan vuokrattu
OIKEA LIITTYMINEN Kaikki oikean taulukon rivit sekä osumat vasemmalta Kyllä, vasemmalla puolella Kaikki elokuvat, jopa ilman jäseniä

Ristiliittymä

Cross JOIN on yksinkertaisin JOIN-muoto, joka yhdistää tietokantataulukon jokaisen rivin toisen tietokantataulukon kaikkiin riveihin.

Toisin sanoen se antaa meille yhdistelmät ensimmäisen taulukon jokaisesta rivistä kaikkien toisen taulukon tietueiden kanssa.

Oletetaan, että haluamme saada kaikki jäsentietueet kaikkia elokuvatietueita vastaan, voimme käyttää alla näkyvää käsikirjoitusta saadaksemme halutut tulokset.

Liitostyypit

SELECT * FROM `movies` CROSS JOIN `members`

Suoritetaan yllä oleva komentosarja MySQL työpöytä antaa meille seuraavat tulokset.

id title id first_name last_name movie_id
1 ASSASSIN'S CREED: EMBERS Animations 1 Adam Smith 1
1 ASSASSIN'S CREED: EMBERS Animations 2 Ravi Kumar 2
1 ASSASSIN'S CREED: EMBERS Animations 3 Susan Davidson 5
1 ASSASSIN'S CREED: EMBERS Animations 4 Jenny Adrianna 8
1 ASSASSIN'S CREED: EMBERS Animations 6 Lee Pong 10
2 Real Steel(2012) Animations 1 Adam Smith 1
2 Real Steel(2012) Animations 2 Ravi Kumar 2
2 Real Steel(2012) Animations 3 Susan Davidson 5
2 Real Steel(2012) Animations 4 Jenny Adrianna 8
2 Real Steel(2012) Animations 6 Lee Pong 10
3 Alvin and the Chipmunks Animations 1 Adam Smith 1
3 Alvin and the Chipmunks Animations 2 Ravi Kumar 2
3 Alvin and the Chipmunks Animations 3 Susan Davidson 5
3 Alvin and the Chipmunks Animations 4 Jenny Adrianna 8
3 Alvin and the Chipmunks Animations 6 Lee Pong 10
4 The Adventures of Tin Tin Animations 1 Adam Smith 1
4 The Adventures of Tin Tin Animations 2 Ravi Kumar 2
4 The Adventures of Tin Tin Animations 3 Susan Davidson 5
4 The Adventures of Tin Tin Animations 4 Jenny Adrianna 8
4 The Adventures of Tin Tin Animations 6 Lee Pong 10
5 Safe (2012) Action 1 Adam Smith 1
5 Safe (2012) Action 2 Ravi Kumar 2
5 Safe (2012) Action 3 Susan Davidson 5
5 Safe (2012) Action 4 Jenny Adrianna 8
5 Safe (2012) Action 6 Lee Pong 10
6 Safe House(2012) Action 1 Adam Smith 1
6 Safe House(2012) Action 2 Ravi Kumar 2
6 Safe House(2012) Action 3 Susan Davidson 5
6 Safe House(2012) Action 4 Jenny Adrianna 8
6 Safe House(2012) Action 6 Lee Pong 10
7 GIA 18+ 1 Adam Smith 1
7 GIA 18+ 2 Ravi Kumar 2
7 GIA 18+ 3 Susan Davidson 5
7 GIA 18+ 4 Jenny Adrianna 8
7 GIA 18+ 6 Lee Pong 10
8 Deadline(2009) 18+ 1 Adam Smith 1
8 Deadline(2009) 18+ 2 Ravi Kumar 2
8 Deadline(2009) 18+ 3 Susan Davidson 5
8 Deadline(2009) 18+ 4 Jenny Adrianna 8
8 Deadline(2009) 18+ 6 Lee Pong 10
9 The Dirty Picture 18+ 1 Adam Smith 1
9 The Dirty Picture 18+ 2 Ravi Kumar 2
9 The Dirty Picture 18+ 3 Susan Davidson 5
9 The Dirty Picture 18+ 4 Jenny Adrianna 8
9 The Dirty Picture 18+ 6 Lee Pong 10
10 Marley and me Romance 1 Adam Smith 1
10 Marley and me Romance 2 Ravi Kumar 2
10 Marley and me Romance 3 Susan Davidson 5
10 Marley and me Romance 4 Jenny Adrianna 8
10 Marley and me Romance 6 Lee Pong 10

INNER JOIN

CROSS JOIN palauttaa kaikki mahdolliset parit, mikä on harvoin haluttu tulos. INNER JOIN rajaa tuloksen pareihin, jotka ovat todellisuudessa sukua toisilleen.

Sisäistä JOIN-komentoa käytetään palauttamaan rivit molemmista taulukoista, jotka täyttävät annetun ehdon.

Oletetaan, että haluat saada listan jäsenistä, jotka ovat vuokranneet elokuvia, sekä heidän vuokraamiensa elokuvien nimet. Voit käyttää tähän yksinkertaisesti INNER JOIN -operaattoria, joka palauttaa molemmista taulukoista rivit, jotka täyttävät annetut ehdot.

INNER JOIN

SELECT members.`first_name` , members.`last_name` , movies.`title`
FROM members ,movies
WHERE movies.`id` = members.`movie_id`

Suorittamalla yllä oleva komentosarja anna

first_name last_name title
Adam Smith ASSASSIN'S CREED: EMBERS
Ravi Kumar Real Steel(2012)
Susan Davidson Safe (2012)
Jenny Adrianna Deadline(2009)
Lee Pong Marley and me

Huomaa, että yllä oleva tulosskripti voidaan kirjoittaa myös seuraavasti saavuttaaksesi samat tulokset.

SELECT A.`first_name` , A.`last_name` , B.`title`
FROM `members` AS A
INNER JOIN `movies` AS B
ON B.`id` = A.`movie_id`

Ulkoiset liitokset

SISÄLIITOS poistaa hiljaa rivejä, joilla ei ole kumppania. Kun näillä yhteensopimattomilla riveillä on merkitystä, ULKOLIITOS on oikea valinta.

MySQL Ulkoiset liitokset palauttavat kaikki vastaavat tietueet molemmista taulukoista.

Se voi havaita tietueita, joilla ei ole ottelua yhdistetyssä taulukossa. Se palaa NULL yhdistetyn taulukon tietueiden arvot, jos vastaavuutta ei löydy.

Kuulostaako hämmentävältä? Katsotaanpa esimerkkiä –

LEFT LIITY

Oletetaan nyt, että haluat saada kaikkien elokuvien nimet sekä niiden jäsenten nimet, jotka ovat vuokranneet ne. On selvää, ettei kukaan ole vuokrannut joitakin elokuvia. Voimme yksinkertaisesti käyttää LEFT LIITY tarkoitusta varten.

Ulkoiset liitokset

LEFT JOIN palauttaa kaikki rivit vasemmalla olevasta taulukosta, vaikka oikealla olevasta taulukosta ei löytyisikään vastaavia rivejä. Jos oikealla olevasta taulukosta ei löydy osumia, palautetaan NULL.

SELECT A.`title` , B.`first_name` , B.`last_name`
FROM `movies` AS A
LEFT JOIN `members` AS B
ON B.`movie_id` = A.`id`

Suoritetaan yllä oleva komentosarja MySQL työpöytä antaa. Alla olevasta palautetusta tuloksesta näet, että muiden kuin vuokrattujen elokuvien jäsenten nimikentissä on NULL-arvot. Tämä tarkoittaa, että kyseiselle elokuvalle ei löytynyt vastaavaa jäsentaulukkoa.

title first_name last_name
ASSASSIN'S CREED: EMBERS Adam Smith
Real Steel(2012) Ravi Kumar
Safe (2012) Susan Davidson
Deadline(2009) Jenny Adrianna
Marley and me Lee Pong
Alvin and the Chipmunks NULL NULL
The Adventures of Tin Tin NULL NULL
Safe House(2012) NULL NULL
GIA NULL NULL
The Dirty Picture NULL NULL
Note: Null is returned for non-matching rows on right

OIKEA LIITTYMINEN

RIGHT JOIN on selvästi vastoin LEFT JOIN. RIGHT JOIN palauttaa kaikki sarakkeet oikealla olevasta taulukosta, vaikka vastaavia rivejä ei löytyisikään vasemmanpuoleisesta taulukosta. Jos vasenta taulukkoa ei löydy, palautetaan NULL.

Oletetaan esimerkissämme, että sinun on hankittava jäsenten ja heidän vuokraamiensa elokuvien nimet. Nyt meillä on uusi jäsen, joka ei ole vielä vuokrannut yhtään elokuvaa

OIKEA LIITTYMINEN

SELECT A.`first_name` , A.`last_name`, B.`title`
FROM `members` AS A
RIGHT JOIN `movies` AS B
ON B.`id` = A.`movie_id`

Suoritetaan yllä oleva komentosarja MySQL työpöytä antaa seuraavat tulokset.

first_name last_name title
Adam Smith ASSASSIN'S CREED: EMBERS
Ravi Kumar Real Steel(2012)
Susan Davidson Safe (2012)
Jenny Adrianna Deadline(2009)
Lee Pong Marley and me
NULL NULL Alvin and the Chipmunks
NULL NULL The Adventures of Tin Tin
NULL NULL Safe House(2012)
NULL NULL GIA
NULL NULL The Dirty Picture
Note: Null is returned for non-matching rows on left

"ON" ja "USING" lausekkeet

Jokainen kysely tähän mennessä on löytänyt osumia riveistä, joissa on ON-lauseke. MySQL tarjoaa lyhyemmän vaihtoehdon, kun vastaavilla sarakkeilla on sama nimi.

Yllä olevissa JOIN-kyselyesimerkeissä olemme käyttäneet ON-lausetta sovittamaan tietueita taulukoiden välillä.

USING-lausetta voidaan käyttää myös samaan tarkoitukseen. Ero kanssa KÄYTTÖ on se molemmissa taulukoissa on oltava samat nimet vastaaville sarakkeille.

Toistaiseksi "elokuvat" -taulukossa käytimme sen ensisijaista avainta nimellä "id". Viittasimme samaan "jäsenet" -taulukossa nimellä "movie_id".

Nimetään "elokuvat"-taulukot uudelleen "id"-kenttään, jotta niillä on nimi "movie_id". Teemme tämän saadaksemme identtiset kenttien nimet.

ALTER TABLE `movies` CHANGE `id` `movie_id` INT( 11 ) NOT NULL AUTO_INCREMENT;

Seuraavaksi käytetään KÄYTTÖ-toimintoa yllä olevan LEFT JOIN -esimerkin kanssa.

SELECT A.`title` , B.`first_name` , B.`last_name`
FROM `movies` AS A
LEFT JOIN `members` AS B
USING ( `movie_id` )

Sen lisäksi, että käytät ON ja KÄYTTÖ JOIN:ien kanssa voit käyttää monia muita MySQL lausekkeet kuten GROUP BY, MISSÄ ja jopa toimii mm SUMMA, AVG, Jne

UKK

JOIN-operaatio yhdistää kahden taulukon sarakkeet vierekkäin, jolloin avaimen rivit vastaavat toisiaan. UNION-operaatio pinoaa kahden kyselyn tulokset pystysuunnassa ja vaatii vastaavat sarakemäärät ja -tyypit.

Kyllä. Ketjuta lisää JOIN-lausekkeita, joilla kullakin on oma ON-ehtonsa. MySQL yhdistää kaksi ensimmäistä taulukkoa, sitten yhdistää välituloksen seuraavaan taulukkoon ja niin edelleen.

SELF JOIN -operaatio liittää taulukon itseensä käyttämällä kahta aliasta. Se vertaa yhden taulukon rivejä, esimerkiksi yhdistämällä työntekijän rivin kyseisen työntekijän esimiehen riviin.

Kyllä. Editoreihin sisäänrakennetut tekoälyavustajat, kuten MySQL Työpöytä voi luonnostella JOIN-kyselyitä selkokielisestä kehotteesta. Tarkista aina luodut ON-ehdot, koska väärä avain tuottaa hiljaa vääriä tuloksia.

Osittain. Tekoälyneuvojat ehdottavat indeksejä ja parempia liittymisjärjestyksiä, jotka usein lyhentävät suoritusaikaa. Optimoija valitsee edelleen lopullisen suunnitelman, joten liittymisavainten oikea indeksointi on edelleen suurin tekijä.

Tiivistä tämä viesti seuraavasti: