SQL: la condición existe

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.