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.