Mitä ovat JOINS?
Liittymät auttavat hakemaan tietoja kahdesta tai useammasta tietokantataulukosta. Taulukot liittyvät toisiinsa käyttämällä ensisijaisia ja vieraita avaimia.Huomaa: JOIN on väärinymmärretty aihe SQL-leanerien joukossa. Yksinkertaisuuden ja ymmärrettävyyden vuoksi käytämme uutta tietokantaa otoksen harjoittamiseen. Kuten alla
id | etunimi | sukunimi | movie_id |
---|---|---|---|
1 | Adam | Smith | 1 |
2 | Ravi | Kumar | 2 |
3 | Susan | Davidson | 5 |
4 | Jenny | Adrianna | 8 |
6 | Lee | Pong | 10 |
id | otsikko | kategoria |
---|---|---|
1 | ASASASSININ LUOMA: HARJAT | Animaatiot |
2 | Todellinen teräs (2012) | Animaatiot |
3 | Alvin ja pikkuoravat | Animaatiot |
4 | Tina-tinan 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ä | Romantiikkaa |
Liitostyypit
Risti LIITY
Cross JOIN on yksinkertaisin JOIN-muoto, joka vastaa tietokantataulukon kutakin riviä toisen riviin.
Toisin sanoen se antaa meille yhdistelmät jokaisesta ensimmäisen taulukon rivistä ja kaikista toisen taulukon tietueista.
Oletetaan, että haluamme saada kaikki jäsenrekisterit kaikkia elokuvalevyjä vastaan, voimme käyttää alla olevaa komentosarjaa saadaksemme halutut tulokset.
SELECT * FROM `movies` CROSS JOIN `members`
Yllä olevan komentosarjan suorittaminen MySQL-työpöydällä 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 |
SISÄINEN LIITTYMINEN
Sisäistä JOINia käytetään palauttamaan molemmista taulukoista rivit, jotka täyttävät annetun ehdon.
Oletetaan, että haluat saada luettelon jäsenistä, jotka ovat vuokraaneet elokuvia, sekä heidän vuokraamansa elokuvien nimet. Voit käyttää yksinkertaisesti INNER JOIN -sovellusta, joka palauttaa rivit molemmista taulukoista, jotka täyttävät tietyt ehdot.
SELECT members.`first_name` , members.`last_name` , movies.`title`FROM members ,moviesWHERE movies.`id` = members.`movie_id`
Suoritetaan yllä oleva komento antaa
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 AINNER JOIN `movies` AS BON B.`id` = A.`movie_id`
Ulkoiset liitokset
MySQL Outer JOINs palauttaa kaikki molemmista taulukoista vastaavat tietueet.
Se voi havaita tietueet, joissa ei ole yhtäläisyyksiä liitetyssä taulukossa. Se palauttaa NULL- arvot yhdistetyn taulukon tietueille, jos vastaavuutta ei löydy.
Kuulostaa hämmentävältä? Katsotaanpa esimerkkiä -
VASEN LIITTYMINEN
Oletetaan, että nyt haluat saada kaikkien elokuvien otsikot yhdessä niiden vuokraavien jäsenten nimien kanssa. On selvää, ettei kukaan ole vuokrannut joitain elokuvia. Voimme yksinkertaisesti käyttää VASEN LIITTYMÄT tähän tarkoitukseen.
VASEN JOIN palauttaa kaikki rivit vasemmalla olevasta taulukosta, vaikka oikeanpuoleisesta taulukosta ei löydy yhtään riviä. Jos oikealla olevasta taulukosta ei löydy vastaavuuksia, NULL palautetaan.
SELECT A.`title` , B.`first_name` , B.`last_name`FROM `movies` AS ALEFT JOIN `members` AS BON B.`movie_id` = A.`id`
Yllä olevan komentosarjan suorittaminen MySQL-työpöydällä antaa: Voit nähdä, että palautetussa tuloksessa, joka on lueteltu alla, elokuvien, joita ei ole vuokrattu, jäsenen nimikentillä on NULL-arvot. Tämä tarkoittaa, ettei yhtään vastaavaa jäsentä löytänyt jäsentaulukko kyseiselle elokuvalle.
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 |
OIKEA LIITTYMINEN
OIKEA LIITTYMINEN on selvästi VASEN LIITTYMISEN vastakohta. OIKEA JOIN palauttaa kaikki oikeanpuoleisen taulukon sarakkeet, vaikka vasemmanpuoleisesta taulukosta ei löytynyt yhtään riviä. Jos vasemmanpuoleisessa taulukossa ei löytynyt vastaavuuksia, NULL palautetaan.
Oletetaan esimerkissämme, että sinun on hankittava jäsenten nimet ja heidän vuokraamansa elokuvat. Nyt meillä on uusi jäsen, joka ei ole vielä vuokrannut yhtään elokuvaa
SELECT A.`first_name` , A.`last_name`, B.`title`FROM `members` AS ARIGHT JOIN `movies` AS BON B.`id` = A.`movie_id`
Yllä olevan komentosarjan suorittaminen MySQL-työpöydällä 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 |
"ON" - ja "USING" -lausekkeet
Yllä olevissa JOIN-kyselyesimerkkeissä olemme käyttäneet ON-lauseketta tietueiden sovittamiseen taulukon välillä.
KÄYTTÖ-lausetta voidaan käyttää myös samaan tarkoitukseen. Ero KÄYTÖSSÄ on, että molemmissa taulukoissa on oltava samat nimet vastaaville sarakkeille.
Toistaiseksi "elokuvat" -taulukossa käytimme sen avainta nimellä "id". Viittasimme samaan "jäsenet" -taulukossa nimellä "movie_id".
Nimeetään uudelleen "elokuvat" -taulukot "id" -kentäksi, jotta nimeksi tulee "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Ö -kohtaa yllä olevan VASEN JOIN -esimerkin kanssa.
SELECT A.`title` , B.`first_name` , B.`last_name`FROM `movies` AS ALEFT JOIN `members` AS BUSING ( `movie_id` )
Lukuun ottamatta käyttö päälle ja käytät niitä liittyy voit käyttää monia muita MySQL lausekkeita kuten GROUP BY, WHERE ja jopa toimii kuin summa , AVG jne
Miksi meidän pitäisi käyttää liittymiä?
Nyt saatat ajatella, miksi käytämme JOIN-tiedostoja, kun voimme tehdä saman tehtävän suorittamalla kyselyitä. Varsinkin jos sinulla on jonkin verran kokemusta tietokannan ohjelmoinnista, tiedät, että voimme suorittaa kyselyitä yksi kerrallaan, käyttää kunkin tulosta peräkkäisissä kyselyissä. Tietysti se on mahdollista. JOIN-tiedostojen avulla voit kuitenkin saada työn valmiiksi käyttämällä vain yhtä kyselyä kaikilla hakuparametreilla. Toisaalta MySQL voi saavuttaa paremman suorituskyvyn JOIN-tiedostoilla, koska se voi käyttää indeksointia. Yksinkertaisen yhden JOIN-kyselyn käyttö vähentää useiden kyselyjen suorittamista palvelimen yleiskustannuksia. Useiden kyselyjen käyttäminen sen sijaan johtaa enemmän tiedonsiirtoihin MySQL: n ja sovellusten (ohjelmistojen) välillä. Lisäksi se vaatii enemmän datan manipulointia myös sovelluksen lopussa.
On selvää, että voimme saavuttaa paremman MySQL: n ja sovellusten suorituskyvyn JOINien avulla.
Yhteenveto
- JOINS antaa meille mahdollisuuden yhdistää useamman kuin yhden taulukon tiedot yhdeksi tulosjoukoksi.
- JOINSilla on parempi suorituskyky verrattuna alakyselyihin
- INNER JOINS palauttaa vain annetut ehdot täyttävät rivit.
- OUTER JOINS voi myös palauttaa rivejä, joista ei löytynyt vastaavuuksia. Vastaamattomat rivit palautetaan NULL-avainsanalla.
- Suurimpia JOIN-tyyppejä ovat Sisempi, Vasen Ulompi, Oikea Ulompi, Ristiliitokset jne.
- JOIN-operaatioissa usein käytetty lause on "ON". "USING" -lauseke edellyttää, että vastaavien sarakkeiden on oltava saman nimisiä.
- JOINSia voidaan käyttää myös muissa lausekkeissa, kuten GROUP BY, WHERE, SUB QUERIES, AGGREGATE FUNCTIONS jne.