Konventioner för att kombinera sökvillkor i fönstret Villkor (Visual Database Tools)

gäller för:SQL Server

Du kan skapa frågor som innehåller valfritt antal sökvillkor, länkade med valfritt antal AND och OR operatorer. En fråga med en kombination av AND och OR -satser kan bli komplex, så det är bra att förstå hur en sådan fråga tolkas när du kör den och hur en sådan fråga representeras i villkorsfönstret (Visual Database Tools) och SQL-fönstret (Visual Database Tools).

Anmärkning

Mer information om sökvillkor som endast innehåller en AND eller OR flera operatorer finns i Ange flera sökvillkor för en kolumn (Visual Database Tools) och Ange flera sökvillkor för flera kolumner (Visual Database Tools).

I den här artikeln hittar du information om:

  • Prioriteten AND för och OR i frågor som innehåller båda.

  • Hur villkoren i AND och OR -satserna relaterar logiskt till varandra.

  • Så här representerar fråge- och vydesignern i fönstret Villkor frågor som innehåller både AND och OR.

Anta att du arbetar med en employee tabell som innehåller kolumnerna hire_date, job_lvloch statusför att förstå diskussionen nedan. Exemplen förutsätter att du behöver veta information, till exempel hur länge en anställd har arbetat med företaget (det vill säga vad den anställdes anställningsdatum är), vilken typ av jobb den anställde utför (vad jobbnivån är) och medarbetarens status (till exempel pensionerad).

Prioritet för AND och OR

När en fråga körs utvärderas först de satser som är länkade med ANDoch sedan de som är länkade till OR.

Anmärkning

Operatorn NOT har företräde framför både AND och OR.

Om du till exempel vill hitta antingen anställda som har arbetat på företaget i mer än fem år med lägre jobb eller anställda med mellannivåjobb utan hänsyn till anställningsdatumet, kan du skapa en WHERE klausul som följande:

WHERE
   hire_date < '01/01/95' AND
   job_lvl = 100 OR
   job_lvl = 200

Om du vill åsidosätta standardprioriteten AND över ORkan du placera parenteser runt specifika villkor i SQL-fönstret. Villkor inom parenteser utvärderas alltid först. Om du till exempel vill hitta alla anställda som har arbetat med företaget i mer än fem år i jobb på lägre eller mellannivå kan du skapa en WHERE sats som följande:

WHERE
   hire_date < '01/01/95' AND
   (job_lvl = 100 OR job_lvl = 200)

Tips/Råd

Vi rekommenderar att du för tydlighetens skull alltid inkluderar parenteser när du kombinerar AND och OR satser i stället för att förlita dig på standardprioriteten.

Så här fungerar AND med flera OR-satser

Att förstå hur AND och OR satser är relaterade när de kombineras kan hjälpa dig att konstruera och förstå komplexa frågor i fråge- och vydesignern.

Om du länkar flera villkor med , ANDgäller den första uppsättningen villkor som är länkade med AND för alla villkor i den andra uppsättningen. Med andra ord distribueras ett villkor som är kopplat AND till ett annat villkor till alla villkor i den andra uppsättningen. Följande schemarepresentation visar till exempel ett AND villkor som är kopplat till en uppsättning OR villkor:

A AND (B OR C)

Representationen ovan motsvarar logiskt följande schemarepresentation, som visar hur villkoret AND distribueras till den andra uppsättningen villkor:

(A AND B) OR (A AND C)

Den här distributionsprincipen påverkar hur du använder fråge- och vydesignern. Anta till exempel att du letar efter alla anställda som har arbetat i företaget i mer än fem år i antingen lägre eller mellannivåjobb. Du anger följande WHERE sats i -instruktionen i SQL-fönstret:

WHERE (hire_date < '01/01/95') AND
   (job_lvl = 100 OR job_lvl = 200)

Satsen som är länkad med AND gäller för båda satserna som är länkade till OR. Ett explicit sätt att uttrycka detta är att upprepa villkoret AND en gång för varje villkor i OR -satsen. Följande instruktion är mer explicit (och längre) än föregående -instruktion, men är logiskt likvärdig med den:

WHERE (hire_date < '01/01/95') AND
  (job_lvl = 100) OR
  (hire_date < '01/01/95') AND
  (job_lvl = 200)

Principen om att AND distribuera klausuler till länkade OR klausuler gäller oavsett hur många enskilda villkor som ingår. Anta till exempel att du vill hitta anställda på högre eller mellannivå som har varit i företaget i mer än fem år eller har gått i pension. Satsen WHERE kan se ut så här:

WHERE
   (job_lvl = 200 OR job_lvl = 300) AND
   (hire_date < '01/01/95') OR (status = 'R')

När villkoren som är kopplade till AND har distribuerats WHERE ser satsen ut så här:

WHERE
   (job_lvl = 200 AND hire_date < '01/01/95') OR
   (job_lvl = 200 AND status = 'R') OR
   (job_lvl = 300 AND hire_date < '01/01/95') OR
   (job_lvl = 300 AND status = 'R')

Hur flera AND- och OR-satser representeras i fönstret Villkor

Fråge- och vydesignern representerar dina sökvillkor i villkorsfönstret (Verktyg för visuell databas). Men i vissa fall som omfattar flera satser som är länkade till AND och ORkanske representationen i fönstret Villkor inte är vad du förväntar dig. Om du ändrar din fråga i fönstret Villkor eller Diagram (Visual Database Tools) kan det hända att SQL-instruktionen har ändrats från det du angav.

I allmänhet avgör dessa regler hur AND och OR satser visas i fönstret Villkor:

  • Alla villkor som är länkade med AND visas i kolumnen Filterrutnät eller i samma kolumn eller...

  • Alla villkor som är länkade med OR visas i separata eller... kolumner.

  • Om det logiska resultatet av en kombination av AND och OR -satser är att AND är distribuerat till flera OR satser, representerar fönstret Villkor detta explicit genom att upprepa AND satsen så många gånger som behövs.

I SQL-fönstret kan du till exempel skapa ett sökvillkor, till exempel följande, där två satser som är länkade med AND har företräde framför en tredje som är länkad till OR:

WHERE (hire_date < '01/01/95') AND
  (job_lvl = 100) OR
  (status = 'R')

Fråge- och vydesignern representerar den här WHERE satsen i fönstret Villkor enligt följande:

Skärmbild av OR-satsprioriteten i fönstret Villkor.

Men om de länkade OR satserna har företräde framför en AND -sats AND upprepas satsen för varje OR sats. Detta gör AND att satsen distribueras till varje sats OR . I SQL-fönstret kan du till exempel skapa en WHERE sats, till exempel följande:

WHERE (hire_date < '01/01/95') AND
  ( (job_lvl = 100) OR
  (status = 'R') )

Fråge- och vydesignern representerar den här WHERE satsen i fönstret Villkor enligt följande:

Skärmbild av flera AND- och OR-satser i fönstret Villkor.

Om de länkade OR satserna bara omfattar en datakolumn kan fråge- och vydesignern placera hela OR satsen i en enda cell i rutnätet, så att du inte behöver upprepa AND satsen. I SQL-fönstret kan du till exempel skapa en WHERE sats, till exempel följande:

WHERE (hire_date < '01/01/95') AND
  ((status = 'R') OR (status = 'A'))

Fråge- och vydesignern representerar den här WHERE satsen i fönstret Villkor enligt följande:

Skärmbild av länkade OR-satser som definierats i fönstret Villkor.

Om du gör en ändring i frågan (till exempel ändra ett av värdena i fönstret Villkor) återskapar Fråge- och vydesignern SQL-instruktionen i SQL-fönstret. Den återskapade SQL-instruktionen liknar fönstret Villkor i stället för den ursprungliga instruktionen. Om fönstret Villkor till exempel innehåller distribuerade AND satser återskapas den resulterande instruktionen i SQL-fönstret med explicita distribuerade AND satser. Mer information finns i Hur OCH fungerar med flera OR-satser tidigare i den här artikeln.