Stel precieze vragen · oefening
Filter één categorie met WHERE
De zoekopdracht met vier kolommen geeft veel informatie, maar antwoordt nog steeds met de hele catalogus. Stel dat Riley gereedschap nodig heeft voor een reparatiesessie. Materiaal voor evenementen en elektronica zouden het antwoord alleen maar lastiger te overzien maken.
Open search.sql en voeg één regel toe tussen FROM items en de puntkomma:
SELECT asset_tag, name, category, loan_days
FROM items
WHERE category = 'tools';
Druk op Run. SQLite hoort dezelfde vier koppen te behouden en alleen de twee rijen met gereedschap terug te geven:
Columns: asset_tag | name | category | loan_days
TL-220 | Step ladder | tools | 3
TL-100 | Cordless drill | tools | 7
SELECT bepaalt nog steeds welke kolommen verschijnen. De nieuwe WHERE-clausule neemt een andere beslissing: welke bronrijen in het resultaat mogen komen. Lees category = 'tools' als een vergelijking. Voor elke rij met een voorwerp vergelijkt SQLite de opgeslagen categorie met de tekst tools en behoudt het de rij als ze gelijk zijn.
De aanhalingstekens zijn van belang omdat tools een tekstwaarde is. De kolomnaam category staat hier niet tussen aanhalingstekens. Die vertelt SQLite waar het moet kijken; 'tools' is de waarde waarnaar het moet zoeken.
Je kunt de beslissing controleren aan de hand van één zichtbare rij. Voor de trapladder bevat category de waarde tools, dus is de vergelijking waar en behoudt SQLite de rij. Voor de projector bevat de kolom electronics, dus is de vergelijking onwaar en blijft die rij buiten het resultaat.
Let erop dat de query niet zegt: “alles behalve evenementen.” Een catalogus kan categorieën bevatten die je nog niet hebt gezien, en die mogen niet in een antwoord met alleen gereedschap terechtkomen. Door de gewenste categorie te noemen, maak je de vraag precies.
De volgorde van de twee passende rijen komt nog steeds voort uit deze specifieke uitvoering, niet uit een regel in je SQL. Binnenkort maken we de volgorde onderdeel van de vraag. Voor deze oefening zijn beide rijen met gereedschap van belang, ongeacht welke SQLite toevallig als eerste teruggeeft.
Submit probeert dezelfde vraag met andere namen van voorwerpen, categorieën en uitleentermijnen. Als er iets verschijnt dat geen gereedschap is, controleer dan de vergelijking na WHERE. Als er gereedschap ontbreekt, controleer dan of het filter category met precies 'tools' vergelijkt en of de oorspronkelijke SELECT met vier kolommen intact is gebleven.
Je query maakt nu duidelijk twee afzonderlijke keuzes: vier bruikbare details voor elk antwoord, en alleen de rijen die bij de gevraagde categorie horen.
Opdracht
Voeg een WHERE-clausule toe aan search.sql, zodat het resultaat met vier kolommen alleen voorwerpen bevat waarvan category gelijk is aan 'tools'.
Voer de query uit, controleer of elke teruggegeven rij gereedschap is en stuur hem in.