I lektionen om Simpel SELECT kunne vi kun hente alle rækker fra en tabel. I denne lektion skal du se, hvordan du kan udvide SELECT til at begrænse resultatet til de interessante rækker.
Du tilføjer en afgrænsning af resultatet med kommandoen WHERE. SQL-sætningen kommer så til at se sådan ud:
SELECT <Kolonne1, Kolonne2, ...> FROM Tabel WHERE Betingelse
Altså Udvælg noget Fra et sted Hvor betingelse er opfyldt. Når betingelsen er sand for en række i tabellen, vil den komme med i udtrækket, ellers ikke.
Betingelser
En betingelse er et logisk udtryk, som resulterer i en af værdierne SAND eller FALSK.
Her er et antal betingelser taget ud af den blå luft – i parentesen står resultatet af betingelsen.
- 1 > 2 – Ét er større end to (Falsk)
- 2 > 1 – To er større end ét (Sand)
- 2 = 1 + 1 – To er lig med et plus et (Sand)
- 4 <= 4 – Fire er mindre eller lig med fire (Sand)
- 4 < 4 – Fire er mindre end fire (Falsk)
- 3 <> 2 – Tre er forskellig fra to (Sand)
I SQL vil vi naturligvis benytte kolonnenavne i vores logiske udtryk. Værdier behøver ikke være tal, det kan også være tekst. Tekst skal skrives omkranset af apostroffer (enkelt-anførselstegn). Eksempler:
- ‘Hans’ = ‘Grethe’ – teksterne Hans og Grethe er ens (Falsk)
- ‘Hans’ > ‘Grethe’ – ordet Hans kommer efter Grethe i alfabetet (Sand)
Der er flere muligheder, hvilket vi kommer ind på i senere lektioner.
Find en kunde ud fra navn
Lad os kigge i Kunde-tabellen igen. Vi vil gerne finde ud af, hvilken by kunden Min Bix ligger i. Vi udvælger altså Navn og Bynavn fra Kunde-tabellen og kræver, at Navn er lig med Min Bix:
SELECT Navn, Bynavn
FROM Kunde
WHERE Navn = 'Min Bix'
Find alle kunder efter K i alfabetet
Vælg alt fra Kunde-tabellen, hvor navnet kommer efter K i alfabetet ved at afgrænse på Navn-kolonnen og kræve, at den er større end K.
SELECT *
FROM Kunde
WHERE Navn >'K'
Find varer ud fra pris
Tal er jo oplaget at sammenligne på. Her er en række eksempler på at finde varer ud fra prisen i Vare-tabellen.
Find den eller de varer, der koster 7 kr.:
SELECT * FROM Vare
WHERE Pris = 7
Find dem, der koster 7 kr. eller mere:
SELECT * FROM Vare
WHERE Pris >= 7
Find dem, der koster 7 kr. eller mindre:
SELECT * FROM Vare
WHERE Pris <= 7
Find dem, der koster alt andet end 7 kr.:
SELECT * FROM Vare
WHERE Pris <> 7
Find den vare, der koster 2,50 kr.:
Bemærk, at decimaltal skal skrives i amerikansk notation (punktum i stedet for komma), selv om beløbet faktisk vises med komma i tabellen.
SELECT * FROM Vare
WHERE Pris = 2.5
Prøv selv
- Kolonnen, som du afgrænser på, behøver ikke være med i resultatet. Prøv at finde telefonnummer på Liselottes Garn.
- Find navn og email på kunden med telefonnummer 79441566.
- Skrev du ‘ ‘ omkring telefonnummeret? Prøv samme SQL både med og uden ‘ ‘. SQL Server forsøger at konvertere værdien til kolonnens datatype, og telefonnummeret kan nemt oversættes til tekst.
- I tabellen Ordrestatus kan du finde kolonnen Statusbetegnelse, som indeholder teksten til en given id. Hvad teksten til id=3 og id=5?
- Kan man sammenligne to kolonner? Find alle kunder, hvor navnet kommer efter byen i alfabetet.
- Find varerne, der koster 4,60 kr. og derunder.
Her tænker du på “Afgrænsning med WHERE”