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: