EITSAEB

Team Peacemaker Hater
Se incorporó
10 Septiembre 2006
Mensajes
4.643
Amiguitos por mas que he leído del tema aun no entiendo para que carajo me sirve un JOIN (left o right).De lo que poco que entiendo ¿No afectarla eso a un modelo que ya está correctamente normalizado?


¿Es mussho pedir si me dan una explicación con peras y manzanas para dummies ( AKA yo) sobre cual serìa la utilidad de estas instrucciones?



Gracias :amocapa9
 

Harima

Pegao al tarro
Se incorporó
15 Mayo 2008
Mensajes
3.932
yo cuando tengo dudas consulto esto

Visual_SQL_JOINS_orig.jpg
 
Upvote 0

Zuljin

Fundador
Miembro del Equipo
Fundador
ADMIN
Se incorporó
15 Enero 2004
Mensajes
11.782
Amiguitos por mas que he leído del tema aun no entiendo para que carajo me sirve un JOIN (left o right).De lo que poco que entiendo ¿No afectarla eso a un modelo que ya está correctamente normalizado?


¿Es mussho pedir si me dan una explicación con peras y manzanas para dummies ( AKA yo) sobre cual serìa la utilidad de estas instrucciones?



Gracias :amocapa9

Los Joins se utilizan precisamente en un modelo normalizado.

Imagínate que tenemos la tabla de temas de Capa9. Esas tablas tiene los temas y en un campito el código del usuario que los creó.
¿Cómo podemos saber el nombre del usuario que creó el tema? Pues relacionando con un join las tablas tema <-> usuario. Así, el tema dice que lo creó el usuario con código 10349, y la tabla de usuarios nos dice que el usuario 10349 es EITSAEB.

Código:
select nombre_usuario
from usuario
left join temas ON (usuario.codigo_usuario = tema.codigo_usuario)
where tema.nombre_tema = "duda con join".

¿Y por qué no poner derecho el nombre del usuario en la tabla de temas, si con eso nos ahorramos el hacer el join?
Imagínate que ponemos el nombre del usuario en la tabla de temas. Luego, el usuario quiere cambiarse de nombre. Tendríamos que modificar TOOOODA la tabla de tema para cambiar el nombre.
En cambio, si la tabla está normalizada pues cambiamos el nombre el la tabla de usuarios y listo.


Hay casos excepcionales en que por un tema de rendimiento no te queda otra que desnormalizar para no hacer joins. No es recomendable pero hay veces en que no te queda otra.
 
Upvote 0

EITSAEB

Team Peacemaker Hater
Se incorporó
10 Septiembre 2006
Mensajes
4.643
pero me quedan varias dudas

Esto del join se puede reemplazar con un select-from-where ? ¿Que se gana con un Join?

¿el join es "temporal" como una vista, una simple consulta de asociación, o es una nueva tabla o la modificación de una existente?

tumblr_lm4rydFoTm1qbdxmi.gif
 
Upvote 0

Harima

Pegao al tarro
Se incorporó
15 Mayo 2008
Mensajes
3.932
pero me quedan varias dudas

Esto del join se puede reemplazar con un select-from-where ? ¿Que se gana con un Join?

¿el join es "temporal" como una vista, una simple consulta de asociación, o es una nueva tabla o la modificación de una existente?

tumblr_lm4rydFoTm1qbdxmi.gif

Tecnicamente niguna, en rendimiento ninguna.

Pero, es por un tema de buenas practicas, además hay consultas que es imposible hacerlas con select anidados, solo se pueden hacer con Join.
Por ejemplo el caso de que quieres mostrar todos los usuarios y su cantidad de posts, con un select anidado solo te mostraria los usuarios que tienen 1 o mas post, con el Join puedes mostrar todos los usuarios, aunque tengan 0 post.
 
Upvote 0

Zuljin

Fundador
Miembro del Equipo
Fundador
ADMIN
Se incorporó
15 Enero 2004
Mensajes
11.782
pero me quedan varias dudas

Esto del join se puede reemplazar con un select-from-where ? ¿Que se gana con un Join?

No, no se puede.

Utilizando el mismo ejemplo, el join te permite obtener valores de campos de las dos tablas y por ende utilizarlo. Es la mejor forma de en una sola query tener el nombre del tema y el nombre del usuario que creó el tema.

Código:
select usuario.nombre_usuario, tema.nombre_tema
from usuario
left join temas ON (usuario.codigo_usuario = tema.codigo_usuario)
where tema.nombre_tema = "duda con join"

¿el join es "temporal" como una vista, una simple consulta de asociación, o es una nueva tabla o la modificación de una existente?

tumblr_lm4rydFoTm1qbdxmi.gif

Conceptualmente si, el join es algo temporal. No reemplaza nada, es sólo datos que la base de datos te junta en memoria y te muestra sus resultados. No es una nueva tabla.
 
Upvote 0

EITSAEB

Team Peacemaker Hater
Se incorporó
10 Septiembre 2006
Mensajes
4.643
vale vale. Me quedo mas claro. Voy a darle una vuelta mas para ver si sirven de acuerdo a los requerimientos que tengo. :amocapa9
 
Upvote 0

nibal2

pajarón nuevo
MOD
Se incorporó
15 Junio 2007
Mensajes
2.897
Buen tema.

Generalmente cuando tengo que hacer join complejo, siempre termino mirando la documentación. Por alguna razón el funcionamiento no me queda grabado.
 
Upvote 0
Subir