SQL

¿Cómo usar el operador EXISTS de SQL Server?

Estrada Web Group
jiestrada
¿Cómo usar el operador EXISTS de SQL Server?

Resumen: en este tutorial, aprenderás cómo usar el operador EXISTS de SQL Server en la condición WHERE o HAVING para probar la existencia de filas en una subconsulta.

¿Qué es el operador EXISTS de SQL?

El operador EXISTS es un operador lógico que permite verificar si una subconsulta devuelve alguna fila. El operador EXISTS devuelve TRUE si la subconsulta devuelve una o más filas.

A continuación, se muestra la sintaxis del operador EXISTS de SQL Server:

EXISTS (subquery)

En esta sintaxis, la subconsulta es solo una instrucción SELECT. Tan pronto como la subconsulta devuelve filas, el operador EXISTS devuelve TRUE y detiene el procesamiento inmediatamente.

Ten en cuenta que, aunque la subconsulta devuelve un valor NULL, el operador EXISTS aún se evalúa como TRUE.

¿Cómo usar el operador EXISTS de SQL?

SELECT [column_name... | expression1 ]
FROM [table_name]
WHERE [NOT] EXISTS (subquery)
Nombre Desc.
column_name Nombre de la columna de la columna.
expression1 Expresión formada por una sola constante, variable, función escalar o nombre de columna y también pueden ser piezas de una consulta SQL que comparan valores con otros valores o realizan cálculos aritméticos.
table_name Nombre de la columna de la tabla.
WHERE [NOT] EXISTS

Valida la subconsulta para la existencia de una o más filas. Si una sola fila satisface la cláusula de subconsulta, devuelve el valor booleano TRUE.
Cuando la subconsulta no devuelve filas coincidentes, la palabra clave opcional NOT devuelve un valor booleano TRUE.

¿Cómo funciona el operador EXISTS de SQL?

A continuación, te muestro algunos ejemplos para entender cómo funciona el operador EXISTS.

A) Ejemplo de la cláusula EXISTS con una subconsulta que devuelve un NULL

Consulta la siguiente tabla de clientes de la base de datos de ejemplo.

operador Exists de SQL Server

El siguiente ejemplo devuelve todas las filas de la tabla de clientes:

SELECT customer_id, first_name, last_name
FROM sales.customers
WHERE  EXISTS (SELECT NULL)
ORDER BY  first_name,  last_name;

Resultado (primeras 11 filas):

customer_id first_name last_name
1174 Aaron Knapp
338 Abbey Pugh
75 Abby Gamble
1224 Abram Copeland
673 Adam Henderson
1085 Adam Thornton
195 Addie Hahn
1261 Adelaida Hancock
22 Adelle Larsen
1023 Adena Blake
1412 Adrien Hunter

En este ejemplo, la subconsulta devolvió un conjunto de resultados que contiene valores NULL, lo que hace que el operador EXISTS se evalúe como TRUE. Por lo tanto, la consulta completa devuelve todas las filas de la tabla de clientes.

B) Ejemplo de la cláusula EXISTS con una subconsulta relacionada

Considera las siguientes tablas de clientes y pedidos:

Tabla customers para ejemplo de EXISTS de SQL SERVER

El siguiente ejemplo encuentra todos los clientes que han realizado más de dos pedidos:

SELECT customer_id, first_name, last_name
FROM sales.customers c
WHERE EXISTS (SELECT COUNT (*)
              FROM sales.orders o
              WHERE customer_id = c.customer_id
              GROUP BY  customer_id
              HAVING  COUNT (*) > 2)
ORDER BY first_name, last_name;

Resultado:

customer_id first_name last_name
20 Aleta Shepard
32 Araceli Golden
64 Bobbie Foster
47 Bridgette Guerra
17 Caren Stephens
5 Charolette Rice
50 Cleotilde Booth
24 Corene Wall
4 Daryl Spence
1 Debra Burks

En este ejemplo, tenemos una subconsulta relacionada que devuelve clientes que han realizado más de dos pedidos, usando el WHERE, GROUP BY y el HAVING.
Si el número de pedidos realizados por el cliente es menor o igual a dos, la subconsulta devuelve un conjunto de resultados vacío que hace que el operador EXISTS se evalúe como FALSE.
Según el resultado del operador EXISTS, el cliente se incluirá en el conjunto de resultados.

C) Ejemplo EXISTS vs IN

La siguiente declaración utiliza el operador IN para encontrar los pedidos de los clientes de la ciudad de San José:

SELECT *
FROM sales.orders
WHERE customer_id IN (
        SELECT customer_id
        FROM sales.customers
        WHERE city = 'San Jose')
ORDER BY customer_id,  order_date;

La siguiente instrucción utiliza el operador EXISTS que devuelve el mismo resultado:

SELECT     *
FROM sales.orders o
WHERE EXISTS (
        SELECT customer_id
        FROM sales.customers c
        WHERE o.customer_id = c.customer_id
        AND city = 'San Jose')
ORDER BY o.customer_id, order_date;

Resultado:

order_id customer_id order_status order_date required_date shipped_date store_id staff_id
1411 109 4 01/03/2018 02/03/2018 02/03/2018 1 2
1584 109 2 26/04/2018 26/04/2018   1 3
1275 165 4 29/11/2017 01/12/2017 30/11/2017 1 2
1591 165 2 27/04/2018 27/04/2018   1 2
156 357 4 03/04/2016 06/04/2016 05/04/2016 1 3
868 868 4 01/05/2017 04/05/2017 02/05/2017 1 3
1336 904 4 09/01/2018 10/01/2018 12/01/2018 1 2
1026 1370 4 26/07/2017 28/07/2017 29/07/2017 1 2
927 1438 4 03/06/2017 05/06/2017 06/06/2017 1 2

 

En este tutorial, aprendiste a usar el operador EXISTS de SQL Server para probar si una subconsulta devuelve filas.

 

 

 

 

Compartir artículo:

Más artículos geniales

¿Como concatenar texto o columnas en SQL con la función CONCAT?

¿Como concatenar texto o columnas en SQL con la función CONCAT?

En este tutorial, aprenderá a usar la función CONCAT() de SQL Server para unir varias cadenas de texto columnas en una sola.

Ver artículo completo
Cómo filtrar por un rango de fechas en SQL Server con el operador BETWEEN

Cómo filtrar por un rango de fechas en SQL Server con el operador BETWEEN

La sentencia u operador BETWEEN de SQL le permite probar fácilmente si una expresión está dentro de un rango de valores. Los valores pueden ser texto, fechas o números.

Ver artículo completo

Manténgase actualizado

Obtenga excelente contenido en su bandeja de entrada todas las semanas.
Solo contenido excelente, no compartimos su correo electrónico con terceros.
Subir al inicio de la pantalla ;