Condition de recherche (Transact-SQL)

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

Icône Lien de rubriqueConventions de syntaxe Transact-SQL

Syntaxe

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

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é.

  • 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.

    [!REMARQUE]

    Lorsque vous faites référence aux types de données caractères Unicode nchar, nvarchar et ntext, l'expression doit comporter la majuscule « N » en préfixe. Si vous ne spécifiez pas « N », SQL Server convertit la chaîne dans la page de codes qui correspond au classement par défaut de la base de données ou de la colonne. Tous les caractères absents de cette page de codes sont alors perdus.

  • =
    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 de rechercher un caractère générique en tant que chaîne de caractères plutôt qu'en tant que caractère générique. L'argument escape_character est le caractère placé devant le caractère générique pour signaler cette utilisation spécifique.

  • [ 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.

  • 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 ressemble à <query_expresssion> dans l'instruction SELECT. La clause ORDER BY, la clause COMPUTE 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 la valeur TRUE pour <predicate> si toutes les valeurs récupérées pour la sous-requête satisfont l'opération de comparaison ; retourne la valeur FALSE dans le cas contraire 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 la valeur TRUE pour <predicate> si au moins une valeur récupérée pour la sous-requête satisfait l'opération de comparaison ; retourne la valeur FALSE dans le cas contraire 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 pour vérifier 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 et 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

A. Utilisation de WHERE avec la syntaxe LIKE et ESCAPE

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

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