Condiciones de búsqueda (Transact-SQL)

Se aplica a: síSQL Server (todas las versiones admitidas) SíAzure SQL Database SíInstancia administrada de Azure SQL síAzure Synapse Analytics síAlmacenamiento de datos paralelos

Es una combinación de uno o varios predicados que utilizan los operadores lógicos AND, OR y NOT.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQL

Sintaxis

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

Para ver la sintaxis de Transact-SQL para SQL Server 2014 y versiones anteriores, consulte Versiones anteriores de la documentación.

Argumentos

<search_condition>
Especifica las condiciones de las filas devueltas en el conjunto de resultados de una instrucción SELECT, una expresión de consulta o una subconsulta. En una instrucción UPDATE, especifica las filas que se van a actualizar. En una instrucción DELETE, especifica las filas que se van a eliminar. No hay límite en el número de predicados que se pueden incluir en una condición de búsqueda de una instrucción Transact-SQL.

<graph_search_pattern>
Especifica el patrón de coincidencia de gráficos. Para obtener más información sobre los argumentos de esta cláusula, vea MATCH (Transact-SQL)

NOT
Niega la expresión booleana que especifica el predicado. Para obtener más información, vea NOT (Transact-SQL).

y
Combina dos condiciones y se evalúa como TRUE cuando ambas condiciones son TRUE. Para obtener más información, vea AND (Transact-SQL).

O BIEN
Combina dos condiciones y se evalúa como TRUE cuando alguna de las condiciones es TRUE. Para obtener más información, vea OR (Transact-SQL).

< predicate >
Es una expresión que devuelve TRUE, FALSE o UNKNOWN.

expression
Es un nombre de columna, una constante, una función, una variable, una subconsulta escalar o cualquier combinación de nombres de columna, constantes y funciones conectados mediante uno o varios operadores o una subconsulta. La expresión también puede contener la expresión CASE.

Nota

Las constantes y las variables de cadena no Unicode usan la página de códigos que corresponde a la intercalación predeterminada de la base de datos. Pueden producirse conversiones de página de códigos cuando se trabaja únicamente con datos de caracteres no Unicode y se hace referencia a los tipos de datos de caracteres no Unicode char, varchar y text. SQL Server convierte las variables y constantes de cadena no Unicode a la página de códigos que corresponde a la intercalación de la columna a la que se hace referencia o que se ha especificado mediante COLLATE, si esa página de códigos es diferente a la que corresponde a la intercalación predeterminada de la base de datos. Los caracteres que no se encuentran en la nueva página de códigos se traducen en un carácter similar, si se encuentra una coincidencia, o bien se convierten en el carácter de sustitución predeterminado "?".

Cuando se trabaja con varias páginas de códigos, las constantes de caracteres pueden llevar un prefijo con la letra mayúscula 'N' y se pueden usar variables Unicode para evitar las conversiones de páginas de códigos.

=
Es el operador que se utiliza para probar la igualdad entre dos expresiones.

<>
Es el operador que se utiliza para probar si dos expresiones no son iguales entre sí.

!=
Es el operador que se utiliza para probar si dos expresiones no son iguales entre sí.

>
Es el operador que se utiliza para probar si una expresión es mayor que la otra.

>=
Es el operador que se utiliza para probar si una expresión es mayor o igual que la otra expresión.

!>
Es el operador que se utiliza para probar si una expresión no es mayor que la otra expresión.

<
Es el operador que se utiliza para probar si una expresión es menor que la otra.

<=
Es el operador que se utiliza para probar si una expresión es menor o igual que la otra expresión.

!<
Es el operador que se utiliza para probar si una expresión no es menor que la otra expresión.

string_expression
Es una cadena de caracteres y caracteres comodín.

[ NOT ] LIKE
Indica que la siguiente cadena de caracteres se utilizará con la coincidencia de patrón. Para obtener más información, vea LIKE (Transact-SQL).

ESCAPE " carácter de escape_ "
Permite buscar un carácter comodín en una cadena de caracteres sin que funcione como carácter comodín. escape_character es el carácter que se coloca delante del carácter comodín para indicar este uso especial.

[ NOT ] BETWEEN
Especifica un intervalo inclusivo de valores. Utilice AND para separar los valores inicial y final. Para obtener más información, vea BETWEEN (Transact-SQL).

