Condizione di ricerca (Transact-SQL)

Combinazione di uno o più predicati tramite gli operatori logici AND, OR e NOT.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

< search_condition > ::= 
    { [ NOT ] <predicate> | ( <search_condition> ) } 
    [ { AND | OR } [ NOT ] { <predicate> | ( <search_condition> ) } ] 
[ ,...n ] 
<predicate> ::= 
    { expression { = | < > | ! = | > | > = | ! > | < | < = | ! < } expression 
    | string_expression [ NOT ] LIKE string_expression 
  [ ESCAPE 'escape_character' ] 
    | expression [ NOT ] BETWEEN expression AND expression 
    | expression IS [ NOT ] NULL 
    | CONTAINS 
    ( { column | * } , '< contains_search_condition >' ) 
    | FREETEXT ( { column | * } , 'freetext_string' ) 
    | expression [ NOT ] IN ( subquery | expression [ ,...n ] ) 
    | expression { = | < > | ! = | > | > = | ! > | < | < = | ! < } 
  { ALL | SOME | ANY} ( subquery ) 
    | EXISTS ( subquery )     } 

Argomenti

  • <search_condition>
    Specifica le condizioni per le righe restituite nel set dei risultati di un'istruzione SELECT, di un'espressione di query o di una sottoquery. Per un'istruzione UPDATE specifica le righe da aggiornare. Per un'istruzione DELETE specifica le righe da eliminare. Non sussiste alcun limite per il numero di predicati che è possibile includere in una condizione di ricerca di un'istruzione Transact-SQL.

  • NOT
    Nega l'espressione booleana specificata dal predicato. Per ulteriori informazioni, vedere NOT (Transact-SQL).

  • AND
    Combina due condizioni e restituisce TRUE quando entrambe le condizioni sono TRUE. Per ulteriori informazioni, vedere AND (Transact-SQL).

  • OR
    Combina due condizioni e restituisce TRUE quando una delle due condizioni è TRUE. Per ulteriori informazioni, vedere OR (Transact-SQL).

  • < predicate >
    Espressione che restituisce TRUE, FALSE o UNKNOWN.

  • expression
    Nome di colonna, costante, funzione, variabile, sottoquery scalare o qualsiasi combinazione di costanti, funzioni e nomi di colonna collegati da uno o più operatori oppure da una sottoquery. L'espressione può inoltre includere l'espressione CASE.

    [!NOTA]

    Quando si fa riferimento ai tipi di dati carattere Unicode nchar, nvarchar e ntext, "expression" deve essere preceduto dalla lettera maiuscola "N". Se la lettera "N" non è specificata, in SQL Server la stringa viene convertita in base alla tabella codici corrispondente alle regole di confronto predefinite del database o della colonna. Tutti i caratteri non inclusi nella tabella codici vengono persi.

  • =
    Operatore utilizzato per verificare l'uguaglianza di due espressioni.

  • <>
    Operatore utilizzato per verificare la disuguaglianza di due espressioni.

  • !=
    Operatore utilizzato per verificare la disuguaglianza di due espressioni.

  • >
    Operatore utilizzato per verificare che un'espressione sia maggiore di un'altra.

  • >=
    Operatore utilizzato per verificare che un'espressione sia maggiore o uguale a un'altra.

  • !>
    Operatore utilizzato per verificare che un'espressione non sia maggiore di un'altra.

  • <
    Operatore utilizzato per verificare che un'espressione sia minore di un'altra.

  • <=
    Operatore utilizzato per verificare che un'espressione sia minore o uguale a un'altra.

  • !<
    Operatore utilizzato per verificare che un'espressione non sia minore di un'altra.

  • string_expression
    Stringa di caratteri e caratteri jolly.

  • [ NOT ] LIKE
    Indica che la successiva stringa di caratteri deve essere utilizzata come criterio di ricerca. Per ulteriori informazioni, vedere LIKE (Transact-SQL).

  • ESCAPE 'escape_ character'
    Consente la ricerca di un carattere jolly come carattere effettivo in una stringa di caratteri, ignorando la funzionalità di carattere jolly. escape_character è il carattere inserito davanti al carattere jolly per specificarne l'utilizzo speciale.

  • [ NOT ] BETWEEN
    Specifica un intervallo di valori inclusivo. Utilizzare l'operatore AND per separare il valore iniziale da quello finale. Per ulteriori informazioni, vedere BETWEEN (Transact-SQL).

  • IS [ NOT ] NULL
    Specifica una ricerca di valori Null o non Null, a seconda delle parole chiave utilizzate. Un'espressione con un operatore bit per bit o aritmetico restituisce NULL se uno degli operandi è NULL.

  • CONTAINS
    Esegue ricerche in colonne che includono dati di tipo carattere per individuare corrispondenze esatte o fuzzy (meno esatte) di singole parole e frasi, la prossimità delle parole separate da una distanza massima specifica e le corrispondenze ponderate. È possibile utilizzare questa opzione solo con istruzioni SELECT. Per ulteriori informazioni, vedere CONTAINS (Transact-SQL).

  • FREETEXT
    Implementa un tipo semplice di query in linguaggio naturale per l'esecuzione di ricerche in colonne che includono dati di tipo carattere, per individuare valori che corrispondano al significato piuttosto che alle parole esatte del predicato. È possibile utilizzare questa opzione solo con istruzioni SELECT. Per ulteriori informazioni, vedere FREETEXT (Transact-SQL).

  • [ NOT ] IN
    Specifica la ricerca di un'espressione in base alla presenza o meno di tale espressione in un elenco. L'espressione di ricerca può essere una costante o un nome di colonna. L'elenco può essere un set di costanti o, più comunemente, una sottoquery. Racchiudere l'elenco di valori tra parentesi. Per ulteriori informazioni, vedere IN (Transact-SQL).

  • subquery
    Questo argomento può essere considerato un'istruzione SELECT con restrizioni ed è simile a <query_expression> nell'istruzione SELECT. La clausola ORDER BY, la clausola COMPUTE e la parola chiave INTO non sono consentite. Per ulteriori informazioni, vedere SELECT (Transact-SQL).

  • ALL
    Utilizzato con un operatore di confronto e una sottoquery. Restituisce TRUE per <predicate> se tutti i valori recuperati per la sottoquery soddisfano l'operazione di confronto, restituisce FALSE se non tutti i valori soddisfano il criterio di confronto oppure la sottoquery non restituisce righe all'istruzione esterna. Per ulteriori informazioni, vedere ALL (Transact-SQL).

  • { SOME | ANY }
    Utilizzato con un operatore di confronto e una sottoquery. Restituisce TRUE per <predicate> se almeno un valore recuperato per la sottoquery soddisfa l'operazione di confronto, restituisce FALSE se nessun valore della sottoquery soddisfa il criterio di confronto oppure la sottoquery non restituisce righe all'istruzione esterna. Negli altri casi, l'espressione è UNKNOWN. Per ulteriori informazioni, vedere SOME | ANY (Transact-SQL).

  • EXISTS
    Utilizzato con una sottoquery per verificare l'esistenza delle righe restituite dalla sottoquery. Per ulteriori informazioni, vedere EXISTS (Transact-SQL).

