SQL EXISTS: comprueba valores en subconsultas
Con el operador SQL EXISTS puedes comprobar una subconsulta en busca de una entrada específica. El resultado es un valor booleano. También es posible consultar múltiples condiciones.
¿Qué es SQL EXISTS?
En el Structured Query Language, además de las consultas regulares, existe el concepto de “subconsultas” o “subqueries”. Si deseas verificar si un valor específico está presente dentro de una de estas subconsultas, puedes utilizar el operador SQL EXISTS. Este aplica una condición definida a la subconsulta y devuelve el valor TRUE
(es decir, verdadero) si se cumple dicha condición. Solo en ese caso se ejecutará la consulta principal. SQL EXISTS puede utilizarse con los comandos SQL DELETE
, INSERT
, SELECT
y UPDATE
.
- Ancho de banda de hasta 1 Gb/s y tráfico ilimitado
- Almacenamiento SSD NVMe ultrarrápido
- Incluye: edición Plesk Web Host
Sintaxis y funcionalidad
A continuación, te mostramos cómo funciona SQL EXISTS en combinación con SELECT
. La sintaxis correspondiente es la siguiente:
SELECT nombre_de_columna(s)
FROM nombre_de_tabla
WHERE EXISTS
(SELECT nombre_de_columna FROM nombre_de_tabla WHERE condición);
sqlnombre_de_columna(s)
indica la columna o columnas que se van a filtrar con SELECT
. A continuación, se introduce el nombre de la tabla en la que se ejecutará el comando. Después, se comprobará la subconsulta mediante WHERE EXISTS
. En este punto, se introduce entre paréntesis la subconsulta correspondiente.
Cuando se ejecuta el código, se inicia primero la consulta de nivel superior. A continuación, el sistema inicia la subconsulta. Si ésta devuelve un resultado (es decir, TRUE
), se tiene en cuenta el resultado de la consulta principal. Sin embargo, si el resultado de la subconsulta es NULL
, se omite el resultado de la consulta principal.
Ejemplo de uso del operador
La forma más sencilla de ilustrar el significado y la funcionalidad de SQL EXISTS es con un ejemplo. Para ello, crearemos dos tablas diferentes. La primera tabla se llamará “Lista de clientes”. En ella se listan varios clientes de una empresa con su número de cliente, nombre y ubicación:
Número de cliente | Nombre | Ubicación |
---|---|---|
1427 | Pérez | Madrid |
1377 | Martín | Barcelona |
1212 | Hernández | Barcelona |
1431 | Rodríguez | Sevilla |
1118 | García | Valencia |
Nuestra segunda tabla se llamará “Pedidos”. Contendrá un número de artículo, el número de cliente y la fecha de pedido de cada entrada:
Número de artículo | Número de cliente | Fecha del pedido |
---|---|---|
00282 | 1172 | 2024-01-17 |
00311 | 1361 | 2024-01-19 |
00106 | 1431 | 2024-01-19 |
00378 | 1274 | 2024-01-30 |
00418 | 1118 | 2024-02-03 |
Ahora podemos filtrar qué clientes han realizado al menos un pedido en el periodo comprendido entre el 17 de enero y el 3 de febrero. Para ello utilizaremos el siguiente código:
SELECT Número de cliente, Nombre, Ubicación
FROM Lista de clientes
WHERE EXISTS
(SELECT * FROM Pedidos WHERE Lista_de_clientes.Número_de_cliente = Pedidos.Número_de_cliente);
sqlAhora el sistema comprobará si los números de cliente de la lista de clientes aparecen también en los pedidos. Si es así (es decir, si el valor es TRUE
), las entradas correspondientes se eliminarán de la lista:
Número de cliente | Nombre | Ubicación |
---|---|---|
1431 | Rodríguez | Sevilla |
1118 | García | Valencia |
Consulta de condiciones múltiples
También tienes la posibilidad de consultar varias condiciones y así especificar aún más tu selección. En el siguiente ejemplo, queremos comprobar si no solo se incluyen determinados números de cliente, sino también la localidad de Sevilla:
SELECT Número de cliente, Nombre, Ubicación
FROM Lista de clientes
WHERE EXISTS
(SELECT * FROM Pedidos WHERE Lista_de_clientes.Número_de_cliente = Pedidos.Número_de_cliente AND Ubicación = 'Sevilla');
sqlEn este caso, el resultado también es TRUE
:
Número de cliente | Nombre | Ubicación |
---|---|---|
1431 | Rodríguez | Sevilla |
Combinación con NOT
SQL EXISTS también te ofrece una opción si quieres hacer el proceso contrario. En el siguiente ejemplo, consultamos todos los clientes que no han realizado un pedido en el periodo de tiempo correspondiente. Para ello, añadimos la cláusula NOT
.
SELECT Número de cliente, Nombre, Ubicación
FROM Lista de clientes
WHERE NOT EXISTS
(SELECT * FROM Pedidos WHERE Lista_de_clientes.Número_de_cliente = Pedidos.Número_de_cliente);
sqlEste es el resultado:
Número de cliente | Nombre | Ubicación |
---|---|---|
1427 | Pérez | Madrid |
1377 | Martín | Barcelona |
1212 | Hernández | Barcelona |
Alternativas a SQL EXISTS
Existen algunas alternativas a SQL EXISTS que también te permiten utilizar subconsultas para verificar entradas específicas. Las opciones más prácticas son los operadores IN
y JOIN
, que puedes ajustar según tus necesidades.
Consigue alto rendimiento y asesoramiento personalizado: con el Hosting SQL Server de IONOS, puedes elegir entre MSSQL, MySQL y MariaDB. ¡Elige el que mejor se adapte a tus necesidades!