Voorbereiding op programmeerinterviews · Les

Sorteren op meerdere kolommen en NULL-plaatsing

ASC/DESC combineren en begrijpen hoe NULLS FIRST/LAST per database verschilt

Les 1 van 413 stappen

Sorteren op meerdere kolommen en NULL-plaatsing is een gratis Voorbereiding op programmeerinterviews-les op CoddyKit. Dit is les 1 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Voorbereiding op programmeerinterviews. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Voorbereiding op programmeerinterviews bevat in totaal 4 lessen.

Waarom sorteren in interviews aan bod komt

Interviewers beginnen vaak met ORDER BY, omdat daarmee zichtbaar wordt of je begrijpt dat een SQL-resultaatset standaard ongesorteerd is. Zonder expliciete sortering mag de database de rijen teruggeven in elke gewenste volgorde.

Een veelgebruikte openingsvraag is: "Hoe garandeer je dat de rijen in een specifieke volgorde terugkomen?" Het enige juiste antwoord is een expliciete ORDER BY-clausule. Vertrouwen op de invoegvolgorde, de volgorde van de primaire sleutel of de indexvolgorde is een klassieke fout van beginners.

In deze les leer je sorteren op meerdere kolommen en ontdek je waar de lastige NULL-waarden terechtkomen.

De basis van ASC en DESC

ORDER BY sorteert standaard oplopend (ASC). Alleen om de volgorde om te keren heb je DESC nodig. De richting geldt per kolom, niet voor de hele clausule.

Tip voor interviews: geef aan dat ASC de impliciete standaard is, zodat je het niet hoeft op te schrijven. Veel kandidaten denken ten onrechte dat één DESC elke kolom omkeert.

SELECT name, hire_date
FROM employees
ORDER BY hire_date DESC;

Sorteren op meerdere kolommen

Vermeld meerdere kolommen, gescheiden door komma's. SQL sorteert eerst op de eerste kolom, verbreekt daarna gelijke waarden met de tweede kolom, enzovoort. Zie het als een keten van regels om gelijke waarden van elkaar te onderscheiden.

Het voorbeeld sorteert alfabetisch op afdeling en binnen elke afdeling op salaris, van hoog naar laag.

  • Primaire sortering: department oplopend
  • Regel voor gelijke waarden: salary aflopend
SELECT department, name, salary
FROM employees
ORDER BY department ASC, salary DESC;

ASC en DESC combineren

Een veelvoorkomende valkuil in interviews: elke kolom krijgt zijn eigen richting. ORDER BY a, b DESC sorteert a oplopend en b aflopend, niet beide kolommen aflopend.

Als je beide kolommen aflopend wilt sorteren, moet je ORDER BY a DESC, b DESC schrijven. Wees expliciet wanneer de vraag verschillende richtingen combineert.

SELECT region, sales_year, revenue
FROM sales
ORDER BY region ASC, sales_year DESC;

Waar komen NULL-waarden terecht?

Dit is de kern van de les. NULL betekent onbekend, dus de standaard schrijft geen positie voor en databases verschillen in hun standaardgedrag:

  • PostgreSQL & Oracle: NULL-waarden komen bij ASC achteraan en bij DESC vooraan.
  • MySQL & SQL Server: NULL-waarden komen bij ASC vooraan en bij DESC achteraan (ze worden behandeld als de kleinste waarde).

Interviewers vragen graag: "Waar verschijnen NULL-waarden in deze sortering?" Het eerlijke antwoord is: dat hangt af van de database-engine, tenzij je het expliciet bepaalt.

De positie van NULL-waarden expliciet bepalen

Gebruik NULLS FIRST of NULLS LAST om de positie onafhankelijk van de standaard van de database-engine vast te leggen. PostgreSQL, Oracle en SQLite ondersteunen dit rechtstreeks.

De onderstaande query zorgt ervoor dat onbekende indiensttredingsdatums onderaan komen, ook al wordt de kolom oplopend gesorteerd.

SELECT name, hire_date
FROM employees
ORDER BY hire_date ASC NULLS LAST;

NULLS LAST nabootsen in MySQL

MySQL ondersteunt het sleutelwoord NULLS LAST niet. De overdraagbare oplossing is een eerste sorteersleutel die aangeeft of de waarde NULL is.

De expressie hire_date IS NULL levert 0 op voor echte datums en 1 voor NULL-waarden. Door die waarde oplopend te sorteren, komen NULL-waarden achteraan; daarna sorteert de tweede sleutel de echte datums.

SELECT name, hire_date
FROM employees
ORDER BY (hire_date IS NULL) ASC, hire_date ASC;

NULLS FIRST nabootsen in SQL Server