Osservazioni

L'ordine di precedenza degli operatori logici prevede NOT come operatore con precedenza massima, seguito da AND e quindi da OR. È possibile utilizzare le parentesi per ignorare tale ordine di precedenza in una condizione di ricerca. L'ordine di valutazione degli operatori logici può variare a seconda delle scelte effettuate da Query Optimizer. Per ulteriori informazioni sul funzionamento degli operatori logici applicati a valori logici, vedere AND (Transact-SQL), OR (Transact-SQL) e NOT (Transact-SQL).

Esempi

A. Utilizzo della clausola WHERE con la sintassi LIKE ed ESCAPE

Nell'esempio seguente viene eseguita una ricerca delle righe in cui la colonna LargePhotoFileName contiene i caratteri green_ e si utilizza l'opzione ESCAPE perché _ è un carattere jolly. Se non si specifica l'opzione ESCAPE, la query esegue una ricerca di qualsiasi valore di descrizione contenente la parola green seguita da qualsiasi singolo carattere diverso dal carattere _.

USE AdventureWorks ;
GO
SELECT * 
FROM Production.ProductPhoto
WHERE LargePhotoFileName LIKE '%greena_%' ESCAPE 'a' ;

B. Utilizzo della clausola WHERE e della sintassi LIKE con dati Unicode

Nell'esempio seguente viene utilizzata la clausola WHERE per recuperare l'indirizzo postale delle società con sede al di fuori degli Stati Uniti (US) e in città il cui nome inizia con Mn.

USE AdventureWorks ;
GO
SELECT AddressLine1, AddressLine2, City, PostalCode, CountryRegionCode  
FROM Person.Address AS a
JOIN Person.StateProvince AS s ON a.StateProvinceID = s.StateProvinceID
WHERE CountryRegionCode NOT IN ('US')
AND City LIKE N'Mn%' ;