IS [ NOT ] NULL
Especifica una búsqueda de valores NULL o de valores que no son NULL, en función de las palabras clave utilizadas. Una expresión que contenga un operador bit a bit o aritmético se evalúa como NULL si uno de los operandos es NULL.

CONTAINS
Busca en columnas que contienen datos basados en caracteres coincidencias precisas o menos precisas (parciales) con palabras o frases, a una cierta distancia las unas de las otras y coincidencias ponderadas. Esta opción solo puede usarse con instrucciones SELECT. Para obtener más información, vea CONTAINS (Transact-SQL).

FREETEXT
Proporciona una forma sencilla de realizar consultas en lenguaje natural al buscar, en columnas con datos basados en caracteres, valores que coincidan con el significado en lugar de con las palabras exactas del predicado. Esta opción solo puede usarse con instrucciones SELECT. Para obtener más información, vea FREETEXT (Transact-SQL).

[ NOT ] IN
Especifica la búsqueda de una expresión, basada en si la expresión está incluida en una lista o excluida de ella. La expresión de búsqueda puede ser una constante o un nombre de columna, y la lista puede ser un conjunto de constantes o, más normalmente, una subconsulta. Encierre la lista de valores entre paréntesis. Para más información, vea IN (Transact-SQL).

subquery
Se puede considerar como una instrucción SELECT restringida y es similar a <query_expression> en la instrucción SELECT. No se permiten la cláusula ORDER BY ni la palabra clave INTO. Para obtener más información, vea SELECT (Transact-SQL).

ALL
Se utiliza con un operador de comparación y una subconsulta. Devuelve TRUE para <predicate> si todos los valores obtenidos de la subconsulta satisfacen la operación de comparación, o FALSE cuando no todos los valores satisfacen la comparación o si la subconsulta no devuelve filas a la instrucción externa. Para obtener más información, vea ALL (Transact-SQL).

{ SOME | ANY }
Se utiliza con un operador de comparación y una subconsulta. Devuelve TRUE para <predicate> si algún valor obtenido de la subconsulta satisface el operador de comparación, o FALSE cuando ningún valor de la subconsulta satisface la comparación o si la subconsulta no devuelve filas a la instrucción externa. En caso contrario, la expresión es UNKNOWN. Para obtener más información, vea SOME | ANY (Transact-SQL).

EXISTS
Se utiliza con una subconsulta para probar la existencia de filas devueltas por la subconsulta. Para obtener más información, vea EXISTS (Transact-SQL).

Observaciones

El orden de prioridad de los operadores lógicos es NOT (el más alto), seguido de AND y OR. Se pueden utilizar paréntesis para invalidar esta prioridad en una condición de búsqueda. El orden de evaluación de los operadores lógicos puede variar dependiendo de las opciones elegidas por el optimizador de consultas. Para obtener más información sobre el funcionamiento de los operadores lógicos en valores lógicos, vea AND (Transact-SQL), OR (Transact-SQL) y NOT (Transact-SQL).

Ejemplos

A. Usar WHERE con la sintaxis de LIKE y ESCAPE

En el siguiente ejemplo se buscan filas en las que la columna LargePhotoFileName tenga los caracteres green_ y se usa la opción ESCAPE porque _ es un carácter comodín. Sin especificar la opción ESCAPE, la consulta buscaría valores de descripción que contuvieran la palabra green seguida de cualquier carácter distinto del carácter _.

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

B. Usar la sintaxis de WHERE y LIKE con datos Unicode

En el siguiente ejemplo se utiliza la cláusula WHERE para recuperar la dirección de correo de una empresa que está fuera de los Estados Unidos (US) y en una ciudad cuyo nombre empieza 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%' ;  

Ejemplos: Azure Synapse Analytics y Sistema de la plataforma de análisis (PDW)

C. Usar WHERE con LIKE

En el siguiente ejemplo se buscan filas en las que la columna LastName tenga los caracteres and.

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

D. Usar la sintaxis de WHERE y LIKE con datos Unicode

En el ejemplo siguiente se usa la cláusula WHERE para realizar una búsqueda Unicode en la columna LastName.

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

Consulte también

Funciones de agregado (Transact-SQL)
CASE (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
Cursores (Transact-SQL)
DELETE (Transact-SQL)
Expresiones (Transact-SQL)
FREETEXTTABLE (Transact-SQL)
FROM (Transact-SQL)
Operadores (Transact-SQL)
UPDATE (Transact-SQL)