Condividi tramite


Convenzioni per la combinazione di condizioni di ricerca nel riquadro Criteri (Visual Database Tools)

si applica a:SQL Server

È possibile creare query che includono un numero qualsiasi di condizioni di ricerca, collegate a un numero qualsiasi di operatori AND e OR. Una query con una combinazione di clausole AND e OR può diventare complessa, pertanto è utile comprendere come viene interpretata quando viene eseguita e come è rappresentata nel riquadro Criteri e nel riquadro SQL .

Nota

Per informazioni dettagliate sulle condizioni di ricerca che contengono un solo operatore AND o OR, vedere Specificare più condizioni di ricerca per una colonna (Visual Database Tools) e Specificare più condizioni di ricerca per più colonne (Visual Database Tools).

Di seguito sono disponibili informazioni su:

  • Precedenza di AND e OR nelle query che contengono entrambi.

  • Relazione logica tra le condizioni nelle clausole AND e OR.

  • Come Progettazione query e viste rappresenta nel Riquadro dei criteri le query che contengono sia AND sia OR.

Per comprendere la discussione seguente, si supponga di usare una tabella employee contenente le colonne hire_date, job_lvle status. Gli esempi presuppongono che sia necessario conoscere informazioni, ad esempio per quanto tempo un dipendente ha lavorato con l'azienda (ovvero la data di assunzione del dipendente), il tipo di lavoro che il dipendente esegue (qual è il livello di lavoro) e lo stato del dipendente (ad esempio, ritirato).

Precedenza di AND e OR

Quando viene eseguita una query, valuta prima le clausole collegate a AND e quindi quelle collegate con OR.

Nota

L'operatore NOT ha la precedenza su AND e OR.

Ad esempio, per trovare i dipendenti che sono stati con l'azienda per più di cinque anni in posti di lavoro di livello inferiore o dipendenti con posti di lavoro di livello intermedio senza considerare la data di assunzione, è possibile costruire una clausola WHERE come la seguente:

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

Per eseguire l'override della precedenza predefinita di AND su OR, è possibile inserire parentesi intorno a condizioni specifiche nel riquadro SQL. Le condizioni tra parentesi vengono sempre valutate per prime. Ad esempio, per trovare tutti i dipendenti con la società più di cinque anni in posti di lavoro di livello inferiore o intermedio, è possibile costruire una clausola WHERE, ad esempio:

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

Consiglio

È consigliabile, per maggiore chiarezza, includere sempre parentesi quando si combinano clausole AND e OR anziché basarsi sulla precedenza predefinita.

Funzionamento di AND con più clausole OR

Il comprendere in che modo le clausole AND e OR sono correlate quando combinate consente di creare e comprendere query complesse nello Strumento di progettazione query e viste.

Se si collegano più condizioni usando AND, il primo set di condizioni collegato a AND si applica a tutte le condizioni nel secondo set. In altre parole, una condizione collegata con AND a un'altra condizione viene distribuita a tutte le condizioni nel secondo set. Ad esempio, la rappresentazione schema seguente mostra una condizione AND collegata a un set di condizioni OR:

A AND (B OR C)  

La rappresentazione precedente è logicamente equivalente alla rappresentazione schema seguente, che mostra come la condizione AND viene distribuita al secondo set di condizioni:

(A AND B) OR (A AND C)  

Questo principio di distribuzione influisce su come si utilizzano il Progettazione delle query e il Progettazione delle viste. Si supponga, ad esempio, di cercare tutti i dipendenti che sono stati con l'azienda più di cinque anni in posti di lavoro di livello inferiore o intermedio. Inserisci la seguente clausola WHERE nell'istruzione nel riquadro SQL.

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

La clausola collegata a AND si applica a entrambe le clausole collegate a OR. Un modo esplicito per esprimere questa operazione consiste nel ripetere la condizione AND una volta per ogni condizione nella clausola OR. L'istruzione seguente è più esplicita (e più lunga) rispetto all'istruzione precedente, ma è logicamente equivalente a essa:

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

Il principio di distribuzione delle clausole AND alle clausole OR collegate si applica indipendentemente dal numero di singole condizioni coinvolte. Si supponga, ad esempio, di voler trovare dipendenti di livello superiore o intermedio con più di cinque anni o che si ritirino. La clausola WHERE potrebbe essere simile alla seguente:

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

Dopo la distribuzione delle condizioni collegate con AND, la clausola WHERE sarà simile alla seguente:

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

Come vengono rappresentate più clausole AND e OR nel riquadro Criteri

La Progettazione di query e viste rappresenta le condizioni di ricerca nel riquadro criteri di . Tuttavia, in alcuni casi che coinvolgono più clausole collegate a AND e OR, la rappresentazione nel riquadro Criteri potrebbe non essere quella prevista. Inoltre, se modifichi la query nel riquadro Criteri o nel riquadro Diagramma, potresti scoprire che la tua istruzione SQL è stata cambiata rispetto a quella che hai inserito.

In generale, queste regole determinano la modalità di visualizzazione delle clausole AND e OR nel riquadro Criteri:

  • Tutte le condizioni collegate con AND appaiono nella colonna filtro della griglia o nella stessa colonna Or....

  • Tutte le condizioni collegate a OR appaiono in colonne separate Or....

  • Se il risultato logico di una combinazione di clausole AND e OR è che AND viene distribuito in più clausole OR, il riquadro Criteri rappresenta questa operazione in modo esplicito ripetendo la clausola AND quante volte necessario.

Nel riquadro SQL, ad esempio, è possibile creare una condizione di ricerca, ad esempio la seguente, in cui due clausole collegate a AND hanno la precedenza su un terzo collegato con OR:

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

Il Progettazione query e viste rappresenta questa clausola WHERE nel riquadro Criteri come segue:

precedenza della clausola OR nel riquadro Criteri

Tuttavia, se le clausole OR collegate hanno la precedenza su una clausola AND, la clausola AND viene ripetuta per ogni clausola OR. In questo modo la clausola AND viene distribuita a ogni clausola OR. Nel riquadro SQL, ad esempio, è possibile creare una clausola WHERE, ad esempio:

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

Il progettista di query e visualizzazioni rappresenta questa clausola WHERE nel riquadro Criteri come indicato di seguito:

clausole E e O multiple nel riquadro Criteri

Se le clausole OR congiunte coinvolgono una sola colonna di dati, il Progettista di query e viste può inserire l'intera clausola OR in una singola cella della griglia, evitando la necessità di ripetere la clausola AND. Nel riquadro SQL, ad esempio, è possibile creare una clausola WHERE, ad esempio:

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

Progettazione query e progettazione viste rappresentano questa clausola WHERE nel riquadro Criteri come segue:

Clausole OR collegate definite nel Riquadro dei criteri

Se si apporta una modifica alla query, ad esempio modificando uno dei valori nel riquadro Criteri, Progettazione Query e Progettazione Viste ricrea l'istruzione SQL nel riquadro SQL. L'istruzione SQL ricreata sarà simile alla visualizzazione del riquadro Criteri anziché all'istruzione originale. Ad esempio, se il riquadro Criteri contiene clausole AND distribuite, l'istruzione risultante nel riquadro SQL verrà ricreata con clausole AND distribuite esplicite. Per informazioni dettagliate, vedere "Funzionamento di AND con più clausole OR" all'inizio di questo argomento.

Vedere anche

specificare i criteri di ricerca (Visual Database Tools)