INTERSECT ja EXCEPT vertailuun
Etsi kahden aineiston yhteiset ja toisistaan poikkeavat rivit
INTERSECT ja EXCEPT vertailuun on ilmainen Valmistautuminen ohjelmointihaastatteluihin-oppitunti CoddyKitissä. Tämä on oppitunti 3/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.
Vertailuoperaattorit
INTERSECT ja EXCEPT ovat joukko-operaattoreita kahden tulosjoukon vertailuun, eivät niiden yhdistämiseen. Haastatteluissa niitä käytetään esimerkiksi kysymyksissä "mitkä asiakkaat ovat molemmissa luetteloissa" tai "mitkä rivit ovat joukossa A mutta eivät joukossa B".
INTERSECT= molemmissa kyselyissä esiintyvät rivit.EXCEPT= ensimmäisessä kyselyssä mutta ei toisessa esiintyvät rivit.
Mitä INTERSECT palauttaa
INTERSECT palauttaa vain ne yksilölliset rivit, jotka esiintyvät molemmissa tulosjoukoissa. Rivi katsotaan yhteiseksi vain, jos sen jokainen sarake täsmää.
UNION-operaattorin tavoin tavallinen INTERSECT poistaa duplikaatit ja palauttaa jokaisen yhteisen rivin kerran.
SELECT customer_id FROM orders_2023
INTERSECT
SELECT customer_id FROM orders_2024;
-- customers who ordered in BOTH yearsMitä EXCEPT palauttaa
EXCEPT (Oraclessa MINUS) palauttaa ensimmäisen kyselyn yksilölliset rivit, jotka eivät esiinny toisessa kyselyssä. Se on suunnattu operaatio: A EXCEPT B antaa eri tuloksen kuin B EXCEPT A.
Tämä on luonteva tapa löytää tietueet, jotka puuttuvat toisesta aineistosta.
SELECT customer_id FROM orders_2023
EXCEPT
SELECT customer_id FROM orders_2024;
-- ordered in 2023 but NOT in 2024 (churned)EXCEPT ei ole symmetrinen
Haastatteluiden suosikkiaihe on se, että EXCEPT on suunnattu operaatio. Kyselyiden vaihtaminen vastaa eri kysymykseen.
A EXCEPT B= joukossa A mutta ei joukossa B.B EXCEPT A= joukossa B mutta ei joukossa A.
INTERSECT puolestaan on symmetrinen: A INTERSECT B on sama kuin B INTERSECT A.
-- new customers in 2024 (not seen in 2023):
SELECT customer_id FROM orders_2024
EXCEPT
SELECT customer_id FROM orders_2023;Duplikaatit ja DISTINCT-oletus
Standardin mukaiset INTERSECT- ja EXCEPT-operaatiot käsittelevät yksilöllisiä rivejä UNION-operaattorin tavoin. Syötteen duplikaattirivit yhdistetään ennen vertailua.
Jotkin tietokannat tukevat operaattoreita INTERSECT ALL ja EXCEPT ALL, jotka säilyttävät esiintymiskertojen määrän, mutta ne ovat harvinaisempia. Ellei haastattelija mainitse ALL-operaatiota, olettakaa semantiikan olevan yksilöllisyyteen perustuva.
SELECT city FROM a
INTERSECT ALL
SELECT city FROM b;
-- multiplicity-aware (Postgres supports this; MySQL 8+ too)Kokonaisten rivien vertaaminen
Molemmat operaattorit vertaavat kokonaisia rivejä kaikkien valittujen sarakkeiden osalta. Kaksi riviä on sama vain, kun jokainen sarake täsmää. Siksi ne sopivat erinomaisesti sen tarkistamiseen, sisältävätkö kaksi taulua samat tiedot.
Valitkaa kaikki vertailun kannalta olennaiset sarakkeet, jotta vertailu on mielekäs.
SELECT id, name, email FROM prod_users
EXCEPT
SELECT id, name, email FROM staging_users;
-- rows in prod that differ from / are missing in stagingKaksisuuntaisen tauluvertailun malli
Tarkistakaa kahden taulun identtisyys suorittamalla EXCEPT molempiin suuntiin ja yhdistämällä erot. Jos yhdistetty tulos on tyhjä, taulut täsmäävät täysin.
Tämä on klassinen haastatteluvastaus tietojen siirron ja täsmäytystarkistusten validointiin.
(SELECT * FROM table_a EXCEPT SELECT * FROM table_b)
UNION ALL
(SELECT * FROM table_b EXCEPT SELECT * FROM table_a);
-- empty result => tables are identicalMiten NULL-arvoja käsitellään
Joukko-operaatioissa kahta NULL-arvoa pidetään vastaavuuden tarkistuksessa yhtä suurina, mikä poikkeaa tavallisesta tilanteesta, jossa NULL = NULL on UNKNOWN.
Niinpä rivi, jonka yhdessä sarakkeessa on NULL, täsmää toiseen riviin, jossa samassa sijainnissa on NULL. Haastattelijat testaavat tätä, koska se on ristiriidassa tavallisten vertailusääntöjen kanssa.
-- (1, NULL) INTERSECT (1, NULL) -> returns (1, NULL)
SELECT id, region FROM a
INTERSECT
SELECT id, region FROM b;Joukko-operaattoreiden etusijajärjestys
Kun operaattoreita yhdistetään, INTERSECT sitoo yleensä tiukemmin kuin UNION ja EXCEPT SQL-standardin mukaan. Epäselvyyksien välttämiseksi sulkekaa haarat sulkeisiin.
Kun mainitsette haastattelussa käyttävänne sulkeita suoritusjärjestyksen ilmaisemiseksi, osoitatte kypsää ajattelua.
(SELECT id FROM a EXCEPT SELECT id FROM b)
UNION
(SELECT id FROM c);INTERSECT/EXCEPT vai liitokset
INTERSECT ja EXCEPT ovat tiiviitä, vertaavat kokonaisia rivejä ja poistavat duplikaatit automaattisesti. Liitokset ovat joustavampia: voitte palauttaa ylimääräisiä sarakkeita ja päättää, miten duplikaatteja käsitellään.
Suosikaa joukko-operaattoreita, kun kysymys on pelkästään siitä, mitkä rivit ovat yhteisiä tai puuttuvat. Vaihtakaa liitoksiin, kun tarvitsette sarakkeita molemmilta puolilta tai SQL-murre ei tue näitä operaattoreita.
Kootaan kokonaisuudeksi
Yhteenveto, jonka voitte lausua: "INTERSECT palauttaa molemmissa kyselyissä olevat rivit ja on symmetrinen; EXCEPT palauttaa ensimmäisessä kyselyssä mutta ei toisessa olevat rivit ja on suunnattu. Molemmat vertaavat kokonaisia rivejä, käsittelevät NULL-arvoja samanarvoisina ja palauttavat oletuksena yksilölliset rivit."
Kun lisäätte kaksisuuntaisen EXCEPT-vertailun tietojen täsmäytystä koskevaa jatkokysymystä varten, katatte aiheen kokonaan.
Pikatarkistus
Haluatte asiakkaat, jotka tekivät tilauksen vuonna 2023 mutta EIVÄT tehneet tilausta vuonna 2024 (poistuneet asiakkaat).
Kertaus
Tärkeimmät opit:
INTERSECT= molemmissa kyselyissä olevat rivit; symmetrinen.EXCEPT(Oracle: MINUS) = ensimmäisessä mutta ei toisessa kyselyssä olevat rivit; suunnattu.- Molemmat vertaavat kokonaisia rivejä ja palauttavat oletuksena yksilöllisen tuloksen.
- NULL-arvoja käsitellään vastaavuuden tarkistuksessa samanarvoisina.
- Kaksisuuntainen
EXCEPTtuottaa täydellisen tauluvertailun.
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 ”INTERSECT ja EXCEPT vertailuun” ilmainen?
Kyllä – oppitunnin ”INTERSECT ja EXCEPT vertailuun” 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 ”INTERSECT ja EXCEPT vertailuun”?
Etsi kahden aineiston yhteiset ja toisistaan poikkeavat rivit 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 3/4.
Kuinka kauan ”INTERSECT ja EXCEPT vertailuun”-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
- UNION ja UNION ALL
- Sarakemäärän ja tyyppien yhteensopivuus
- INTERSECT ja EXCEPT vertailuun
- Joukko-operaatioiden jäljittely liitoksilla