SQL Server EXISTE y NO EXISTE

El artículo proporciona una descripción detallada de los operadores IF EXISTS y NOT EXISTS T-SQL. Esto también explica por qué al comparar conjuntos de datos mediante subconsultas, debe elegir EXISTE sobre IN y NOT EXISTS sobre NOT IN.

SQL EXISTS es una declaración lógica utilizada para verificar filas en una base de datos. Devuelve VERDADERO en caso de que la subconsulta devuelva uno o más registros. SQL NOT EXISTS actúa de manera completamente opuesta al operador EXISTS y se ejecuta en caso de que la subconsulta no devuelva cadenas.

Contenido

Índice

    El uso de SQL EXISTE

    El resultado de la condición EXISTE es un valor booleano: verdadero o falso. SQL Server EXISTS se puede usar en operaciones SELECCIONAR, ACTUALIZAR, INSERTAR o ELIMINAR.

    SQL EXISTE sintaxis

    SELECT
          column_name
    FROM Table_Name
    WHERE EXISTS (SELECT
                        column_name
                  FROM Table_Name
                  WHERE condition);

    SQL de ejemplo EXISTE

    Consideremos el siguiente ejemplo de uso de SQL EXISTS. Supongamos que el nuestro BicicletaTiendaDev la base de datos contiene dos tablas: El cliente y Pedidoque están relacionados por la relación de la tabla uno a muchos.

    Digamos que queremos ejecutar una campaña de remarketing, por lo que necesitamos obtener una lista de clientes que hayan realizado al menos un pedido. Entonces, ¿cómo verifica si existe una cadena en SQL? Para ello ejecutaremos la siguiente consulta:

    SELECT
          *
    FROM Sales.Customer c
    WHERE EXISTS (SELECT
                        *
                  FROM Sales.[Order] o
                  WHERE o.CustomerId = o.OrderId)

    La consulta enumera las líneas con El cliente una tabla en la que los campos CustIDID son iguales a los campos OrderID Pedido mesa.

    El uso de SQL NO EXISTE

    La condición de SQL Server NO EXISTE consta de dos declaraciones lógicas: EXISTE, que se describió anteriormente, y NO, que se usa para anular la entrada booleana.

    ¿Cuál es la diferencia entre EXISTE y NO EXISTE en SQL?
    A diferencia de EXISTS, NOT EXISTS devuelve TRUE si el resultado de la subconsulta no contiene cadenas. Si un registro de la tabla coincide con una subconsulta, NO EXISTE devuelve FALSO y se detiene la ejecución de la subconsulta. En lenguaje sencillo, NOT EXISTS le permite encontrar registros que no coinciden con la subconsulta.

    La sintaxis SQL NO EXISTE

    SELECT
          column_name
    FROM Table_Name
    WHERE NOT EXISTS (SELECT
    		          column_name
                      FROM Table_Name
                      WHERE condition);

    SQL NO EXISTE en la subconsulta

    NOT EXISTS se usa con la subconsulta en la cláusula WHERE para comprobar si el resultado de la subconsulta devuelve VERDADERO o FALSO. A continuación, se utiliza un valor booleano para limitar las cadenas del operador de selección externo.

    En pocas palabras, una subconsulta con NO EXISTE comprueba cada línea de una consulta externa, devuelve VERDADERO o FALSO y luego envía el valor de la consulta externa para su uso. Aún más simple, si usa SQL NOT EXISTS, la consulta devuelve todas las filas que no cumplen la condición EXISTS.

    SQL NO EXISTE ejemplo

    Para demostrar el uso de NOT EXISTS en SQL Server, solicitamos El cliente tabla para encontrar filas donde Identificación del cliente no existe en Pedido mesa. Entonces, usando NO EXISTE, obtenemos una lista de clientes que aún no han realizado pedidos.

    La diferencia entre IN y EXISTS SQL Server

    La declaración lógica IN en SQL devuelve VERDADERO si el valor especificado coincide con uno de los valores en la subconsulta o lista. En pocas palabras, el operador IN compara un valor dado con una lista específica de valores. Si este valor corresponde a al menos un valor de la lista, devuelve VERDADERO, de lo contrario se emite FALSO.

    Supongamos que continuamos con nuestra campaña de remarketing y necesitamos obtener una lista de clientes que viven en Nueva York para enviarles una oferta especial.

    SELECT
         c.FirstName
        ,c.LastName
        ,c.Email
        ,c.City
    FROM Sales.Customer c
    WHERE City IN ('New York');

    ¿Recuerdas nuestra solicitud con EXISTE? ¿El que usamos para encontrar una lista de clientes que hicieron pedidos? Reescribámoslo ahora con IN. Como puedes ver, el resultado es el mismo.

    Entonces, ¿cuál elegir?
    Obviamente, las subconsultas con IN son más intuitivas, pero son más lentas y menos eficientes que las mismas consultas escritas con EXISTS cuando se trata de grandes conjuntos de datos.

    También vale la pena señalar otras diferencias significativas entre los dos operadores:

    • La salida de la subconsulta de EXISTS puede ser VERDADERO o FALSO, mientras que la salida IN puede ser VERDADERO, FALSO o NULL.
    • El motor de la base de datos deja de buscar filas en busca de EXISTS si encuentra al menos una fila coincidente para IN, pero explora cada fila en busca de un valor específico.
    • Valores cero devueltos por una subconsulta que se compara con un operador externo usando IN o NOT IN, devolviendo UNKNOWN. Por lo tanto, el uso de valores cero con IN puede conducir a resultados inesperados.

    SQL Server no existe

    SQL NOT IN consta de dos declaraciones lógicas: IN, que describimos anteriormente, y NOT, que se puede poner delante de cualquier declaración condicional para encontrar cadenas para las que esa declaración es falsa.

    Cómo usar NOT IN en SQL

    Sigamos con nuestra campaña de remarketing. Por ejemplo, ahora necesitamos obtener una lista de clientes que viven en otros estados además de Nueva York.

    SELECT
         c.FirstName
        ,c.LastName
        ,c.Email
        ,c.City
    FROM Sales.Customer c
    WHERE c.State NOT IN ('NY');

    Rendimiento NOT IN vs. NOT EXISTS en SQL Server

    En primer lugar, debe tenerse en cuenta que NOT EXISTS y NOT IN, a diferencia de EXISTS e IN, no son intercambiables en todas las situaciones. Es decir, cuando NULL está involucrado, devuelven resultados diferentes. En este caso, si la subconsulta devuelve incluso un cero, NOT IN no coincidirá con ninguna línea.

    En términos de aspectos de rendimiento, SQL NOT EXISTS sería una mejor opción que SQL NOT IN. NOT EXISTS es mucho más rápido que NOT IN, especialmente si el resultado de la subconsulta es muy grande.

    Conclusión

    SQL es un lenguaje lógico, y aquí todo funciona de forma bastante sencilla. Sus operadores lógicos comprueban la condición y devuelven un tipo de datos booleano. En algunos casos, estos operadores lógicos se pueden usar indistintamente y la elección del operador se deja al usuario. En este artículo, proporcionamos una descripción general detallada y una comparación de SQL EXISTE, NO EXISTE, EN y NO EN para que tenga los conocimientos suficientes para tomar las decisiones correctas en su trabajo.

    Capturas de pantalla en el artículo, que hicimos usando la herramienta SQL Complete, un complemento de SSMS y Visual Studio, que amplía y acelera enormemente las capacidades de codificación de los usuarios de SQL. ¿Quieres probarlo tú mismo? Descargar Una prueba gratuita de 30 días de SQL Complete y una versión de prueba con todas las funciones avanzadas que ofrece.

    Artículos de interés

    Subir