Condition de recherche (Transact-SQL)

S’applique à : SQL Server (toutes les versions prises en charge) Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Combinaison d’un ou plusieurs prédicats qui utilisent les opérateurs logiques AND, OR et NOT.

Conventions de la syntaxe Transact-SQL

Syntaxe

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

Notes

Pour afficher la syntaxe Transact-SQL pour SQL Server 2014 et versions antérieures, consultez Versions antérieures de la documentation.

Arguments

<search_condition>
Pour une instruction SELECT, une expression de requête ou une sous-requête, spécifie les conditions des lignes retournées dans le jeu de résultats. Pour une instruction UPDATE, spécifie les lignes à mettre à jour. Pour une instruction DELETE, spécifie les lignes à supprimer. Le nombre de prédicats pouvant être inclus dans une condition de recherche d'instruction Transact-SQL est illimité.

<graph_search_pattern>
Spécifie le modèle de correspondance de graphe. Pour plus d’informations sur les arguments de cette clause, consultez MATCH (Transact-SQL)

NOT
Inverse l'expression booléenne spécifiée par le prédicat. Pour plus d’informations, consultez NOT (Transact-SQL).

AND
Combine deux conditions et a la valeur TRUE lorsque les deux conditions ont l'une et l'autre la valeur TRUE. Pour plus d’informations, consultez AND (Transact-SQL).

OR
Combine deux conditions et a la valeur TRUE lorsque l'une des deux conditions a la valeur TRUE. Pour plus d’informations, consultez OR (Transact-SQL).

< predicate >
Expression qui retourne la valeur TRUE, FALSE ou UNKNOWN.

expression
Nom de colonne, constante, fonction, variable, sous-requête scalaire ou toute combinaison de noms de colonnes, de constantes et de fonctions reliées par un ou plusieurs opérateurs ou par une sous-requête. L'expression peut également contenir l'expression CASE.

Notes

Les variables et constantes chaîne non Unicode utilisent la page de codes qui correspond au classement par défaut de la base de données. L’utilisation exclusive de données caractères non Unicode et la référence aux types de données caractères non Unicode char, varchar et text peuvent entraîner des conversions de page de codes. SQL Server convertit les variables et constantes chaîne non Unicode dans la page de codes qui correspond au classement de la colonne référencée ou au classement spécifié avec COLLATE, si cette page de codes est différente de celle du classement par défaut de la base de données. Quand un caractère est introuvable dans la nouvelle page de codes, il est converti en un caractère similaire, si un mappage ajusté est trouvé. Sinon, il est converti en caractère de remplacement par défaut de « ? ».

Si vous avez plusieurs pages de codes, faites précéder les constantes caractères de la lettre majuscule 'N' et utilisez des variables Unicode pour éviter les conversions de page de codes.

=
Opérateur utilisé pour tester l'égalité de deux expressions.

<>
Opérateur utilisé pour tester l'inégalité de deux expressions.

!=
Opérateur utilisé pour tester l'inégalité de deux expressions.

>
Opérateur utilisé pour tester la supériorité d'une expression par rapport à une autre.

>=
Opérateur utilisé pour tester la supériorité ou l'égalité d'une expression par rapport à une autre.

!>
Opérateur utilisé pour tester la non-supériorité d'une expression par rapport à une autre.

<
Opérateur utilisé pour tester l'infériorité d'une expression par rapport à une autre.

<=
Opérateur utilisé pour tester l'infériorité ou l'égalité d'une expression par rapport à une autre.

!<
Opérateur utilisé pour tester la non-infériorité d'une expression par rapport à une autre.

string_expression
Chaîne de caractères et de caractères génériques.

[ NOT ] LIKE
Indique que la chaîne de caractères suivante sera utilisée avec une syntaxe de correspondance au modèle. Pour plus d’informations, consultez LIKE (Transact-SQL).

ESCAPE 'escape_ character'
Permet la recherche d'un caractère générique dans une chaîne de caractères et non en tant que caractère générique. escape_character est le caractère placé devant le caractère générique pour indiquer cette utilisation spéciale.

[ NOT ] BETWEEN
Définit une plage inclusive (ou exclusive) de valeurs. Utilisez AND pour séparer les valeurs de début et de fin. Pour plus d’informations, consultez BETWEEN (Transact-SQL).

