Los datos expuestos en este blog, son solo de índole informativo. Por favor realiza siempre una copia de seguridad antes de realizar cualquier cambio en tu proyecto.
SQL: la condición existe
Este tutorial de SQL explica cómo usar la condición SQL EXISTS con sintaxis y ejemplos.
describir
La condición SQL EXISTS se usa junto con una subconsulta y se considera satisfecha si la subconsulta devuelve al menos una fila. Se puede usar en declaraciones SELECT, INSERT, UPDATE o DELETE.
sintaxis
La sintaxis de la condición EXISTS en SQL es:
WHERE EXISTS ( subquery );
parámetro o parámetro
Subconsultas Una subconsulta es una instrucción SELECT. Si la subconsulta devuelve al menos un registro en su conjunto de resultados, la cláusula EXISTS se evaluará como verdadera y se cumplirá la condición EXISTS. Si la subconsulta no devuelve registros, la cláusula EXISTS se evalúa como falsa y no se cumple la condición EXISTS.
notas
- Las instrucciones SQL que utilizan condiciones EXISTS son muy ineficientes porque la subconsulta se vuelve a ejecutar para cada fila en la tabla de consulta externa. Hay formas más eficientes de escribir la mayoría de las consultas que no usan condiciones EXISTS.
Ejemplo de DDL/DML
Si desea seguir este tutorial, obtenga DDL para crear las tablas y DML para completar los datos. ¡Entonces pruebe los ejemplos en su propia base de datos!
Ejemplo: uso de la condición EXISTS con la instrucción SELECT
Primero veamos un ejemplo que muestra cómo usar la condición EXISTS con una instrucción SELECT.
En este ejemplo, tenemos una tabla de clientes con los siguientes datos:
Identificación del cliente | apellido | nombre | sitio favorito |
---|---|---|---|
4000 | jackson | José | Red de Ciencia y Tecnología |
5000 | Herrero | simple | digminecraft.com |
6000 | Ferguson | samantha | granactividad.com |
7000 | Reynolds | Alan | revisatumath.com |
8000 | anderson | Página | nulo |
9000 | Johnson | Derek | Red de Ciencia y Tecnología |
También existe una tabla llamada pedidos con los siguientes datos:
Solicitar ID | Identificación del cliente | fecha de orden |
---|---|---|
1 | 7000 | 2016/04/18 |
2 | 5000 | 2016/04/18 |
3 | 8000 | 2016/04/19 |
4 | 4000 | 2016/04/20 |
Ahora busquemos todos los registros de la tabla de clientes donde hay al menos un registro con el mismo ID_cliente en la tabla de pedidos. Ingrese la siguiente instrucción SELECT:
SELECT * FROM customers WHERE EXISTS (SELECT * FROM orders WHERE customers.customer_id = orders.customer_id);
Se seleccionarán 4 registros. Estos son los resultados que deberías ver:
Identificación del cliente | apellido | nombre | sitio favorito |
---|---|---|---|
4000 | jackson | José | Red de Ciencia y Tecnología |
5000 | Herrero | simple | digminecraft.com |
7000 | Reynolds | Alan | revisatumath.com |
8000 | anderson | Página | nulo |
En este ejemplo, hay 4 registros para clientes en los que aparece el valor customer_id en la tabla de pedidos.
Ejemplo: uso de la condición EXISTS con instrucción UPDATE
Veamos un ejemplo del uso de la condición EXISTS en una instrucción UPDATE.
En este ejemplo, tenemos una tabla llamada productos con los siguientes datos:
ID del Producto | nombre del producto | categoria ID |
---|---|---|
1 | pera | 50 |
2 | plátano | 50 |
3 | mandarina | 50 |
4 | manzana | 50 |
5 | pan de molde | 75 |
6 | jamón | 25 |
7 | kleenex | nulo |
También hay una tabla llamada summary_data que contiene los siguientes datos:
ID del Producto | categoría actual |
---|---|
1 | 10 |
2 | 10 |
3 | 10 |
4 | 10 |
5 | 10 |
Ahora actualicemos la tabla summary_data con los valores de la tabla de productos. Ingrese la siguiente instrucción SQL:
UPDATE summary_data SET current_category = (SELECT category_id FROM products WHERE products.product_id = summary_data.product_id) WHERE EXISTS (SELECT category_id FROM products WHERE products.product_id = summary_data.product_id);
Habrá 5 registros actualizados. Seleccione datos de la tabla summary_data nuevamente:
SELECT * FROM summary_data;
Estos son los resultados que deberías ver:
ID del Producto | categoría actual |
---|---|
1 | 50 |
2 | 50 |
3 | 50 |
4 | 50 |
5 | 75 |
8 | 10 |
Este ejemplo actualiza el campo categoría_actual en la tabla de datos_resumen con el id_categoría en la tabla de productos donde coincide el valor id_producto. Se han actualizado los primeros 5 registros de la tabla summary_data.
propina: Si no incluyéramos la condición EXISTE, la consulta ACTUALIZAR actualizaría el campo categoría_actual en la fila 6 de la tabla de datos_resumen a NULL (porque la tabla de productos no tiene registro para product_id=8).
Ejemplo: uso de la condición EXISTS con instrucción DELETE
Veamos un ejemplo del uso de la condición EXISTS en una instrucción DELETE.
En este ejemplo, tenemos una tabla llamada clientes con los siguientes datos:
Identificación del cliente | apellido | nombre | sitio favorito |
---|---|---|---|
4000 | jackson | José | Red de Ciencia y Tecnología |
5000 | Herrero | simple | digminecraft.com |
6000 | Ferguson | samantha | granactividad.com |
7000 | Reynolds | Alan | revisatumath.com |
8000 | anderson | Página | nulo |
9000 | Johnson | Derek | Red de Ciencia y Tecnología |
También existe una tabla llamada pedidos con los siguientes datos:
Solicitar ID | Identificación del cliente | fecha de orden |
---|---|---|
1 | 7000 | 2016/04/18 |
2 | 5000 | 2016/04/18 |
3 | 8000 | 2016/04/19 |
4 | 4000 | 2016/04/20 |
5 | nulo | 2016/05/01 |
Ingrese la siguiente instrucción DELETE:
DELETE FROM orders WHERE EXISTS (SELECT * FROM customers WHERE customers.customer_id = orders.customer_id AND customers.last_name="Jackson");
Se eliminará 1 registro. Seleccione de nuevo los datos de la tabla de pedidos:
SELECT * FROM orders;
Estos son los resultados que deberías ver:
Solicitar ID | Identificación del cliente | fecha de orden |
---|---|---|
1 | 7000 | 2016/04/18 |
2 | 5000 | 2016/04/18 |
3 | 8000 | 2016/04/19 |
5 | nulo | 2016/05/01 |
Este ejemplo eliminará todos los registros de la tabla de pedidos donde hay un registro en la tabla de clientes con un last_name de “Jackson” y un valor de customer_id coincidente en ambas tablas. En este ejemplo, se elimina el registro con order_id=4.
Si desea determinar el número de filas para eliminar, puede ejecutar la siguiente instrucción SELECT adelante Ejecutar borrar.
SELECT COUNT(*) FROM orders WHERE EXISTS (SELECT * FROM customers WHERE customers.customer_id = orders.customer_id AND customers.last_name="Jackson");
Esto devuelve la cantidad de registros que se eliminarán cuando se ejecute la instrucción DELETE.
contando |
---|
1
Ejemplo: uso de NOT con la condición EXISTS
Finalmente, las condiciones NOT se pueden combinar con las condiciones EXISTS para crear condiciones NOT EXISTS. Veamos un ejemplo de cómo usar la condición NO EXISTE en SQL.
En este ejemplo, tenemos una tabla llamada clientes con los siguientes datos: | Identificación del cliente | apellido | nombre |
---|---|---|---|
sitio favorito | 4000 | jackson | José |
Red de Ciencia y Tecnología | 5000 | Herrero | simple |
digminecraft.com | 6000 | Ferguson | samantha |
granactividad.com | 7000 | Reynolds | Alan |
revisatumath.com | 8000 | anderson | Página |
nulo | 9000 | Johnson | Derek |
Red de Ciencia y Tecnología
También existe una tabla llamada pedidos con los siguientes datos: | Solicitar ID | Identificación del cliente |
---|---|---|
fecha de orden | 1 | 7000 |
2016/04/18 | 2 | 5000 |
2016/04/18 | 3 | 8000 |
2016/04/19 | 4 | 4000 |
2016/04/20 | 5 | nulo |
2016/05/01
SELECT * FROM customers WHERE NOT EXISTS (SELECT * FROM orders WHERE customers.customer_id = orders.customer_id);
Ingrese la siguiente instrucción SQL:
Se seleccionarán 2 registros. Estos son los resultados que deberías ver: | Identificación del cliente | apellido | nombre |
---|---|---|---|
sitio favorito | 6000 | Ferguson | samantha |
granactividad.com | 9000 | Johnson | Derek |
Red de Ciencia y Tecnología Este ejemplo devolverá todos los registros en la tabla de clientes. No
Un registro en la tabla de pedidos para un customer_id determinado.