Sdílet prostřednictvím


Konvence pro kombinování podmínek hledání v podokně Kritéria (Visual Database Tools)

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 AND operátorů a OR operátory. Dotaz s kombinací AND a OR klauzulí se může stát složitým, takže je užitečné pochopit, jak se takový dotaz interpretuje při jeho spuštění a jak je takový dotaz reprezentován v podokně kritérií (Visual Database Tools) a podokně SQL (Visual Database Tools) (Visual Database Tools).

Poznámka

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

V tomto článku najdete informace o:

  • Priorita ANDOR dotazů, které obsahují obojí.

  • Jak podmínky v AND klauzulích OR a klauzule vzájemně souvisejí logicky.

  • Jak Návrhář dotazů a zobrazení představuje v dotazech podokna Kritéria, které obsahují obojí AND i OR.

Abyste pochopili následující diskuzi, představte si, že pracujete s tabulkou employee obsahující sloupce hire_datea job_lvlstatus. 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 ANDa potom ty, které jsou propojeny s OR.

Poznámka

Operátor NOT má přednost před oběma AND a OR.

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

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

Pokud chcete přepsat výchozí prioritu AND 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 ve společnosti více než pět let, můžete vytvořit WHERE klauzuli, například:

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

Spropitné

Proto doporučujeme, abyste při kombinování a klauzulí vždy při kombinování AND a OR klauzulích vždy zahrnuli závorky místo toho, abyste se spoléhali na výchozí prioritu.

Jak FUNKCE AND funguje s několika klauzulemi OR

Pochopení, jak AND a OR klauzule souvisí v kombinaci, vám může pomoct s vytvářením a pochopením složitých dotazů v Návrháři dotazů a zobrazení.

Pokud propojíte více podmínek pomocí AND, použije se první sada podmínek propojených se AND všemi podmínkami ve druhé sadě. Jinými slovy, podmínka propojená s AND jinou podmínkou se distribuuje do všech podmínek ve druhé sadě. Například následující reprezentace schématu ukazuje podmínku AND propojenou se sadou OR podmínek:

A AND (B OR C)

Výše uvedená reprezentace je logicky ekvivalentní následující schematické reprezentaci, která ukazuje, jak AND se podmínka 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í WHERE klauzuli:

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

Klauzule propojená AND s platí pro obě klauzule propojené s OR. Explicitní způsob, 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 AND klauzulí na propojené OR klauzule 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í AND podmínek propojených s WHERE klauzulí bude klauzule vypadat 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')

Znázornění klauzulí Multiple AND a OR v podokně Kritéria

Návrhář dotazů a zobrazení představuje vaše podmínky hledání v podokně kritérií (Visual Database Tools). V některýchpřípadechch ANDOR Pokud navíc upravíte dotaz v podokně Kritéria nebo podokně diagramu (Visual Database Tools), můžete zjistit, že příkaz SQL byl změněn z toho, co jste zadali.

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

  • Všechny podmínky propojené se AND zobrazí ve sloupci Mřížka filtru nebo ve stejném sloupci Or... .

  • Všechny podmínky propojené se OR zobrazí v samostatných sloupcích Or... (Nebo... ).

  • Pokud je logickým výsledkem kombinace AND a OR klauzulí, že AND se distribuuje do několika OR klauzulí, podokno Kritéria to explicitně představuje opakováním AND klauzule 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 AND předností před třetí propojenou OR:

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

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

Snímek obrazovky s prioritou klauzule OR v podokně Kritéria

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

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

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

Snímek obrazovky s několika klauzulemi AND a OR v podokně Kritéria

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

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

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

Snímek obrazovky s propojenými klauzulemi OR definovanými v podokně Kritéria

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 se podobá zobrazení podokna Kritéria místo původního příkazu. Pokud například podokno Kritéria obsahuje distribuované AND klauzule, výsledný příkaz v podokně SQL se znovu vytvoří s explicitními distribuovanými AND klauzulemi. Podrobnosti najdete v tématu Jak A funguje s více klauzulemi OR dříve v tomto článku.