Sdílet prostřednictvím


Konvence pro kombinování podmínek hledání v podokně kritérií (vizuální databázové nástroje)

platí pro:SQL Server

Můžete vytvářet dotazy, které obsahují libovolný počet podmínek hledání, které jsou propojené s libovolným počtem operátorů AND a OR. Dotaz, který kombinuje klauzule AND a OR, se může stát složitým. Je proto užitečné pochopit, jak se takový dotaz interpretuje při jeho spuštění a jak je reprezentován v podokně kritérií a podokně SQL .

Poznámka

Podrobnosti o podmínkách hledání, které obsahují pouze jeden operátor AND nebo OR, najdete v tématu Určení více podmínek hledání pro jeden sloupec (Visual Database Tools) a Zadat více podmínek hledání pro více sloupců (Visual Database Tools).

Níže najdete informace o:

  • Priorita funkce AND a OR v dotazech, které obsahují obojí.

  • Jak se podmínky v klauzulích AND a OR logicky vztahují k sobě.

  • Jak návrhář dotazů a zobrazení představuje dotazy v podokně kritérií, které obsahují jak operátor AND, tak OR.

Abychom vám pomohli pochopit následující diskuzi, představte si, že pracujete s tabulkou employee obsahující sloupce hire_date, job_lvla status. V příkladech se předpokládá, že potřebujete znát informace, například jak dlouho zaměstnanec pracoval se společností (to znamená, jaké je datum přijetí zaměstnance), jaký typ práce zaměstnanec provádí (jaká je úroveň pracovní pozice) a stav zaměstnance (například vyřazený).

Priorita operátoru AND a OR

Při spuštění dotazu vyhodnocuje nejprve klauzule propojené s operátorem AND a potom ty, které jsou propojeny s operátorem OR.

Poznámka

Operátor NOT má přednost před operátorem AND i OR.

Pokud například chcete najít zaměstnance, kteří byli ve společnosti déle než pět let, v pracovních pozicích nižší úrovně nebo zaměstnanců s pracovními pozicemi střední úrovně bez ohledu na datum jejich přijetí, můžete vytvořit klauzuli WHERE, například:

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

Pokud chcete přepsat výchozí prioritu A před or, můžete do podokna SQL umístit závorky kolem konkrétních podmínek. Podmínky v závorkách se vždy vyhodnocují jako první. Pokud například chcete najít všechny zaměstnance, kteří byli se společností více než pět let v pracovních pozicích nižší nebo střední úrovně, můžete vytvořit klauzuli WHERE, například:

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

Spropitné

Doporučujeme, abyste při kombinování klauzulí AND a OR vždy zahrnuli závorky, a nespoléhat se na výchozí prioritu.

Jak AND funguje s více klauzulemi OR

Vysvětlení toho, jak spolu klauzule AND a OR souvisejí při kombinování, vám můžou pomoct při vytváření a pochopení složitých dotazů v Návrháři dotazů a zobrazení.

Pokud propojíte více podmínek pomocí funkce AND, použije se první sada podmínek propojených s operátorem AND na všechny podmínky v druhé sadě. Jinými slovy, podmínka spojená logickým operátorem AND s jinou podmínkou se aplikuje na všechny podmínky ve druhé sadě. Například následující reprezentace schématu ukazuje podmínku AND propojenou se sadou podmínek OR:

A AND (B OR C)  

Výše uvedená reprezentace je logicky ekvivalentní následující schematické reprezentaci, která ukazuje, jak se podmínka AND distribuuje do druhé sady podmínek:

(A AND B) OR (A AND C)  

Tento distribuční princip ovlivňuje způsob použití Návrháře dotazů a zobrazení. Představte si například, že hledáte všechny zaměstnance, kteří byli ve společnosti více než pět let v pracovních pozicích nižší nebo střední úrovně. Do příkazu v podokně SQL zadáte následující klauzuli WHERE:

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