IS [ NOT ] NULL
Définit une recherche des valeurs NULL ou non NULL suivant les mots clé utilisés. Une expression avec un opérateur au niveau du bit ou un opérateur arithmétique retourne la valeur NULL si l'un des opérandes a la valeur NULL.

IS [NOT] DISTINCT FROM
Compare l’égalité de deux expressions et garantit un résultat vrai ou faux, même si un ou les deux opérandes sont Null. Pour plus d’informations, consultez IS [NOT] DISTINCT FROM (Transact-SQL).

CONTAINS
Recherche dans des colonnes de caractères les concordances plus ou moins précises (approximatives) avec des mots isolés ou des expressions, la proximité des mots, ainsi que les concordances pondérées. Cette option ne peut être utilisée qu'avec les instructions SELECT. Pour plus d’informations, consultez CONTAINS (Transact-SQL).

FREETEXT
Fournit une forme simple de requête en langage naturel qui recherche dans des colonnes de caractères les synonymes et non les termes exacts du prédicat. Cette option ne peut être utilisée qu'avec les instructions SELECT. Pour plus d’informations, consultez FREETEXT (Transact-SQL).

[ NOT ] IN
Définit la recherche d'une expression, selon que cette dernière est incluse ou non dans une liste. L'expression de recherche peut être une constante ou un nom de colonne ; par ailleurs, la liste peut être un ensemble de constantes ou, plus généralement, une sous-requête. Mettez la liste des valeurs entre parenthèses. Pour plus d’informations, consultez IN (Transact-SQL).

subquery
Peut être considéré comme une instruction SELECT restreinte et est similaire à <query_expression> dans l’instruction SELECT. La clause ORDER BY et le mot clé INTO ne sont pas autorisés. Pour plus d’informations, consultez SELECT (Transact-SQL).

ALL
Utilisé avec un opérateur de comparaison et une sous-requête. Retourne TRUE pour <predicate> si toutes les valeurs récupérées pour la sous-requête satisfont à la comparaison. Retourne FALSE si certaines valeurs ne satisfont pas à la comparaison ou si la sous-requête ne retourne aucune ligne à l’instruction externe. Pour plus d’informations, consultez ALL (Transact-SQL).

{ SOME | ANY }
Utilisé avec un opérateur de comparaison et une sous-requête. Retourne TRUE pour <predicate> si au moins une valeur récupérée pour la sous-requête satisfait à la comparaison. Retourne FALSE si aucune valeur dans la sous-requête ne satisfait à la comparaison ou si la sous-requête ne retourne aucune ligne à l’instruction externe. Dans les autres cas, l'expression est inconnue (UNKNOWN). Pour plus d’informations, consultez SOME | ANY (Transact-SQL).

EXISTS
Utilisé avec une sous-requête, vérifie l’existence de lignes retournées par la sous-requête. Pour plus d’informations, consultez EXISTS (Transact-SQL).

Notes

L'ordre de priorité des opérateurs logiques est NOT (la plus élevée), puis AND, puis OR. Les parenthèses peuvent être utilisées pour remplacer cette priorité dans un critère de recherche. L'ordre d'évaluation des opérateurs logiques peut varier en fonction des choix effectués par l'optimiseur de requête. Pour plus d’informations sur le fonctionnement des opérateurs logiques avec des valeurs logiques, consultez AND (Transact-SQL), OR (Transact-SQL) et NOT (Transact-SQL).

Exemples

R. Utilisation de WHERE avec la syntaxe LIKE et ESCAPE

L’exemple suivant recherche les lignes dans lesquelles la colonne LargePhotoFileName contient les caractères green_. Il utilise l’option ESCAPE, car _ est un caractère générique. Sans l’option ESCAPE, la requête rechercherait toutes les valeurs de description contenant le mot green suivi de n’importe quel caractère autre que le caractère _.

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

B. Utilisation de la syntaxe WHERE et LIKE avec des données Unicode

Cet exemple utilise la clause WHERE pour récupérer l'adresse postale de toutes les sociétés qui se trouvent hors des États-Unis (US) et dans une ville dont le nom commence par 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%' ;  

Exemples : Azure Synapse Analytics et Analytics Platform System (PDW)

C. Utilisation de WHERE avec LIKE

L’exemple suivant recherche les lignes dans lesquelles la colonne LastName contient les caractères and.

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

D. Utilisation de la syntaxe WHERE et LIKE avec des données Unicode

L’exemple suivant utilise la clause WHERE pour effectuer une recherche de données Unicode dans la colonne LastName.

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

Voir aussi