2010-08-05 33 views
5

Estoy creando una consulta que mostrará información para un registro que se deriva de 8 tablas. El desarrollador que originalmente escribió la consulta utilizó una combinación de 'donde esto equivale a esto' Y 'esto es igual a esto' para crear las uniones.SQL INNER JOIN pregunta

He cambiado la consulta para utilizar INNER JOINS. Me preguntaba si mi enfoque era mejor que utilizar una combinación de operadores WHERE.

En una medida de buenas prácticas, una combinación de INNER JOINS es una buena opción o debería emplear una técnica diferente.

Respuesta

3

Desde el punto de vista del rendimiento, no habrá ninguna diferencia ... al menos no en RDBMS prominentes como Sql-server/Oracle ... Estos motor de base de datos, son capaces de identificar ambos patrones significa lo mismo y usar el mismo plan de ejecución para ambos ...

En mi humilde opinión, ambos son igualmente buenas prácticas, pero debe mantener la coherencia y la alineación adecuada ... En algún lugar he oído que whereracle son generalmente utilizados por los desarrolladores de Oracle, y la unión interna Sql-Server ... No estoy muy seguro de eso ... En este momento la mayoría de los codificadores son capaces de entender ambos tipos de consultas ...

+0

uso MySQL y generalmente prefieren INNER JOIN simple porque yo. el código parece más limpio y parece más fácil de entender. Estoy en lo cierto al pensar que una Unión interna se usará cuando haya un registro en ambas tablas. –

+0

Sí ... La combinación interna solo obtendrá los registros que tienen un registro coincidente en la tabla secundaria ... Si no hay un registro coincidente en la tabla secundaria, esa fila en particular se excluye del resultado de la consulta. –

+0

Me pregunto si puede ayudarme con la consulta que estoy haciendo? Está devolviendo demasiados registros que había anticipado. –

0

Ambos se comportarán igual (como dijo The King). Personalmente prefiero la sintaxis INNER/OUTER/LEFT JOIN porque es más intuitiva/explícita. Cuando ingresas a LEFT JOINs con condiciones de unión en la cláusula WHERE, entonces tienes que usar signos más y luego tienes que recordar de qué lado ponerlos. Urgghh.

También parece (de nuevo como dijo The King) que es cierto que los desarrolladores de Oracle están a favor de poner las condiciones de unión en la cláusula WHERE.

-Jamiet

1

que creo que no hay diferencia de rendimiento entre ambos:

ANSI Estilo
SELECT * FROM Table1 a JOIN TABLE2 b on a.id = b.id

viejo estilo
SELECT * FROM Table1 a , TABLE2 b
WHERE a.id = b.id

El estilo ANSI es más nuevo y más legible y bonito, prefiero el estilo antiguo, especialmente cuando se trata de unir más de 4/5 tablas ... tal vez porque soy un desarrollador de Oracle como se dijo antes o_O