Klauzule propojená s operátorem AND se vztahuje na obě věty propojené s operátorem OR. Explicitním způsobem, jak to vyjádřit, je opakovat podmínku AND jednou pro každou podmínku v klauzuli OR. Následující příkaz je explicitnější (a delší) než předchozí příkaz, ale je logicky ekvivalentní tomuto příkazu:

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

Zásada distribuce klauzulí AND na propojené klauzule OR se vztahuje bez ohledu na to, kolik jednotlivých podmínek se týká. Představte si například, že chcete najít zaměstnance vyšší nebo střední úrovně, kteří byli ve společnosti déle než pět let nebo jsou vyřazeni z důchodu. Klauzule WHERE může vypadat takto:

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

Po rozdělení podmínek spojených s operátorem AND bude vypadat klauzule WHERE takto:

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')  

Jak jsou v podokně kritérií reprezentovány klauzule Multiple AND a OR

Návrhář dotazu a zobrazení znázorňuje vaše podmínky hledání v podokně kritérií . V některých případech, které zahrnují více klauzulí propojených s operátory AND a OR, nemusí být reprezentace v podokně kritérií taková, jakou očekáváte. Kromě toho můžete zjistit, že příkaz SQL se změnil oproti tomu, co jste zadali, pokud upravíte dotaz v podokně kritérií nebo podokně diagramu.

Obecně platí, že tato pravidla určují, jak se klauzule AND a OR zobrazují v podokně kritérií:

  • Všechny podmínky propojené s operátorem AND se zobrazí ve sloupci mřížky Filtr nebo ve stejném sloupci Nebo....

  • Všechny podmínky spojené s NEBO zobrazí se v samostatných Nebo... sloupcích.

  • Pokud je logickým výsledkem kombinace klauzulí AND a OR, že klauzule AND se distribuuje do několika klauzulí OR, podokno kritéria to explicitně představuje opakováním klauzule AND tolikrát, kolikrát je to nutné.

V podokně SQL můžete například vytvořit vyhledávací podmínku, například následující, ve které mají dvě klauzule propojené s operátorem AND přednost před třetí propojenou s operátorem OR:

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

Návrhář dotazu a zobrazení představuje tuto klauzuli WHERE v podokně kritérií následujícím způsobem:

přednost klauzule OR v podokně kritérií

Pokud však mají propojené klauzule OR přednost před klauzulí AND, klauzule AND se opakuje pro každou klauzuli OR. To způsobí, že klauzule AND se distribuuje do každé klauzule OR. V podokně SQL můžete například vytvořit klauzuli WHERE, například:

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

Návrhář dotazu a zobrazení představuje tuto klauzuli WHERE v podokně kritérií následujícím způsobem:

Vícenásobné klauzule

Pokud propojené klauzule OR zahrnují pouze jeden datový sloupec, může Návrhář dotazu a zobrazení umístit celou klauzuli OR do jedné buňky mřížky, vyhnout se nutnosti opakování klauzule AND. V podokně SQL můžete například vytvořit klauzuli WHERE, například:

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

Návrhář dotazu a zobrazení představuje tuto klauzuli WHERE v podokně kritérií následujícím způsobem:

propojené klauzule OR definované v podokně kritérií

Pokud provedete změnu dotazu (například změníte jednu z hodnot v podokně kritéria), návrhář dotazu a zobrazení znovu vytvoří příkaz SQL v podokně SQL. Znovu vytvořený příkaz SQL bude vypadat podobně jako v podokně kritérií místo původního příkazu. Pokud například podokno kritérií obsahuje distribuované klauzule AND, výsledný příkaz v podokně SQL se znovu vytvoří s explicitními distribuovanými klauzulemi AND. Podrobnosti najdete v části "How AND Works with Multiple OR Clauses" dříve v tomto tématu.

Viz také

Specifikovat kritéria hledání (Visual Database Tools)