Med logiske operatorer kan du kombinere flere betingelser i en SQL-forespørgsel. Det er nyttigt, når du skal finde rækker i en tabel, hvor værdier ligger i et interval eller, når du fremsøger rækker ud fra værdier i flere kolonner.
Logiske operatorer
Operatorerne AND og OR kaldes for logiske operatorer, da de bunder i den logiske aritmetik. I den logiske aritmetik er et udsagn enten SANDT eller FALSK, på engelsk TRUE eller FALSE. I SQL-sproget er de logiske operatorer AND og OR de mest brugte og anvendelige.
AND
Logisk OG læses som: Jeg er SAND, når det første udsagn OG det andet udsagn er SAND.
OR
Logisk ELLER læses som: Jeg er SAND, når mindst et af udsagnene er SAND.
Det kræver nok lige nogle eksempler:
1=1 AND 2=2 – SAND da begge udsagn er sande.
1>0 AND 2>3 – FALSK da andet udsagn er falsk.
2>3 AND 1>0 – FALSK da første udsagn er falsk.
2>3 AND 1=0 – FALSK da begge udsagn er falske.
Bemærk, at ud af fire mulige kombinationer giver AND kun SAND i det ene tilfælde, hvor begge udsagn er sande.
1=1 OR 2=2 – SAND da mindst et udsagn (faktisk begge) er sande.
1>0 OR 2>3 – SAND da første udsagn er sandt.
2>3 OR 1>0 – SAND da andet udsagn er sandt.
2>3 OR 1=0 – FALSK da begge udsagn er falske.
For OR gælder det, at ud af fire mulige kombinationer er tre af dem sande.
Brug AND-operator
Lad os nu få fingrene ned i SQL Server. Start din Management Studio op, forbind til SQL Kursus databasen. Find varer, der hedder noget med ‘boble’ og koster mere end 1,10 kr.
SELECT * FROM Vare WHERE Varebetegnelse LIKE 'Boble%' AND Pris > 1.1
Betingelserne kan benytte samme kolonne. Find alle varer, hvor prisen er mellem 1,00 og 5,00 kroner:
SELECT * FROM Vare WHERE Pris >= 1 AND Pris <= 5
Du kan selvfølgelig have mere end to betingelser. Find varer, der hedder noget med ‘boble’, og prisen er mellem 1,00 og 5,00 kroner:
SELECT * FROM Vare WHERE Varebetegnelse LIKE 'Boble%' AND Pris >= 1 AND Pris <= 5
Brug OR-operator
Lad os kigge lidt på OR-operatoren. Find varer, hvor prisen er mindre end 5,00 kr. eller mere end 40,00 kr.:
SELECT * FROM Vare WHERE Pris < 5 OR Pris > 40
Find varerne af typen Bobleplast og alle de varer, der koster over 100,00 kr. Lad dig ikke narre af, at jeg skriver ‘og’ – jeg mener faktisk ‘eller’:
SELECT * FROM Vare WHERE Varebetegnelse LIKE 'Bobleplast%' OR Pris > 100
Du kan naturligvis bruge mere end to betingelser med OR. Lad os udvide ovenstående med de varer, der koster under 5,00 kr.
SELECT * FROM Vare WHERE Varebetegnelse LIKE 'Bobleplast%' OR Pris > 100 OR Pris < 5
Parenteser hjælper med at prioritere
Du kan sikkert sagtens forestille dig, at du gerne må bruge både AND og OR i samme forespørgsel. Hvis du gør det, kan det være relevant at vide, hvilken operator, der har prioritet over den anden.
Jeg har ændret lidt i forespørgslen ovenfor:
SELECT * FROM Vare WHERE Varebetegnelse LIKE 'Bobleplast%' OR Pris > 5 AND Pris < 100
Resultatet afspejler det faktum, at AND har højest prioritet. Vi får altså varerne, der hedder noget med Bobleplast, eller hvor priserne ligger mellem 5 og 100 kr.
En parentes omkring AND-delen af betingelsen giver det samme resultat:
SELECT * FROM Vare WHERE Varebetegnelse LIKE 'Bobleplast%' OR (Pris > 5 AND Pris < 100)
AND har højere prioritet end OR
Ved at sætte parentes om første del af betingelsen, spørger vi efter rækker med Bobleplast og alle dem med pris over 5 kr., dertil skal prisen være under 100 kr. blandt alle varer. I resultatet forsvinder rækken med Bobleplast over 100 kr.
SELECT * FROM Vare WHERE (Varebetegnelse LIKE 'Bobleplast%' OR Pris > 5) AND Pris < 100
Parentes ændrer betingelsernes prioritet
Prøv selv
- Find kunder, der starter med K og ikke har en email.
- Find kunder, der bor i Viborg eller Ishøj.
- Find alle boblekuverter mellem 1,00 kr. og 1,20 kr. og papkasser mellem 4,00 kr. og 7,00 kr. alle priser inklusive.
- Find alle kunder hvor vi kender telefonnummer, men mangler email.