Condizione di ricerca (Transact-SQL)

Si applica a: SQL Server Azure SQL DatabaseIstanza gestita di SQL di AzureAzure Synapse Analytics AnalyticsPlatform System (PDW)

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

Convenzioni della sintassi Transact-SQL

Sintassi

-- Syntax for SQL Server and Azure SQL Database  
  
<search_condition> ::=  
    MATCH (<graph_search_pattern>) | <search_condition_without_match> | <search_condition> AND <search_condition>

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

<edge_alias> ::=
    edge_table_name | edge_table_alias
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse  
  
< search_condition > ::=   
    { [ NOT ] <predicate> | ( <search_condition> ) }   
    [ { AND | OR } [ NOT ] { <predicate> | ( <search_condition> ) } ]   
[ ...n ]   
  
<predicate> ::=   
    { expression { = | < > | ! = | > | > = | < | < = } expression   
    | string_expression [ NOT ] LIKE string_expression   
    | expression [ NOT ] BETWEEN expression AND expression   
    | expression IS [ NOT ] NULL   
    | expression [ NOT ] IN (subquery | expression [ ,...n ] )   
    | expression [ NOT ] EXISTS (subquery)
    }

Nota

Per visualizzare la sintassi Transact-SQL per SQL Server 2014 e versioni precedenti, vedere Documentazione delle versioni precedenti.

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.

<graph_search_pattern>
Specifica il modello di corrispondenza del grafico. Per altre informazioni sugli argomenti di questa clausola, vedere MATCH (Transact-SQL)

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

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

OR
Combina due condizioni e restituisce TRUE quando una delle due condizioni è TRUE. Per altre 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

Le costanti e le variabili delle stringhe diverse da Unicode usano la tabella codici corrispondente alle regole di confronto predefinite del database. Le conversioni della tabella codici possono verificarsi quando si usano unicamente dati di tipo carattere non Unicode e si fa riferimento ai tipi di dati carattere non Unicode char, varchar e text. SQL Server converte le costanti e le variabili delle stringhe non Unicode nella tabella codici che corrisponde alle regole di confronto della colonna con riferimenti o specificata mediante COLLATE, se tale tabella codici è diversa da quella che corrisponde a regole di confronto predefinite del database. Tutti i caratteri non trovati nella nuova tabella codici verranno convertiti in un carattere simile, se è reperibile un mapping di migliore approssimazione, altrimenti verrà convertito nel carattere di sostituzione predefinito di "?".

Quando si usano più tabelle codici, le costanti carattere possono essere precedute dalla lettera maiuscola 'N ' e possono essere usate variabili Unicode, per evitare conversioni delle tabelle codici.

=
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 altre 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 altre 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.

IS [ NOT ] DISTINCT FROM
Confronta l'uguaglianza di due espressioni e garantisce un risultato true o false, anche se uno o entrambi gli operandi sono NULL. Per altre informazioni, vedere IS [NOT] DISTINCT FROM (Transact-SQL).

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 altre 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 altre 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 altre 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 e la parola chiave INTO non sono consentite. Per altre 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 altre 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 altre informazioni, vedereSOME | ANY (Transact-SQL).

EXISTS
Utilizzato con una sottoquery per verificare l'esistenza delle righe restituite dalla sottoquery. Per altre informazioni, vedereEXISTS (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 altre informazioni sul funzionamento degli operatori logici applicati a valori logici, vedere AND (Transact-SQL), OR (Transact-SQL) e NOT (Transact-SQL).

Esempi

R. 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 usa 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 AdventureWorks2012 ;  
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 Pa.

USE AdventureWorks2012 ;  
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'Pa%' ;  

Esempi: Azure Synapse Analytics e Piattaforma di strumenti analitici (PDW)

C. Utilizzo della clausola WHERE con LIKE

Nell'esempio seguente viene eseguita una ricerca delle righe in cui la colonna LastName contiene i caratteri and.

-- Uses AdventureWorks  
  
SELECT EmployeeKey, LastName  
FROM DimEmployee  
WHERE LastName LIKE '%and%';  

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

L'esempio seguente usa la clausola WHERE per eseguire una ricerca Unicode nella colonna LastName.

-- Uses AdventureWorks  
  
SELECT EmployeeKey, LastName  
FROM DimEmployee  
WHERE LastName LIKE N'%and%';  

Vedi anche