Convenzioni per la combinazione delle condizioni di ricerca nel riquadro Criteri (Visual Database Tools)Conventions for Combining Search Conditions in the Criteria Pane (Visual Database Tools)

È possibile creare query con qualsiasi numero di condizioni di ricerca, collegate con qualsiasi numero di operatori AND e OR.You can create queries that include any number of search conditions, linked with any number of AND and OR operators. Poiché una query con una combinazione di clausole AND e OR può diventare complessa, è utile capire come viene interpretata durante la sua esecuzione e come viene rappresentata nel riquadro Criteri e nel riquadro SQL.A query with a combination of AND and OR clauses can become complex, so it is helpful to understand how such a query is interpreted when you execute it, and how such a query is represented in the Criteria Pane and SQL Pane.

Più avanti sarà possibile reperire informazioni relative a:Below you will find information about:

  • Precedenza di AND e OR nelle query in cui sono presenti entrambi.The precedence of AND and OR in queries that contain both.

  • Modo in cui le condizioni nelle clausole AND e OR stabiliscono una relazione logica reciproca.How the conditions in AND and OR clauses relate logically to one another.

  • Modo in cui le query che contengono AND e OR vengono rappresentate in Progettazione query e Progettazione viste nel riquadro Criteri.How the Query and View Designer represents in the Criteria Pane queries that contain both AND and OR.

