sql >> Base de Datos >  >> RDS >> Database

SQL IN vs SQL EXISTE

SQL IN vs SQL EXISTE

Este artículo analiza en detalle los operadores IN y EXISTS en SQL . Es una pregunta común entre los desarrolladores cuál es la diferencia entre estos dos operadores. Para conocer la diferencia, primero analicemos en detalle cada uno de estos operadores.

Operador IN

El operador IN se utiliza para obtener resultados cuando un valor especificado coincide con un valor en un conjunto de valores o lo devuelve una consulta interna. Este operador también se puede utilizar con WHERE cláusula para especificar más de un valor. El operador IN a menudo se conoce como el acrónimo del operador OR porque reduce el uso de múltiples condiciones OR en consultas SELECCIONAR, INSERTAR, ACTUALIZAR o ELIMINAR. .

En este operador, la subconsulta se resuelve primero y ese resultado luego se usa para resolver la consulta externa.

La siguiente es la sintaxis general del operador IN:

SELECT column_name
 FROM table_name
 WHERE column_name IN (value1, value2, …); 

Ejemplo:

Consideremos la siguiente tabla de Clientes.

Cust_id Nombre_del_cliente Ciudad Ocupación
1 Harry Calcuta Negocio
2 Ron Mumbai Médico
3 Albus Delhi Ingeniero
4 Dobby Puno Científico
5 Snape Bangalore Estudiante

Consulta:

SELECT *
 FROM Customer    
 WHERE Occupation IN ('Doctor', 'Scientist', 'Engineer'); 

La consulta anterior devolverá todos los clientes que sean médicos, científicos o ingenieros.

Salida:

Cust_id Nombre_del_cliente Ciudad Ocupación
2 Ron Mumbai Médico
3 Albus Delhi Ingeniero
4 Dobby Puno Científico

EXISTE Operador

El operador EXISTS, a diferencia del operador IN, devuelve un valor booleano. Este operador verifica el resultado de la consulta interna y devuelve un valor booleano, es decir, verdadero o falso. Si la consulta interna devuelve un registro único o múltiple, el operador devuelve verdadero; de lo contrario, devuelve falso cuando no se encuentran registros.

Este operador también es eficiente, ya que detiene el procesamiento posterior tan pronto como se detecta el primer evento verdadero.

La siguiente es la sintaxis del operador EXISTS:

SELECT column_names    
 FROM table_name    
 WHERE NOT EXISTS (    
 SELECT column_names     
 FROM table_name     
 WHERE condition    
 ); 

Ejemplo:

Consideremos la siguiente tabla de Clientes.

Cust_id Nombre Ocupación Edad
101 Harry Ingeniero 32
102 Ron Desarrollador 30
103 Dobby Líder 28
104 Albus Científico 45
105 Snape Carpintero 26
106 Jengibre Actriz 25
107 NULO NULO NULO

Consideremos otra tabla Órdenes.

Order_id ID_cliente Nombre_del_producto Fecha_pedido
1 101 Ordenador portátil 2021-01-10
2 103 Escritorio 2021-02-12
3 106 iPhone 2021-02-15
4 104 Móvil 2021-03-05
5 102 Televisión 2021-03-20

Consulta:

SELECT Name, Occupation
 FROM Customer    
 WHERE EXISTS (
 SELECT *
 FROM Orders     
 WHERE Customer.Cust_id = Orders.Cust_id
 ); 

La consulta anterior devolverá el nombre y la ocupación de todos los clientes que hayan realizado al menos un pedido.

Salida:

Nombre Ocupación
Harry Ingeniero
Ron Desarrollador
Dobby Líder
Albus Científico
Jengibre Actriz

Tabla de diferencias entre el operador IN y EXISTS

Las diferencias clave entre el operador IN y el operador EXISTS se enumeran a continuación de forma tabular:

Operador IN EXISTE Operador
Minimiza el uso de las condiciones OR. Comprueba la existencia de un registro en la consulta interna.
Compara los valores de la consulta interna con el valor de la consulta externa. No compara los valores entre la consulta interna y la consulta secundaria.
Comprueba todos los valores dentro del bloque de la cláusula IN. Detiene cualquier ejecución posterior tan pronto como se cumple la primera condición verdadera.
Puede devolver VERDADERO, FALSO o NULL. Devuelve VERDADERO o FALSO.
Se puede utilizar para comprobar valores NULL. No se puede usar para comprobar valores NULL.
Se utiliza tanto con subconsultas como con valores. Se usa solo con subconsultas.
La ejecución es más rápida cuando el resultado de la consulta interna es menor. La ejecución es más rápida incluso cuando el resultado de la consulta interna es grande. Es más eficiente que el operador IN.
Sintaxis :SELECCIONE column_names DESDE table_name WHERE column_name IN (subconsulta); Sintaxis :SELECCIONE column_namesFROM table_name DONDE [NO] EXISTE (subconsulta);

Conclusión:

En este tema se ha realizado una comparación entre el operador IN y los operadores EXISTS de SQL. Ambos operadores realizan la misma operación pero su funcionamiento interno es diferente. Tienen diferente funcionamiento lógico. Cualquiera de ellos se puede seleccionar según el requisito. Pero, si el conjunto de datos es grande, siempre se recomienda optar por el operador EXISTS.