SQL - diferencia en select

 
Vista:
sin imagen de perfil

diferencia en select

Publicado por alexis (2 intervenciones) el 25/10/2012 18:00:51
buenos dias que tal, deseaba saber cual era la diferencia o cual seria la ventaja de aplicar un iner join en la siguiente consulta o el de realizarlo de otra forma
o si es por estandar o mejor visualizacion

con iner join
SELECT employee.employee_number
,d.department_name
FROM employee e INNER JOIN
department d
ON e.department_number = d.department_number;


de otra forma usando el where

SELECT employee.employee_number
,d.department_name
FROM employee e , department d
where e.department_number = d.department_number;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
1
Responder
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

diferencia en select

Publicado por leonardo_josue (1173 intervenciones) el 25/10/2012 19:10:24
Hola alexis:

La teoría indica que el resultado debería ser el mismo, y efectivamente la salida es la misma, no obstante, en algunos motores de BD, el utilizar JOIN's es más rápido que hacer las uniones en el FROM-WHERE, en lo particular he comprobado este hecho trabajando con consultas muy grandes, donde intervienen muchas tablas y donde el número de registros se cuentan por millones, es posible que en consultas pequeñas no observes mayor diferencia.

Sin embargo, además del rendimiento, prefiero utilizar JOIN's pues las consultas son más "fáciles de leer", es decir, son más estructuraras, lo que facilita su comprensión. Por un lado separas todas las condiciones que intervienen en la unión de las tablas de las condiciones que utilizas para filtrar la información. Esto te permite por ejemplo identificar si te falta alguna condición en el ON que provocaría un posible producto cartesiano entre tus tablas. Observa este ejemplo:

1
2
3
4
5
6
7
8
9
10
11
SELECT T1.campo1, T1.campo2, T2.campo1, T2.campo2, T3.campo1, T3.campo2, T4.campo1, T4.campo1
FROM Tabla1 T1
INNER JOIN Tabla2 T2 ON T1.campo1 = T2.campo1 AND T1.campo2 = T2.campo2
INNER JOIN Tabla3 T3 ON T1.campo1 = T3.campo1 AND T1.campo2 = T3.campo2
INNER JOIN Tabla4 T4 ON T1.campo1 = T4.campo1 AND T1.campo2 = T4.campo2
WHERE
T1.campo1 = 'algo' AND
(T1.campo2 = 'nada' OR
T1.id IN (1, 2, 3, 4, 5)) AND
T2.fecha BETWEEN '2012-01-01' AND CURDATE() AND
T2.descripcion LIKE '%lo que sea';


¿Podrías encontrar rápidamente en la siguiente consulta qué condición falta incluir?:

1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT T1.campo1, T1.campo2, T2.campo1, T2.campo2, T3.campo1, T3.campo2, T4.campo1, T4.campo1
FROM Tabla1 T1, Tabla2 T2, Tabla3 T3 Tabla4 T4
WHERE
T1.campo1 = T2.campo1 AND
T1.campo1 = 'algo' AND
T1.campo2 = T2.campo2 AND
(T1.campo2 = 'nada' OR
T1.id IN (1, 2, 3, 4, 5)) AND
T1.campo1 = T3.campo1 AND
T2.fecha BETWEEN '2012-01-01' AND CURDATE() AND
T1.campo1 = T4.campo1 AND
T2.descripcion LIKE '%lo que sea';
T1.campo2 = T4.campo2


¿La cosa puede no resultar tan sencilla verdad?, mezclar en el where las condiciones de igualdad, con las condiciones de UNION complica las cosas un poco.

La mayoría de los DBMS actuales ofrecen herramientas para analizar el rendimiento de tus consultas, sería conveniente que probaras ambas formas de hacer las uniones para ver si encuentras alguna diferencia significativa.

Finalmente, recuerda que LEFT JOIN y RIGTH JOIN en algunas BD no pueden ser implementadas utilizando FROM-WHERE

P.D. La condición que falta de incluir es

1
T1.campo2 = T3.campo2



Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

diferencia en select

Publicado por alexis (2 intervenciones) el 25/10/2012 19:17:25
gracias varon, excelente explicacion ya estoy mas claro la verdad no notaba la diferencia pero con lo que me acaba de explciar, implementare lo aprendio
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar