Monisarakkeinen lajittelu ja NULL-arvojen sijoittelu
ASC- ja DESC-järjestysten yhdistäminen sekä NULLS FIRST- ja NULLS LAST -lausekkeiden erot tietokannoissa
Monisarakkeinen lajittelu ja NULL-arvojen sijoittelu on ilmainen SQL-työhaastatteluun valmistautuminen-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 SQL-työhaastatteluun valmistautuminen-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. SQL-työhaastatteluun valmistautuminen-kurssilla on yhteensä 4 oppituntia.
Miksi lajittelu tulee vastaan haastatteluissa
Haastattelijat ottavat ORDER BY-lausekkeen esiin varhain, koska se paljastaa, ymmärrätkö SQL-tulosjoukon olevan oletusarvoisesti järjestämätön. Ilman eksplisiittistä lajittelua tietokanta saa palauttaa rivit missä tahansa haluamassaan järjestyksessä.
Yleinen aloituskysymys on: "Miten varmistat, että rivit palautetaan tietyssä järjestyksessä?" Ainoa oikea vastaus on nimenomainen ORDER BY-lauseke. Lisäysjärjestykseen, perusavaimen järjestykseen tai indeksin järjestykseen luottaminen on tyypillinen aloittelijan virhe.
Tässä oppitunnissa opit hallitsemaan usean sarakkeen lajittelun sekä hankalan kysymyksen siitä, mihin NULL-arvot sijoittuvat.
ASC:n ja DESC:n perusteet
ORDER BY lajittelee rivit oletusarvoisesti nousevaan järjestykseen (ASC). Vain järjestyksen kääntämiseen tarvitaan DESC. Suunta määritetään kullekin sarakkeelle erikseen, ei koko lausekkeelle.
Haastatteluvinkki: mainitse, että ASC on implisiittinen oletusarvo, joten sitä ei tarvitse kirjoittaa. Monet ehdokkaat luulevat virheellisesti, että yksi DESC kääntää kaikkien sarakkeiden järjestyksen.
SELECT name, hire_date
FROM employees
ORDER BY hire_date DESC;Lajittelu usean sarakkeen perusteella
Luettele useita sarakkeita pilkuin eroteltuina. SQL lajittelee ensimmäisen sarakkeen perusteella, ratkaisee tasatilanteet toisen sarakkeen avulla ja jatkaa samalla tavalla. Ajattele tätä tasatilanteiden ratkaisijoiden ketjuna.
Esimerkissä lajitellaan osaston mukaan aakkosjärjestyksessä ja kunkin osaston sisällä palkan mukaan suurimmasta pienimpään.
- Ensisijainen lajittelu:
departmentnousevasti - Tasatilanteen ratkaisija:
salarylaskevasti
SELECT department, name, salary
FROM employees
ORDER BY department ASC, salary DESC;ASC:n ja DESC:n yhdistäminen
Yleinen haastattelujen kompa: kukin sarake saa oman suuntansa. ORDER BY a, b DESC lajittelee a:n nousevasti ja b:n laskevasti, ei molempia laskevasti.
Jos haluat molemmat laskevaan järjestykseen, sinun on kirjoitettava ORDER BY a DESC, b DESC. Ole täsmällinen, kun kysymyksessä yhdistetään eri suuntia.
SELECT region, sales_year, revenue
FROM sales
ORDER BY region ASC, sales_year DESC;Mihin NULL-arvot sijoittuvat
Tämä on oppitunnin ydin. NULL tarkoittaa tuntematonta, joten standardi ei määrää sille tiettyä sijaintia, ja tietokannat käyttävät eri oletuksia:
- PostgreSQL & Oracle: NULL-arvot sijoittuvat
ASC-lajittelussa viimeisiksi jaDESC-lajittelussa ensimmäisiksi. - MySQL & SQL Server: NULL-arvot sijoittuvat
ASC-lajittelussa ensimmäisiksi jaDESC-lajittelussa viimeisiksi (niitä käsitellään pienimpänä arvona).
Haastattelijat kysyvät mielellään: "Mihin NULL-arvot sijoittuvat tässä lajittelussa?" Rehellinen vastaus on, että se riippuu moottorista, ellet määritä sitä nimenomaisesti.
NULL-arvojen sijoittamisen määrittäminen eksplisiittisesti
Jotta sijoittelu olisi deterministinen tietokannan oletuksista riippumatta, käytä NULLS FIRST- tai NULLS LAST-määrettä. PostgreSQL, Oracle ja SQLite tukevat tätä suoraan.
Alla oleva kysely pakottaa tuntemattomat palkkauspäivät loppuun, vaikka sarake lajitellaan nousevasti.
SELECT name, hire_date
FROM employees
ORDER BY hire_date ASC NULLS LAST;NULLS LAST -toiminnon jäljitteleminen MySQL:ssä
MySQL ei tue NULLS LAST-avainsanaa. Siirrettävä kiertotapa on käyttää ensimmäisenä lajitteluavaimena avainta, joka ilmaisee, onko arvo NULL.
Lauseke hire_date IS NULL palauttaa oikeille päivämäärille arvon 0 ja NULL-arvoille arvon 1. Kun tämä lajitellaan nousevasti, NULL-arvot siirtyvät loppuun, minkä jälkeen toinen avain järjestää varsinaiset päivämäärät.
SELECT name, hire_date
FROM employees
ORDER BY (hire_date IS NULL) ASC, hire_date ASC;NULLS FIRST -toiminnon jäljitteleminen SQL Serverissä
SQL Serveristäkin puuttuu NULLS FIRST/LAST. Käytä ensimmäisenä lajitteluavaimena CASE-lauseketta. Tässä NULL-arvoille annetaan sijoitus 0, joten ne tulevat ensin.
Tämä malli kannattaa opetella ulkoa: ennen varsinaista lajittelusaraketta sijoitettu laskettu lippusarake antaa täyden hallinnan NULL-arvojen sijainnista missä tahansa SQL-murteessa.
SELECT name, hire_date
FROM employees
ORDER BY CASE WHEN hire_date IS NULL THEN 0 ELSE 1 END,
hire_date ASC;Esimerkki: tulostaulukko
Oletetaan, että rakennat tulostaulukon: korkein tulos ensin, ja tasatuloksissa aiemmin rekisteröitynyt pelaaja sijoittuu korkeammalle. Pelaajat, jotka eivät ole koskaan saaneet tulosta (NULL-tulos), kuuluvat viimeisiksi.
Lajitteluun tarvitaan kolme avainta: NULL-lippu, tulos laskevassa järjestyksessä ja rekisteröitymispäivä nousevassa järjestyksessä tasatilanteen ratkaisijana.
SELECT player, score, signup_date
FROM players
ORDER BY (score IS NULL) ASC,
score DESC,
signup_date ASC;Huomautus lajittelun vakaudesta
Toinen suosikkikysymys kuuluu: "Jos kaksi riviä ovat samoja kaikkien ORDER BY -avainten osalta, missä järjestyksessä ne palautetaan?"
Vastaus: määrittelemätön. SQL-lajittelujen vakaata järjestystä ei taata, joten samanarvoiset rivit voivat esiintyä missä tahansa keskinäisessä järjestyksessä, ja järjestys voi muuttua ajokertojen välillä tai indeksin vaihtamisen jälkeen.
Korjaus on lisätä täysin yksikäsitteinen tasatilanteen ratkaisija, yleensä perusavain, jotta tulos on toistettavissa.
SELECT id, name, salary
FROM employees
ORDER BY salary DESC, id ASC;Huomio lajittelun suorituskyvystä
Lajittelu voi olla kallista. Jos ORDER BY vastaa olemassa olevaa indeksiä sarakkeiden samassa järjestyksessä ja samoilla suunnilla, moottori voi lukea rivit valmiiksi lajiteltuina ja ohittaa erillisen lajitteluvaiheen.
Toisistaan poikkeavat suunnat – esimerkiksi indeksi on kokonaan nouseva, mutta yksi sarake lajitellaan laskevasti – yleensä estävät tämän. Tällöin tarvitaan muistissa tai levyllä suoritettava lajittelu. Tämän indeksijärjestyksen ja lajittelukustannuksen välisen yhteyden mainitseminen osoittaa haastattelijalle kypsää ymmärrystä.
Pikatesti
Testaa, kuinka hyvin hallitset usean sarakkeen suuntien säännöt.
Kertaus
Usean sarakkeen lajittelua ja NULL-arvojen sijoittelua koskevat keskeiset opit:
- Tulosjoukot ovat järjestämättömiä, ellet lisää
ORDER BY-lauseketta. - Suunta määritetään kullekin sarakkeelle erikseen;
ASCon oletusarvo. - NULL-arvojen sijainti vaihtelee moottorin mukaan: ASC-lajittelussa viimeisinä Postgresissa ja Oraclessa, ensimmäisinä MySQL:ssä ja SQL Serverissä.
- Käytä tuettuja
NULLS FIRST/LAST-määritteitä tai muualla ensimmäisenä lajitteluavaimenaIS NULL- taiCASE-lippua. - Lisää yksikäsitteinen tasatilanteen ratkaisija, kuten perusavain, jotta järjestys on toistettavissa.
Opi SQL 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
- 30
- Oppitunnit
- 120
Usein kysytyt kysymykset
Onko oppitunti ”Monisarakkeinen lajittelu ja NULL-arvojen sijoittelu” ilmainen?
Kyllä – oppitunnin ”Monisarakkeinen lajittelu ja NULL-arvojen sijoittelu” 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 SQL-työhaastatteluun valmistautuminen-kurssin, päivitä CoddyKit PROhon. SQL-työhaastatteluun valmistautuminen-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Monisarakkeinen lajittelu ja NULL-arvojen sijoittelu”?
ASC- ja DESC-järjestysten yhdistäminen sekä NULLS FIRST- ja NULLS LAST -lausekkeiden erot tietokannoissa Harjoittelet SQL-työhaastatteluun valmistautuminen-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni SQL-työhaastatteluun valmistautuminen-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin SQL-työhaastatteluun valmistautuminen-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”Monisarakkeinen lajittelu ja NULL-arvojen sijoittelu”-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ä SQL-työhaastatteluun valmistautuminen-oppitunnilla?
Kyllä. Jokainen SQL-työhaastatteluun valmistautuminen-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
- Monisarakkeinen lajittelu ja NULL-arvojen sijoittelu
- LIMIT, OFFSET ja FETCH FIRST
- Top-N-rivien luotettava palauttaminen
- Lajittelu lausekkeiden ja aliasten perusteella