SQL EXISTSOperadores


Operador EXISTS

El operador EXISTS se utiliza para determinar si la subconsulta tiene registros. Si existe uno o más registros, devuelve True; de lo contrario, devuelve False.

Sintaxis de SQL EXISTS

SELECT column_name(s)
FROM table_name
WHERE EXISTS
(SELECT column_name FROM table_name WHERE condition);


Base de datos de demostración

En este tutorial, usaremos la base de datos de muestra EJEMPLO.

Los siguientes son datos seleccionados de la tabla "Websites":

+----+--------------+---------------------------+-------+---------+
| id | name         | url                       | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1  | Google       | https://www.google.cm/    | 1     | USA     |
| 2  | 淘宝       | https://www.taobao.com/   | 13    | CN      |
| 3  | Ejemplo | http://www.example.com/    | 4689  | CN      |
| 4  | 微博       | http://weibo.com/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook.com/ | 3     | USA     |
+----+--------------+---------------------------+-------+---------+

Los siguientes son datos de la tabla de registros de acceso al sitio web "access_log":

mysql> SELECT * FROM access_log;
+-----+---------+-------+------------+
| aid | site_id | count | date       |
+-----+---------+-------+------------+
|   1 |       1 |    45 | 2016-05-10 |
|   2 |       3 |   100 | 2016-05-13 |
|   3 |       1 |   230 | 2016-05-14 |
|   4 |       2 |    10 | 2016-05-14 |
|   5 |       5 |   205 | 2016-05-14 |
|   6 |       4 |    13 | 2016-05-15 |
|   7 |       3 |   220 | 2016-05-15 |
|   8 |       5 |   545 | 2016-05-16 |
|   9 |       3 |   201 | 2016-05-17 |
+-----+---------+-------+------------+
9 rows in set (0.00 sec)


Ejemplo de SQL EXISTS

Ahora queremos comprobar si existe algún sitio web con un total de visitas (campo count) mayor que 200.

Usamos la siguiente declaración SQL:

Ejemplo

SELECT Websites.name, Websites.url FROM Websites WHERE EXISTS (SELECT count FROM access_log WHERE Websites.id = access_log.site_id AND count > 200);

Al ejecutar el SQL anterior, el resultado es el siguiente:

EXISTS se puede usar junto con NOT para encontrar registros que no cumplen con la consulta:

Ejemplo

SELECT Websites.name, Websites.url FROM Websites WHERE NOT EXISTS (SELECT count FROM access_log WHERE Websites.id = access_log.site_id AND count > 200);

Al ejecutar el SQL anterior, el resultado es el siguiente:

Otras extensiones