Un desafío persistente en el uso de SQL consiste en determinar el uso adecuado de los EXISTS e IN . Los dos operadores pueden producir los mismos resultados, pero no siempre lo haga. También , hay un debate considerable sobre cómo está optimizado para la velocidad de cada operador . Los usuarios deben entender los diferentes atributos de cada operador y probar los dos para determinar la función adecuada . EN Operador
el operador in devuelve una fila si un valor DONDE tabla.campo acondicionado, coincide con una lista de en valores. EN se utiliza normalmente como parte de una consulta principal o junto con una subconsulta
Ejemplo 1 . DONDE Tabla.Campo en ('a' , 'b ', ' c' )
Ejemplo 2 : ¿DÓNDE Tabla.Campo en ( el regreso de subconsulta conjunto de valores )
EXISTE operador
el operador EXISTS devuelve todas las principales líneas de consulta si la subconsulta contiene ninguna fila.
EXISTE
sólo se utiliza en conjunción con una subconsulta . Filas devueltas se determinan mediante el filtrado a nivel de consulta principal . Ejemplo: Cuando exista ( el regreso de subconsulta conjunto de valores )
Diferencia
no puede evaluar NULL , por lo que las filas son siempre falsas , y no regresaron .
EXISTE
puede evaluar NULL , por lo que las filas se pueden devolver .
Similitudes
EXISTE y en ambos apoyo subconsultas correlacionadas y no correlacionadas , y ambos pueden producir principales resultados similares . Al correlacionar las que existe y en el partido de un campo principal de consultas a un campo subconsulta (ex : main.id = subquery.id ) . La subconsulta se evalúa fila por fila , para cada coincidencia encontrada . En este caso, IN y EXISTS devolverá las mismas filas en función de los partidos Identificación similares. Cuando no correlacionados , existe y EN proceso de sus subconsultas primero , y luego los resultados coinciden con la consulta principal .
Rendimiento del EXISTE Y EN
rendimiento se determina por la base de datos optimizador y el plan de ejecución se emplea para el código que se ejecuta . Para EXISTS e IN , el optimizador puede elegir diferentes caminos. En Oracle , esto es, NO EXISTE evitar un anti -join , y por lo general demostrando rápido que NO IN. Al final, se requiere un poco de ensayo y error para referencia el camino más rápido dependiendo de la base de datos y su versión en uso. Asegúrese de utilizar el operador que garantiza los resultados correctos , luego si todo es lo mismo, intentar EXISTS sustitución y para ver realmente lo que es más rápido .