Afgrænsning med WHERE

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.

Videoen til denne lektion lidt ekstra tips undervejs

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'
Det viser sig, at Min Bix ligger i Hellerup

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'
Bemærk navnene. ‘Kagen’ er større end ‘K’, da ‘Kagen’ skal sorteres efter ‘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.