Critério de pesquisa (Transact-SQL)

É uma combinação de um ou mais predicados que usam os operadores lógicos AND, OR e NOT. Use <search_condition> em uma instrução DELETE, MERGE, SELECT ou UPDATE para especificar as linhas retornadas ou afetadas por essas instruções.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

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

Argumentos

  • <search_condition>
    Especifica as condições para as linhas retornadas no conjunto de resultados para uma instrução SELECT, expressão de consulta ou subconsulta. Para uma instrução UPDATE, especifica as linhas a serem atualizadas. Para uma instrução DELETE, especifica as linhas a serem excluídas. Não há nenhum limite para o número de predicados que podem ser incluídos em um critério de pesquisa da instrução Transact-SQL.

  • NOT
    Nega a expressão booleana especificada pelo predicado. Para obter mais informações, consulte NOT (Transact-SQL).

  • AND
    Combina duas condições e avalia como TRUE quando ambas são TRUE. Para obter mais informações, consulte AND (Transact-SQL).

  • OR
    Combina duas condições e avalia como TRUE quando uma delas é TRUE. Para obter mais informações, consulte OR (Transact-SQL).

  • < predicate >
    É uma expressão que retorna TRUE, FALSE ou UNKNOWN.

  • expression
    É um nome de coluna, uma constante, uma função, uma variável, uma subconsulta escalar ou qualquer combinação de nomes de colunas, constantes e funções conectadas por um operador ou operadores ou por uma subconsulta. A expressão também pode conter a expressão CASE.

    ObservaçãoObservação

    Ao referenciar tipos de dados de caractere Unicode nchar, nvarchar e ntext, 'expression' deve ter a letra maiúscula 'N' como prefixo. Se 'N' não for especificado, o SQL Server irá converter a cadeia de caracteres na página de código correspondente ao agrupamento padrão do banco de dados ou coluna. Qualquer caractere não localizado nessa página de código será perdido.

  • =
    É o operador usado para testar a igualdade entre duas expressões.

  • <>
    É o operador usado para testar a condição de duas expressões que não são iguais.

  • !=
    É o operador usado para testar a condição de duas expressões que não são iguais.

  • >
    É o operador usado para testar a condição de uma expressão maior do que a outra.

  • >=
    É o operador usado para testar a condição de uma expressão maior ou igual a outra.

  • !>
    É o operador usado para testar a condição de uma expressão que não é maior que a outra.

  • <
    É o operador usado para testar a condição de uma expressão menor que a outra.

  • <=
    É o operador usado para testar a condição de uma expressão menor ou igual a outra.

  • !<
    É o operador usado para testar a condição de uma expressão que não é menor que a outra.

  • string_expression
    É uma cadeia de caracteres e caracteres e curinga.

  • [ NOT ] LIKE
    Indica a cadeia de caracteres subsequente que será usada com uma correspondência de padrão. Para obter mais informações, consulte LIKE (Transact-SQL).

  • ESCAPE 'escape_ character'
    Permite que um caractere curinga seja pesquisado em uma cadeia de caracteres em vez de funcionar como um caractere curinga. escape_character é o caractere colocado na frente do caractere curinga para indicar esse uso especial.

  • [ NOT ] BETWEEN
    Especifica um intervalo inclusivo de valores. Use AND para separar os valores inicial e final. Para obter mais informações, consulte BETWEEN (Transact-SQL).

  • IS [ NOT ] NULL
    Especifica uma pesquisa de valores nulos ou de valores não nulos, dependendo das palavras-chave usadas. Uma expressão com um operador bit a bit ou aritmético avaliará como NULL se qualquer um dos operandos for NULL.

  • CONTAINS
    Pesquisa colunas que contêm tipos de dados baseados em caracteres para obter correspondências precisas ou menos precisas (difusas) para palavras e frases únicas, proximidade entre palavras dentro de uma determinada distância e correspondências ponderadas. Esta opção só pode ser usada com instruções SELECT. Para obter mais informações, consulte CONTAINS (Transact-SQL).

  • FREETEXT
    Fornece uma forma simples de consulta de idioma natural pesquisando colunas que contêm dados baseados em caracteres para obter valores que correspondam ao significado em vez das palavras exatas no predicado. Esta opção só pode ser usada com instruções SELECT. Para obter mais informações, consulte FREETEXT (Transact-SQL).

  • [ NOT ] IN
    Especifica a pesquisa de uma expressão, com base na inclusão ou exclusão da expressão em uma lista. A expressão da pesquisa pode ser uma constante ou um nome de coluna, e a lista pode ser um conjunto de constantes ou, normalmente, uma subconsulta. Inclua a lista de valores em parênteses. Para obter mais informações, consulte IN (Transact-SQL).

  • subquery
    Pode ser considerada uma instrução SELECT restrita e ser semelhante a <query_expresssion> na instrução SELECT. A cláusula ORDER BY, a cláusula COMPUTE e a palavra-chave INTO não são permitidas. Para obter mais informações, consulte SELECT (Transact-SQL).

  • ALL
    Usado com um operador de comparação e uma subconsulta. Retorna TRUE para <predicate> quando todos os valores recuperados para a subconsulta satisfazem a operação de comparação ou FALSE quando nem todos os valores satisfazem a comparação ou quando a subconsulta não retorna nenhuma linha para a instrução externa. Para obter mais informações, consulte ALL (Transact-SQL).

  • { SOME | ANY }
    Usado com um operador de comparação e uma subconsulta. Retorna TRUE para <predicate> quando qualquer valor recuperado para a subconsulta satisfaz a operação de comparação ou FALSE, quando nenhum valor na subconsulta satisfaz a comparação ou quando a subconsulta não retorna nenhuma linha para a instrução externa. Caso contrário, a expressão é UNKNOWN. Para obter mais informações, consulte SOME | ANY (Transact-SQL).

  • EXISTS
    Usada com uma subconsulta para testar para a existência de linhas retornadas pela subconsulta. Para obter mais informações, consulte EXISTS (Transact-SQL).

Comentários

A ordem de precedência para operadores lógicos é NOT (mais alto), seguido por AND, seguido por OR. Podem ser usados parênteses para substituir essa precedência em uma condição de pesquisa. A ordem de avaliação de operadores lógicos pode variar, dependendo das escolhas feitas pelo otimizador de consultas. Para obter mais informações sobre como os operadores lógicos funcionam em valores lógicos, consulte AND (Transact-SQL), OR (Transact-SQL)e NOT (Transact-SQL).

Exemplos

A. Usando a sintaxe WHERE com LIKE e ESCAPE

O exemplo a seguir pesquisa as linhas nas quais a coluna LargePhotoFileName possui os caracteres green_ e usa a opção ESCAPE porque _ é um caractere curinga. Sem especificar a opção ESCAPE, a consulta pesquisaria quaisquer valores de descrição contendo a palavra green seguida por qualquer caractere único diferente do caractere _.

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

B. Usando a sintaxe WHERE e LIKE com dados Unicode

O exemplo a seguir usa a cláusula WHERE para recuperar o endereço para correspondência para qualquer empresa que esteja fora dos Estados Unidos (US) e em uma cidade cujo nome comece com Pa.

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