Resumen: en este tutorial, aprenderá a utilizar el operador de PostgreSQL EXISTS
para comprobar la existencia de filas en una subconsulta.
Introducción al operador EXISTS de PostgreSQL
El operador EXISTS
es un operador booleano que comprueba la existencia de filas en una subconsulta.
Lo siguiente ilustra la sintaxis del operador EXISTS
:
EXISTS (subquery)
El EXISTS
acepta un argumento que es una subconsulta.
Si la subconsulta devuelve al menos una fila, el resultado de EXISTS
es verdadero. En caso de que la subconsulta no devuelva ninguna fila, el resultado de EXISTS
es falso.
El operador EXISTS
se suele utilizar con la subconsulta correlativa.
El resultado del operador EXISTS
depende de si alguna fila devuelta por la subconsulta, y no del contenido de la fila. Por lo tanto, las columnas que aparecen en la cláusula SELECT
de la subconsulta no son importantes.
Por esta razón, la convención de codificación común es escribir EXISTS
de la siguiente forma:
Nota que si la subconsulta devuelve NULL, el resultado de EXISTS
es verdadero.
Ejemplos de EXISTS en PostgreSQL
Utilizaremos las siguientes tablas customer
y payment
de la base de datos de ejemplo para la demostración:
A) Encuentra los clientes que tienen al menos un pago cuyo importe es superior a 11.
La siguiente sentencia devuelve los clientes que han pagado al menos un alquiler con un importe superior a 11:
SELECT first_name, last_nameFROM customer cWHERE EXISTS (SELECT 1 FROM payment p WHERE p.customer_id = c.customer_id AND amount > 11 )ORDER BY first_name, last_name;
La consulta devuelve el siguiente resultado:
En este ejemplo, para cada cliente de la tabla customer
, la subconsulta comprueba la tabla payment
para encontrar si ese cliente realizó al menos un pago (p.customer_id = c.customer_id
) y el importe es superior a 11€. ( amount > 11
)
B) Ejemplo NOT EXISTS
El operador NOT
niega el resultado del operador EXISTS
. El NOT EXISTS
es opuesto al EXISTS
. Significa que si la subconsulta no devuelve ninguna fila, el NOT EXISTS
devuelve true. Si la subconsulta devuelve una o más filas, el NOT EXISTS
devuelve false.
El siguiente ejemplo devuelve los clientes que no han realizado ningún pago que sea mayor de 11.
SELECT first_name, last_nameFROM customer cWHERE NOT EXISTS (SELECT 1 FROM payment p WHERE p.customer_id = c.customer_id AND amount > 11 )ORDER BY first_name, last_name;
Aquí está la salida:
C) EXISTS y NULL
Si la subconsulta devuelve NULL
EXISTS
devuelve true. Vea el siguiente ejemplo:
Code language: SQL (Structured Query Language) (sql)SELECTfirst_name,last_nameFROMcustomerWHEREEXISTS( SELECT NULL )ORDER BYfirst_name,last_name;
En este ejemplo, la subconsulta devolvió NULL
, por lo tanto, la consulta devolvió todas las filas de la tabla customer
.
En este tutorial, se ha aprendido a utilizar la EXISTS
de PostgreSQL para comprobar la existencia de filas en la subconsulta.
- ¿Ha sido útil este tutorial?
- SíNo