SQL Server heeft evenmin ondersteuning voor NULLS FIRST/LAST. Gebruik een CASE-expressie als eerste sorteersleutel. Hier krijgen NULL-waarden rang 0, zodat ze vooraan verschijnen.

Dit patroon is het onthouden waard: een berekende vlagkolom vóór de echte sorteerkolom geeft je volledige controle over de positie van NULL-waarden in elk SQL-dialect.

SELECT name, hire_date
FROM employees
ORDER BY CASE WHEN hire_date IS NULL THEN 0 ELSE 1 END,
         hire_date ASC;

Uitgewerkt voorbeeld: ranglijst

Stel dat je een ranglijst bouwt: de hoogste score komt eerst en bij gelijke scores staat de speler die zich het vroegst heeft geregistreerd hoger. Spelers die nooit een score hebben behaald (NULL-score) horen onderaan.

Voor de sortering zijn drie sleutels nodig: een NULL-vlag, de score aflopend en de registratiedatum oplopend als regel om gelijke scores van elkaar te onderscheiden.

SELECT player, score, signup_date
FROM players
ORDER BY (score IS NULL) ASC,
         score DESC,
         signup_date ASC;

Kanttekening over sorteerstabiliteit

Een andere favoriete vraag is: "Als twee rijen voor elke ORDER BY-sleutel gelijk zijn, in welke volgorde komen ze dan terug?"

Het antwoord is: onbepaald. SQL-sorteringen zijn niet gegarandeerd stabiel, dus gelijke rijen kunnen in elke onderlinge volgorde verschijnen. Die volgorde kan bovendien tussen uitvoeringen veranderen of wijzigen nadat een index is aangepast.

De oplossing is een volledig unieke regel om gelijke waarden van elkaar te onderscheiden, meestal een primaire sleutel, zodat het resultaat reproduceerbaar is.

SELECT id, name, salary
FROM employees
ORDER BY salary DESC, id ASC;

Opmerking over sorteerprestaties

Sorteren kan duur zijn. Als ORDER BY overeenkomt met een bestaande index met dezelfde kolomvolgorde en richtingen, kan de database-engine de rijen al gesorteerd lezen en een afzonderlijke sorteerstap overslaan.

Verschillende richtingen (bijvoorbeeld wanneer de index overal oplopend is, maar je één kolom aflopend sorteert) maken dit meestal onmogelijk, waardoor een sortering in het geheugen of op schijf nodig is. Als je dit verband tussen indexvolgorde en sorteerkosten noemt, laat je de interviewer zien dat je ervaring hebt.

Korte controle

Test je begrip van richtingsregels bij meerdere kolommen.

Samenvatting

Belangrijkste punten over sorteren op meerdere kolommen en de positie van NULL-waarden:

  • Resultaatsets zijn ongesorteerd tenzij je ORDER BY toevoegt.
  • De richting geldt per kolom; ASC is de standaard.
  • De positie van NULL-waarden verschilt per database-engine: bij Postgres en Oracle achteraan in ASC, bij MySQL en SQL Server vooraan in ASC.
  • Gebruik waar dit wordt ondersteund NULLS FIRST/LAST, of elders een eerste IS NULL- of CASE-vlag.
  • Voeg een unieke regel toe om gelijke waarden van elkaar te onderscheiden (zoals de primaire sleutel) voor een reproduceerbare volgorde.
Gratis beginnen

Leer Voorbereiding op programmeerinterviews met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
90
Lessen
360

Veelgestelde vragen

Is de les “Sorteren op meerdere kolommen en NULL-plaatsing” gratis?

Ja — de volledige tekst van “Sorteren op meerdere kolommen en NULL-plaatsing” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Voorbereiding op programmeerinterviews wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Voorbereiding op programmeerinterviews bevat in totaal 4 lessen.

Wat leer ik in “Sorteren op meerdere kolommen en NULL-plaatsing”?

ASC/DESC combineren en begrijpen hoe NULLS FIRST/LAST per database verschilt Je oefent met Voorbereiding op programmeerinterviews door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Voorbereiding op programmeerinterviews te beginnen?

Ervaring vooraf is niet nodig. Voorbereiding op programmeerinterviews op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.

Hoe lang duurt de les “Sorteren op meerdere kolommen en NULL-plaatsing”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Voorbereiding op programmeerinterviews?

Ja. Elke les over Voorbereiding op programmeerinterviews bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Sorteren op meerdere kolommen en NULL-plaatsing
  2. LIMIT, OFFSET en FETCH FIRST
  3. De Top-N-rijen betrouwbaar retourneren
  4. Sorteren op expressies en aliassen
← Terug naar Voorbereiding op programmeerinterviews