INNER JOIN vs LEFT JOIN, eli kysymys. Tänään selitämme lyhyesti, miten näitä kahta liitostyyppiä käytetään ja mikä on ero. Käymme tämän aiheen läpi myöhemmin myöhemmin, kun laajennamme malliamme ja pystymme kirjoittamaan paljon monimutkaisempia kyselyitä.
Muutokset tiedoissa
Ennen kuin vertaamme INNER JOINia VASEN LIITTYMÄ, katsotaanpa mitä tiedämme tällä hetkellä. Toistaiseksi tässä sarjassa olemme selittäneet tietokannan perusteet – kuinka luoda tietokanta ja taulukot, kuinka täyttää taulukot tiedoilla ja tarkistaa niihin tallennetut tiedot yksinkertaisilla kyselyillä. Olemme jopa liittäneet kaksi taulukkoa edellisessä artikkelissa. Nyt olemme valmiita seuraavaan vaiheeseen.
Mutta ennen kuin siirrymme siihen, tehdään vain yksi pieni muutos tietomme. Lisätään 2 riviä maataulukkoon seuraavilla INSERT INTO -komennoilla:
Tarkistamme nyt molempien taulukoiden sisällön:
Voit helposti huomata, että taulukon maassa on 2 uutta riviä, yksi Espanjalle ja toinen Venäjälle. Heidän tunnuksensa ovat 6 ja 7. Huomaa myös, että kaupunkitaulukossa ei ole country_id-arvoa, jonka arvo on 6 tai 7. Tämä tarkoittaa yksinkertaisesti sitä, että meillä ei ole tietokannassamme kaupunkia Venäjältä tai Espanjasta. Käytämme tätä tosiseikkaa myöhemmin.
SISÄINEN LIITTYMINEN
Keskustellaan näistä kahdesta kyselystä:
Heidän palauttaman tuloksensa näkyy alla olevassa kuvassa:
Molemmat kyselyt palauttavat täsmälleen saman tuloksen. Tämä ei ole vahingossa, vaan tulos siitä, että tämä on sama kysely, joka on kirjoitettu kahdella eri tavalla. Molemmat tavat ovat oikein, ja voit käyttää mitä tahansa niistä.
Ensimmäisessä kyselyssä lueteltiin kaikki käyttämämme taulukot kyselyn FROM-osassa (FROM-maa, kaupunki) ja menimme sitten liittymään ehto kyselyn WHERE-osassa (WHERE city.country_id = country.id). Jos unohdimme kirjoittaa tämän liittymisehdon, meillä olisi molempien taulukoiden suorakulmainen tulo.
Toisessa kyselyssä meillä on vain yksi taulukko kyselyn FROM-osassa (FROM-maa) ja sitten meillä on toinen taulukko ja JOIN-ehto kyselyn JOIN-osassa (INNER JOIN city ON city.country_id = country.id).
Vaikka molemmat kyselyt ovat hyvin kirjoitettuja, ehdotan, että käytät aina INNER JOIN -taulukkoa taulukoiden luetteloimisen ja liittämisen sijaan kyselyn WHERE-osaan. Tähän on muutama syy:
- Luettavuus on paljon parempi, koska käytetty taulukko ja siihen liittyvät JOIN-ehdot ovat samat linja. Voit helposti nähdä, jätitkö JOIN-ehdon vai et.
- Jos haluat käyttää muita JOIN-tekijöitä myöhemmin (VASEN tai OIKEA), et voisi tehdä sitä (helposti), ellet ole aiemmin käyttänyt INNER JOIN -toimintoa että
Seuraavaksi kommentoidaan mitä kyselyt todella palautuivat:
- kaikki toisiinsa liittyvät maat ja kaupungit (ulkomaisen avaimen kautta)
- Meillä ei ole kahta maata luettelossa (Espanja ja Venäjä), koska niillä ei ole yhtään vastaavaa kaupunkia kaupunkitaulukossa
VASEN JOIN
Toistan tämän – ”Meillä ei ole 2 maata luettelossa (Espanja ja Venäjä), koska niillä ei ole yhtään kaupunkia kaupunkitaulukossa”. Tämä on ratkaisevan tärkeää verrattaessa INNER JOIN ja VASEN JOIN.
Joissakin tapauksissa haluamme sisällyttää jopa nämä tietueet tulokseemme. Esimerkiksi haluat yksinkertaisesti nähdä tuloksesta, että näillä mailla ei ole toisiinsa liittyviä taulukoita. Tämä voi olla osa jonkinlaista valvontaa, tai ehkä vain tapausten laskeminen jne. Riippumatta siitä, millainen halu on, haluamme teknisesti pystyä siihen. Ja me olemme. Tietokannoissa VASEN JOIN tekee juuri sen.
VASEN JOIN-tuloksen on oltava sama kuin INNER JOIN +, meillä on rivejä ”vasemmalta” -taulukosta ilman paria ”oikea” taulukko. Käytämme samaa INNER JOIN -kyselyä ja korvataan vain sana INNER sanalla LEFT. Tämä on tulos:
Voit helposti huomata, että meillä on 2 riviä enemmän kuin INNER-tulos. LIITY kysely. Nämä ovat rivejä Venäjälle ja Espanjalle. Koska molemmilla ei ole yhtään kaupunkia, kaikilla näillä kahdella rivillä olevilla kaupunkimääritteillä on NULL-arvot (ei määritelty). Tämä on suurin ero verrattaessa INNER JOIN ja VASEN JOIN.
RIGHT JOIN
Kuulet ainakin OIKEA JOIN. Sitä käytetään harvoin, koska se antaa saman tuloksen kuin LEFT JOIN. Toisaalta VASEN JOINia käyttäviä kyselyjä on paljon helpompi lukea, koska luetellaan vain taulukot peräkkäin.
Tämä vastaa edellistä kyselyä, joka käyttää OIKEA JOIN:
Huomaa, että palautetut arvot ovat samat, vain tässä tapauksessa kaupunkitaulukon arvot ovat viiden ensimmäisen sarakkeen sisällä, ja maa- liittyvät arvot tulevat niiden jälkeen.
INNER JOIN vs LEFT JOIN
INNER JOIN vs LEFT JOIN?Itse asiassa tämä ei ole lainkaan kysymys. Käytät INNER JOIN -toimintoa, kun haluat palauttaa vain tietueet, joissa on pari molemmilla puolilla, ja LEFT JOIN -toimintoa käytetään, kun tarvitset kaikkia ”vasen” -taulukon tietueita riippumatta siitä, onko heillä pari ”oikeassa” taulukossa. tai ei. Jos tarvitset kaikki tietueet molemmista taulukoista, riippumatta siitä, onko niillä pari, sinun on käytettävä CROSS JOIN -ohjelmaa (tai simuloitava sitä LEFT JOINs ja UNION). Lisätietoja siitä tulevissa artikkeleissa.
Sisällysluettelo
Opi SQL: Luo tietokanta & Luo taulukon toiminnot
Opi SQL: LISÄÄ TAULUKKOON
Opi SQL: Ensisijainen avain
Opi SQL: Vieras avain
Opi SQL: SELECT-käsky
Opi SQL: INNER JOIN vs LEFT JOIN
Opi SQL: SQL-komentosarjat
Opi SQL: relaatiotyypit
Opi SQL: Liitä useita taulukoita
Opi SQL: Aggregate Functions
Opi SQL: Kuinka kirjoittaa monimutkainen SELECT-kysely
Opi SQL: INFORMATION_SCHEMA-tietokanta
Opi SQL: SQL-tietotyypit
Opi SQL: Aseta teoria
Opi SQL: Käyttäjän määrittämät toiminnot
Opi SQL: Käyttäjän määrittelemät tallennetut menettelyt
Opi SQL: SQL-näkymiä
Opi SQL: SQL-käynnistimet
Opi SQL: Harjoittele SQL-kyselyjä
Opi SQL: esimerkkejä SQL-kyselyistä
Opi SQL: Luo raportti manuaalisesti SQL-kyselyjen käyttäminen
Opi SQL: SQL Serverin päivämäärä- ja aikatoiminnot
Opi SQL: Luo SQL Server -raportteja päivämäärä- ja aikatoimintojen avulla
Opi SQL: SQL Server Pivot -taulukot
Opi SQL: SQL Server viedään Exceliin
Opi SQL: Johdatus SQL Server -silmukkoihin
Opi SQL: SQL Server -kohdistimet
Opi SQL: SQL: n parhaat käytännöt tietojen poistamiseen ja päivittämiseen
Opi SQL: Nimeämiskäytännöt
Opi SQL: SQL-työtehtävät
Opi SQL: Non-Equi liittyy SQL Serveriin
Opi SQL: SQL Injektio
- Kirjoittaja
- Viimeisimmät viestit
Hänen aikaisemmat ja nykyiset tehtävänsä vaihtelevat tietokantojen suunnittelusta ja koodauksesta opetukseen, konsultointiin ja tietokantojen kirjoittamiseen. Älä unohda, BI, algoritmien luominen, shakki, filatelia, 2 koiraa, 2 kissaa, 1 vaimo, 1 vauva …
Löydät hänet LinkedInistä
Näytä kaikki Emil Drkusicin viestit
- Opi SQL: SQL Injection – 2. marraskuuta 2020
- Opi SQL: Ei-Equi-liittymät SQL Serveriin – 29. syyskuuta 2020
- Opi SQL: SQL-työtehtävät – 1. syyskuuta 2020