Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Duda Select.. Where vs Inner Join

Estas en el tema de Duda Select.. Where vs Inner Join en el foro de Bases de Datos General en Foros del Web. Saludos compañeros, hoy los quisiera molestar a que me ayudaran a entender el siguiente query. Tomar en cuenta lo siguiente: BASE_A tiene 788669 registros y ...
  #1 (permalink)  
Antiguo 22/10/2010, 19:55
Usuario no validado
 
Fecha de Ingreso: junio-2010
Ubicación: Guatemala
Mensajes: 196
Antigüedad: 14 años, 5 meses
Puntos: 25
Pregunta Duda Select.. Where vs Inner Join

Saludos compañeros, hoy los quisiera molestar a que me ayudaran a entender el siguiente query.

Tomar en cuenta lo siguiente:
BASE_A tiene 788669 registros y BASE_B tiene 1721


Código SQL:
Ver original
  1. SELECT TOP 1000
  2.         BASE_A.CUENTA,
  3.         BASE_A.NOMBRE
  4.         BASE_A.FECHA_EXP
  5. FROM BASE_A, BASE_B
  6. WHERE   BASE_A.CUENTA = BASE_B.CUENTA AND
  7.         BASE_B.ESTADO < 3 OR
  8.         BASE_B.ESTADO > 4 AND
  9.         BASE_A.MONTO  > 0
Tiempo: 5 seg

VS

Código SQL:
Ver original
  1. SELECT DISTINCT TOP 1000
  2.         BASE_A.CUENTA,
  3.         BASE_A.NOMBRE
  4.         BASE_A.FECHA_EXP
  5. FROM BASE_A
  6. INNER JOIN BASE_B
  7. ON      BASE_A.CUENTA = BASE_B.CUENTA AND
  8.         BASE_B.ESTADO < 3 OR
  9.         BASE_B.ESTADO > 4 AND
  10. WHERE   BASE_A.MONTO  > 0
Tiempo: 0 seg (lo muestra inmediatamente)

Mis dudas son las siguientes:
  • De que manera realiza la consulta el Inner Join para que pueda mostrar la información inmediatamente.
  • Porque necesito usar Distinct en el query de Inner Join.
  • Y la última seria, en que casos se recomienda realmente usar Join vs un simple Select Where.

Muchas gracias por su ayuda
  #2 (permalink)  
Antiguo 23/10/2010, 06:11
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Duda Select.. Where vs Inner Join

Son preguntas de manual. En cualquier manual de bases de datos encontrarás las respuestas.
Sinteticamente:
Cita:
De que manera realiza la consulta el Inner Join para que pueda mostrar la información inmediatamente.
INNER JOIN realiza una junta natural por matching de claves, devolviendo sólo los registros que coincidan como se indica en el ON. Esta seleccción (que tiene varios algoritmos diferentes) descarta en la misma medida que va leyendo los registros de la segunda tabla.
Cita:
Porque necesito usar Distinct en el query de Inner Join.
Porque en una relación N:N o 1:N, el mismo registro de A se relaciona con má de uno de B y por tanto si quieres una lista simplificada debes eliminar las duplicidades.
Cita:
Y la última seria, en que casos se recomienda realmente usar Join vs un simple Select Where.
JOIN. los DBMS trabajan en modo estadístico. Dos ejecuciones de la misma sentencia en dos momentos diferentes de tiempo pueden usar algoritmos distintos para obtener el resultado por los diferentes análisis que los parsers determinen.
El problema es que el JOIN es optimizable epor los procedimientos internos de los DBMS para determinar el mejor algorimo, pero el WHERE no.
El WHERE se usa tal y como existe, lo que puede hacer que el DBMS lea completamente las dos tablas antes de aplicar los filtros del WHERE, sin realizar filtrados durante la lectura. En consecuencia, como el JOIN si es optimizable, usar el WHERE para determinar las relaciones es ineficiente. Tiende a permitir productos cartesianos, los que implican inmenso desperdicio de memoria y procesador.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 23/10/2010, 06:58
Usuario no validado
 
Fecha de Ingreso: junio-2010
Ubicación: Guatemala
Mensajes: 196
Antigüedad: 14 años, 5 meses
Puntos: 25
Respuesta: Duda Select.. Where vs Inner Join

Wow muchisimas gracias, es una respuesta bastante entendible

Etiquetas: sql2008
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:32.