Miten INNER JOIN yhdistää rivejä
Riviparien ajattelumalli, joka tekee kaikista join-kysymyksistä helppoja
Miten INNER JOIN yhdistää rivejä on ilmainen Valmistautuminen ohjelmointihaastatteluihin-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Valmistautuminen ohjelmointihaastatteluihin-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Valmistautuminen ohjelmointihaastatteluihin-kurssilla on yhteensä 4 oppituntia.
Ensimmäinen JOIN, josta haastattelijat kysyvät
Kun haastattelija sanoo "yhdistä nämä kaksi taulua", hän tarkoittaa lähes aina INNER JOIN -liitosta. Se on oletusarvoinen liitos ja paljastaa, ymmärrättekö todella, miten rivit yhdistetään pareiksi.
Koko aihe tiivistyy yhteen lauseeseen: INNER JOIN tarkastelee kaikkia mahdollisia rivipareja kahdesta taulusta ja säilyttää vain parit, jotka täyttävät ON-ehdon. Jos vastaavuutta ei ole, rivi yksinkertaisesti katoaa tuloksesta.
Omaksukaa tämä mielikuva, niin kaikki vaikeammat liitoskysymykset helpottuvat.
Kaksi tarkasteltavaa taulua
Käytämme koko oppitunnin ajan kahta pientä taulua. customers sisältää tiedot tilausten tekijöistä, ja orders tallentaa jokaisen tilauksen sekä siihen liittyvän asiakkaan.
customers(id, name)orders(id, customer_id, amount)
Taulujen välinen yhteys on orders.customer_id = customers.id. Tämä yhtäsuuruus on liitosehto, josta koko tulos riippuu.
customers
id | name
1 | Ada
2 | Bob
3 | Cleo -- no orders yet
orders
id | customer_id | amount
10 | 1 | 50
11 | 1 | 20
12 | 2 | 99Perusmuotoinen INNER JOIN -kysely
Tässä on kanoninen kysely, jonka haastattelija haluaa nähdä. Huomioikaa kolme osaa: kaksi taulua, rivit yhdistävä JOIN ... ON sekä tulokseen valittavat sarakkeet.
Avainsana INNER on valinnainen kaikissa merkittävissä tietokannoissa. Pelkkä JOIN tarkoittaa INNER JOIN -liitosta, mutta sen kirjoittaminen auki ilmaisee tarkoituksen ja vähentää epäselvyyttä koodikatselmoinnissa.
SELECT c.name, o.amount
FROM customers AS c
INNER JOIN orders AS o
ON o.customer_id = c.id;Miltä tulos näyttää
Kun suoritatte kyselyn esimerkkidatalla, saatte kolme riviä. Adalla on kaksi tilausta, joten hän esiintyy kahdesti. Bob esiintyy kerran.
Cleo on poissa. Hänellä ei ole vastaavaa tilausta, joten INNER JOIN poistaa hänet kokonaan. Vastaamattomien rivien katoamisen mainitseminen ääneen on tärkeintä JOIN-haastattelukysymyksessä.
name | amount
Ada | 50
Ada | 20
Bob | 99Riviparien malli
Kuvitelkaa, että tietokanta muodostaa ensin karteesisen tulon: jokainen asiakas yhdistetään jokaiseen tilaukseen. Kun asiakkaita ja tilauksia on kolme kumpiakin, ehdokaspareja on 9.
Sen jälkeen tietokanta käyttää ON-ehtoa ja säilyttää vain parit, joille ehto on tosi. Yhdeksästä ehdokkaasta vain kolme täyttää ehdon o.customer_id = c.id.
Suorituskyvyn kannalta ette ajattele asiaa näin, mutta tämä on täsmällinen malli, jonka avulla voitte vastata kaikkiin kysymyksiin palautuvien rivien määrästä.
Ehdokasparien läpikäynti
Käykäämme se läpi. Kunkin parin jälkeinen kommentti osoittaa, onko ehto tosi.
Vain kolme TRUE-riviä säilyy tuloksessa. Jokainen Cleoon (id 3) liittyvä pari epäonnistuu, joten Cleo ei tuota tulokseen mitään.
-- customer.id vs order.customer_id
(Ada=1, ord10 cust=1) -> TRUE keep
(Ada=1, ord11 cust=1) -> TRUE keep
(Ada=1, ord12 cust=2) -> FALSE
(Bob=2, ord10 cust=1) -> FALSE
(Bob=2, ord12 cust=2) -> TRUE keep
(Cleo=3, anything) -> FALSE (no order matches 3)INNER JOIN ei riipu järjestyksestä
Yleinen kysymys kuuluu: onko sillä merkitystä, kumman taulun asetatte ensin? INNER JOIN -liitoksessa ei. Nämä kaksi kyselyä palauttavat samat rivit, koska ON-ehto on symmetrinen.
Optimoija voi lukea kumman tahansa taulun ensin riippumatta siitä, miten kirjoitatte kyselyn. (Tämä EI päde LEFT/RIGHT-liitoksiin, joita käsittelemme myöhemmin.)
-- These return the same rows
SELECT c.name, o.amount
FROM customers c JOIN orders o ON o.customer_id = c.id;
SELECT c.name, o.amount
FROM orders o JOIN customers c ON c.id = o.customer_id;Taulualiaakset kuuluvat asiaan
Haastattelijat odottavat lyhyitä ja selkeitä aliaksia. Verratkaa monisanaista täysin määritettyä versiota selkeästi aliasoituun versioon.
Aliakset ovat myös pakollisia, kun sarakkeen nimi esiintyy molemmissa tauluissa. Pelkän id:n valitseminen tässä aiheuttaisi virheen moniselitteinen sarake, joten on kirjoitettava c.id tai o.id.
-- verbose
SELECT customers.name, orders.amount
FROM customers JOIN orders
ON orders.customer_id = customers.id;
-- aliased, preferred
SELECT c.name, o.amount
FROM customers c JOIN orders o
ON o.customer_id = c.id;Liittäminen useamman kuin yhden sarakkeen perusteella
ON-predikaatti ei rajoitu yhteen yhtäsuuruusehtoon. Kun suhde määritellään yhdistelmäavaimella, ehdot yhdistetään AND-operaattorilla.
Tässä hinta määräytyy tuotteen ja alueen perusteella, joten molempien sarakkeiden on täsmättävä. Haastattelijat käyttävät tätä tarkistaakseen, etteivät yhden sarakkeen liitokset ole vain ulkoa opeteltuja.
SELECT s.units, p.unit_price
FROM sales s
INNER JOIN price_list p
ON p.product_id = s.product_id
AND p.region = s.region;Myös epäyhtäsuuruusliitoksia on olemassa
ON-ehto voi olla mikä tahansa totuusarvolauseke, ei pelkästään =. Epäyhtäsuuruusliitoksessa käytetään välejä tai epäyhtälöitä. Klassinen esimerkki sijoittaa pistemäärän arvosanaluokkaan.
Jokainen pistemäärä osuu siihen arvosanaluokkaan, jonka vaihteluväli sisältää sen. Kun mainitsette, etteivät liitokset rajoitu yhtäsuuruuteen, vaikutatte nopeasti kokeneemmalta.
SELECT s.student, g.grade
FROM scores s
INNER JOIN grades g
ON s.points >= g.min_points
AND s.points <= g.max_points;Eksplisiittinen JOIN verrattuna pilkkuliitokseen
Vanhaa pilkkuliitossyntaksia tulee edelleen vastaan vanhassa koodissa ja joissakin haastattelukysymyksissä. Nämä kaksi kyselyä ovat INNER JOINin kannalta samanarvoiset.
Suosikaa eksplisiittistä JOIN ... ON -muotoa. Pilkkusyntaksissa on helppo saada aikaan vahingossa karteesinen tulo (unohtamalla WHERE), mikä on juuri se virhe, jonka haastattelijat toivovat havaitsevansa.
-- old implicit join
SELECT c.name, o.amount
FROM customers c, orders o
WHERE o.customer_id = c.id;
-- modern explicit join (preferred)
SELECT c.name, o.amount
FROM customers c
JOIN orders o ON o.customer_id = c.id;Pikatarkistus
Testatkaa INNER JOIN -liitoksen täsmäytyksen perusidea.
Kertaus: miten INNER JOIN täsmäyttää rivit
Haastattelussa toistettavat pääkohdat:
- INNER JOIN säilyttää vain toisiaan vastaavat parit; kummankin puolen täsmäämättömät rivit poistuvat.
- Muistimalli: muodostakaa kaikki ehdokasparit ja säilyttäkää sitten ne, joille ON-predikaatti on tosi.
- Se on järjestysriippumaton, ja
INNER-avainsana on valinnainen. - ON-ehdossa voi käyttää yhdistelmäavaimia, välejä ja epäyhtälöitä, ei vain yhtä
=-ehtoa. - Käyttäkää eksplisiittistä
JOIN ... ON-muotoa ja selkeitä aliaksia, jotta vältätte moniselitteisten sarakkeiden ja vahingossa syntyvien karteesisten tulojen aiheuttamat virheet.
Opi Valmistautuminen ohjelmointihaastatteluihin tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 90
- Oppitunnit
- 360
Usein kysytyt kysymykset
Onko oppitunti ”Miten INNER JOIN yhdistää rivejä” ilmainen?
Kyllä – oppitunnin ”Miten INNER JOIN yhdistää rivejä” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Valmistautuminen ohjelmointihaastatteluihin-kurssin, päivitä CoddyKit PROhon. Valmistautuminen ohjelmointihaastatteluihin-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Miten INNER JOIN yhdistää rivejä”?
Riviparien ajattelumalli, joka tekee kaikista join-kysymyksistä helppoja Harjoittelet Valmistautuminen ohjelmointihaastatteluihin-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Valmistautuminen ohjelmointihaastatteluihin-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Valmistautuminen ohjelmointihaastatteluihin-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”Miten INNER JOIN yhdistää rivejä”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Valmistautuminen ohjelmointihaastatteluihin-oppitunnilla?
Kyllä. Jokainen Valmistautuminen ohjelmointihaastatteluihin-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Miten INNER JOIN yhdistää rivejä
- ON ja WHERE liitoksissa
- Liitosten fan-out ja rivien monistuminen
- Kolmen tai useamman taulun liittäminen