Diferencias entre los operadores EXISTS e IN en SQL

Autor: Peter Berry
Fecha De Creación: 11 Agosto 2021
Fecha De Actualización: 17 Noviembre 2024
Anonim
SQL: Difference Between IN and EXISTS Operator
Video: SQL: Difference Between IN and EXISTS Operator

Contenido

Un desafío constante en el uso de SQL es la determinación del uso adecuado de los operadores EXISTS e IN. Los dos operadores pueden producir los mismos resultados, pero no siempre. Además, hay un debate considerable sobre la forma en que cada operador está optimizado para la velocidad. Los usuarios deben entender los diferentes atributos de cada operador y probar los dos para determinar el uso apropiado.


Considere sus objetivos en SQL al elegir EXISTS o IN (Jupiterimages / Photos.com / Getty Images)

Operador IN

El operador IN devuelve una fila si el valor del campo de una tabla satisface la condición WHERE en una lista de valores IN. Normalmente se utiliza como parte de una consulta principal o junto con una subconsulta.

Ejemplo 1: WHERE tabla.campo IN ('a', 'b', 'c') Ejemplo 2: WHERE tabla.campo IN (Subconsulta que devuelve un conjunto)

Operador EXISTS

El operador EXISTS devuelve todas las líneas principales si una subconsulta contiene alguna línea. Se utiliza sólo junto con una subconsulta. Las líneas devueltas se determinan por el filtro en la consulta principal.

Ejemplo: WHERE EXISTS (Subconsulta que devuelve un conjunto)

diferencia

El operador IN no puede evaluar valores NULL, por lo que tales líneas siempre serán falsas, y no serán devueltas, a diferencia del operador EXISTS, que evalúa y devuelve filas con valor NULL.


similitudes

Ambos EXISTS e IN soportan subconsultas correlacionadas y no correlacionadas, y ambas pueden producir resultados similares. Cuando se correlacionan, satisfacen un campo de consulta principal a un campo de subconsulta (por ejemplo: principal.id = subconsulta.id). La subconsulta evalúa línea por línea para cada instancia encontrada. En este caso, IN y EXISTS devuelven las mismas líneas según las condiciones "id" similares. Cuando no están correlacionados, los dos operadores procesan sus subconsultas y luego combinan los resultados para la consulta principal.

rendimiento

El rendimiento es determinado por el optimizador de la base de datos y el plan de ejecución utilizado para el código que se ejecuta. Para EXISTS e IN, el optimizador puede elegir caminos diferentes. En Oracle, NOT EXISTS normalmente es más rápido que el NOT IN. Al final, algunos intentos y errores son necesarios para clasificar la ruta más corta, dependiendo de la base de datos y la versión que se utiliza. Asegúrese de utilizar el operador que garantiza los resultados correctos en primer lugar, y luego intente sustituir a los operadores para ver cuál es el más rápido.