Per semplificare la comprensione degli argomenti illustrati di seguito, si supponga di utilizzare una tabella employee che contiene le colonne hire_date, job_lvle status.To help you understand the discussion below, imagine that you are working with an employee table containing the columns hire_date, job_lvl, and status. Negli esempi si ipotizza la necessità di ottenere informazioni sull'anzianità di servizio dei dipendenti (ovvero la data di assunzione di un dipendente), sul tipo di mansione svolta da un dipendente (il livello dell'attività) e sullo stato del dipendente (ad esempio se è in pensione).The examples assume that you need to know information such as how long an employee has worked with the company (that is, what the employee's hire date is), what type of job the employee performs (what the job level is), and the employee's status (for example, retired).

Precedenza di AND e ORPrecedence of AND and OR

Quando viene eseguita una query, in primo luogo vengono valutate le clausole collegate con l'operatore AND e quindi quelle collegate con OR.When a query is executed, it evaluates first the clauses linked with AND, and then those linked with OR.

Nota

L'operatore NOT ha la precedenza sia rispetto a AND che rispetto a OR.The NOT operator takes precedence over both AND and OR.

Per trovare, ad esempio, i dipendenti assunti da oltre cinque anni in attività di basso livello o dipendenti con un livello di attività intermedio indipendentemente dalla data di assunzione, è possibile costruire una clausola WHERE come la seguente:For example, to find either employees who have been with the company for more than five years in lower-level jobs or employees with middle-level jobs without regard for their hire date, you can construct a WHERE clause such as the following:

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

Per modificare la precedenza predefinita dell'operatore AND rispetto all'operatore OR, è possibile delimitare con parentesi specifiche condizioni nel riquadro SQL.To override the default precedence of AND over OR, you can put parentheses around specific conditions in the SQL pane. Le condizioni fra parentesi vengono sempre valutate per prime.Conditions in parentheses are always evaluated first. Per trovare, ad esempio, tutti i dipendenti che appartengono a una società da oltre cinque anni con livello di attività basso o intermedio, è possibile costruire una clausola WHERE come la seguente:For example, to find all employees who have been with the company more than five years in either lower or middle-level jobs, you can construct a WHERE clause such as the following:

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

Per questioni di chiarezza, è sempre consigliabile inserire parentesi quando si combinano clausole AND e OR invece di fare semplicemente affidamento sulla precedenza predefinita.It is recommended that, for clarity, you always include parentheses when combining AND and OR clauses instead of relying on the default precedence.

Funzionamento di AND con più clausole ORHow AND Works with Multiple OR Clauses

La comprensione dei modi di correlazione delle clausole AND e OR combinate può risultare di aiuto nella costruzione e comprensione di query complesse in Progettazione query e Progettazione viste.Understanding how AND and OR clauses are related when combined can help you construct and understand complex queries in the Query and View Designer.

Se vengono collegate più condizioni con AND, il primo set di condizioni collegato con AND viene applicato a tutte le condizioni nel secondo set.If you link multiple conditions using AND, the first set of conditions linked with AND applies to all the conditions in the second set. In altri termini, una condizione collegata con AND a un'altra condizione viene distribuita a tutte le condizioni nel secondo set.In other words, a condition linked with AND to another condition is distributed to all the conditions in the second set. La seguente rappresentazione schematica mostra, ad esempio, una condizione AND collegata a un set di condizioni OR:For example, the following schematic representation shows an AND condition linked to a set of OR conditions:

A AND (B OR C)  

La precedente rappresentazione è logicamente equivalente alla seguente rappresentazione schematica, che mostra come la condizione AND viene distribuita nel secondo set di condizioni:The representation above is logically equivalent to the following schematic representation, which shows how the AND condition is distributed to the second set of conditions:

(A AND B) OR (A AND C)  

Questo principio di distribuzione influisce sull'utilizzo di Progettazione query e Progettazione viste.This distributive principle affects how you use the Query and View Designer. Si supponga, ad esempio, di dover cercare tutti i dipendenti assunti da oltre cinque anni con livello di attività basso o intermedio.For example, imagine that you are looking for all employees who have been with the company more than five years in either lower or middle-level jobs. È possibile immettere la seguente clausola WHERE nell'istruzione nel riquadro SQL:You enter the following WHERE clause into the statement in the SQL pane:

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

La clausola collegata con AND si applica a entrambe le clausole collegate con OR.The clause linked with AND applies to both clauses linked with OR. Un modo esplicito per esprimere tale istruzione consiste nel ripetere la condizione AND per ogni condizione nella clausola OR.An explicit way to express this is to repeat the AND condition once for each condition in the OR clause. La seguente istruzione è più esplicita (e lunga) rispetto all'istruzione precedente, ma è logicamente equivalente:The following statement is more explicit (and longer) than the previous statement, but is logically equivalent to it:

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 condizioni interessate.The principle of distributing AND clauses to linked OR clauses applies no matter how many individual conditions are involved. Si supponga, ad esempio, di voler trovare i dipendenti di livello superiore o intermedio assunti da oltre cinque anni o che sono in pensione.For example, imagine that you want to find higher or middle-level employees who have been with the company more than five years or are retired. La clausola WHERE potrebbe essere analoga alla seguente:The WHERE clause might look like this:

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

Una volta distribuite le condizioni collegate con AND, la clausola WHERE assumerà questo aspetto:After the conditions linked with AND have been distributed, the WHERE clause will look like this:

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

Rappresentazione di più clausole AND e OR nel riquadro CriteriHow Multiple AND and OR Clauses Are Represented in the Criteria Pane

Le condizioni di ricerca vengono rappresentate nel riquadro Criteridi Progettazione query e Progettazione viste.The Query and View Designer represents your search conditions in the Criteria Pane. In alcuni casi che riguardano più clausole collegate con AND e OR tuttavia la rappresentazione nel riquadro Criteri potrebbe risultare diversa da quella desiderata.However, in some cases that involve multiple clauses linked with AND and OR, the representation in the Criteria Pane might not be what you expect. Inoltre, se si modifica una query nel riquadro Criteri o nel riquadro Diagramma, si potrebbe notare che l'istruzione SQL è diversa rispetto a quella specificata.In addition, if you modify your query in the Criteria Pane or Diagram Pane, you might find that your SQL statement has been changed from what you entered.

In generale, queste regole determinano il modo in cui le clausole AND e OR vengono visualizzate nel riquadro Criteri:In general, these rules dictate how AND and OR clauses appear in the Criteria Pane:

  • Tutte le condizioni collegate con AND vengono visualizzate nella colonna Filtro della griglia o nella stessa colonna Or... .All conditions linked with AND appear in the Filter grid column or in the same Or... column.

  • Tutte le condizioni collegate con OR vengono visualizzate in colonne Or... separate.All conditions linked with OR appear in separate Or... columns.

  • Se il risultato logico di una combinazione di clausole AND e OR è che la clausola AND viene distribuita in più clausole OR, nel riquadro Criteri questa situazione viene rappresentata in modo esplicito ripetendo la clausola AND il numero di volte necessario.If the logical result of a combination of AND and OR clauses is that the AND is distributed into several OR clauses, the Criteria Pane represents this explicitly by repeating the AND clause as many times as necessary.

Nel riquadro SQL si potrebbe creare, ad esempio, una condizione di ricerca come la seguente, in cui due clausole collegate con AND hanno la precedenza rispetto alla terza collegata con OR:For example, in the SQL pane you might create a search condition such as the following, in which two clauses linked with AND take precedence over a third one linked with OR:

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

In Progettazione query e Progettazione viste questa clausola WHERE viene rappresentata nel riquadro Criteri come indicato di seguito:The Query and View Designer represents this WHERE clause in the Criteria Pane as follows:

Precedenza della clausola OR nel riquadro CriteriOR clause precedence in the Criteria Pane

Tuttavia, se la clausola OR collegata ha la precedenza rispetto a una clausola AND, la clausola AND viene ripetuta per ogni clausola OR.However, if the linked OR clauses take precedence over an AND clause, the AND clause is repeated for each OR clause. In questo modo la clausola AND viene distribuita per ogni clausola OR.This causes the AND clause to be distributed to each OR clause. Nel riquadro SQL si potrebbe creare ad esempio una clausola WHERE come la seguente:For example, in the SQL pane you might create a WHERE clause such as the following:

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

In Progettazione query e Progettazione viste questa clausola WHERE viene rappresentata nel riquadro Criteri come indicato di seguito:The Query and View Designer represents this WHERE clause in the Criteria Pane as follows:

Più clausole AND e OR nel riquadro CriteriMultiple AND and OR clauses in the Criteria Pane

Se le clausole OR collegate interessano soltanto una colonna di dati, Progettazione query e Progettazione viste consentono di inserire l'intera clausola OR in una singola cella della griglia, eliminando la necessità di ripetere la clausola AND.If the linked OR clauses involve only one data column, the Query and View Designer can place the entire OR clause into a single cell of the grid, avoiding the need to repeat the AND clause. Nel riquadro SQL si potrebbe creare ad esempio una clausola WHERE come la seguente:For example, in the SQL pane you might create a WHERE clause such as the following:

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

In Progettazione query e Progettazione viste questa clausola WHERE viene rappresentata nel riquadro Criteri come indicato di seguito:The Query and View Designer represents this WHERE clause in the Criteria Pane as follows:

Clausole OR collegate definite nel riquadro CriteriLinked OR clauses defined in the Criteria Pane

Se si apporta una modifica alla query, ad esempio modificando uno dei valori nel riquadro Criteri, in Progettazione query e Progettazione viste l'istruzione SQL verrà ricreata nel riquadro SQL.If you make a change to the query (such as changing one of the values in the Criteria Pane), the Query and View Designer recreates the SQL statement in the SQL pane. L'istruzione SQL ricreata sarà analoga alla visualizzazione del riquadro Criteri invece che all'istruzione originaria.The recreated SQL statement will resemble the Criteria Pane display rather than your original statement. Se ad esempio il riquadro Criteri contiene clausole AND distribuite, l'istruzione risultante nel riquadro SQL verrà ricreata con clausole AND distribuite esplicitamente.For example, if the Criteria Pane contains distributed AND clauses, the resulting statement in the SQL pane will be recreated with explicit distributed AND clauses. Per ulteriori informazioni, tornare a "Funzionamento di AND con più clausole OR" in questo argomento.For details, see "How AND Works with Multiple OR Clauses" earlier in this topic.

Vedere ancheSee Also

Specificare i criteri di ricerca &#40;Visual Database Tools&#41;Specify Search Criteria (Visual Database Tools)