0%

Stel precieze vragen · oefening

Behoud alleen de eerste paar rijen

De zoekopdracht heeft een betrouwbare eerste, tweede en derde rij. Stel dat de uitleenbalie maar ruimte heeft om twee aanbevelingen te tonen. Omdat je de volgorde al hebt vastgelegd, heeft “de eerste twee” nu één precieze betekenis.

Verwijder de puntkomma na de ORDER BY-regel en voeg deze laatste regel toe:

LIMIT 2;

Druk op Run. SQLite hoort de twee rijen vooraan in de volgorde terug te geven en daar te stoppen:

Columns: asset_tag | name | category | loan_days
TL-100 | Cordless drill | tools | 7
EV-101 | Folding table | events | 7

LIMIT 2 bepaalt niet welke rijen het beste zijn. De WHERE-clausule bepaalt eerst welke voorwerpen voldoen en ORDER BY geeft die passende rijen hun volledig bepaalde positie. LIMIT behoudt daarna twee rijen vanaf het begin van dat geordende resultaat.

Die volgorde is van belang. Een query met LIMIT 2 maar zonder bruikbare sortering zou vragen om twee willekeurige passende rijen die SQLite toevallig produceert. Dat kan er in één uitvoering prima uitzien en in een andere catalogus een beter resultaat missen. Hier komen eerst de langste toegestane termijnen, beslissen namen bij gelijke termijnen en beslissen ID’s bij herhaalde namen voordat de limiet wordt toegepast.

Het getal is een maximum. Als een latere catalogus maar één passend voorwerp heeft, geeft SQLite één rij terug. Als geen enkel voorwerp voldoet, geeft het geen rijen terug. De query verzint geen vervangers om de tweede positie op te vullen.

Submit bevat meer dan twee passende voorwerpen en voegt de beste kandidaten laat in. Zo voorkomen we dat de invoegvolgorde of kleine ID’s per ongeluk het antwoord bepalen. Behoud de volledige volgorde met drie sleutels en voeg daarna de limiet toe.

Als Run drie rijen teruggeeft, controleer dan of de puntkomma naar het einde van LIMIT 2 is verplaatst. Een puntkomma sluit de SQL-instructie af. Als je de nieuwe clausule achter de oude puntkomma zet, valt die buiten de query.

Je zoekopdracht geeft nu een shortlist terug in plaats van de hele catalogus: dezelfde precieze passende rijen, voorspelbaar geordend, waarvan alleen de eerste twee overblijven.

Opdracht

Voeg LIMIT 2 toe na de volledige ORDER BY-clausule in search.sql. Laat de kolommen, het filter en alle drie de sorteersleutels ongewijzigd.

Voer de query uit en stuur het resultaat met twee rijen in.