Ver Mensaje Individual
  #1 (permalink)  
Antiguo 18/10/2011, 12:26
bigwhite
 
Fecha de Ingreso: agosto-2009
Mensajes: 247
Antigüedad: 15 años, 4 meses
Puntos: 10
INNER JOIN [ejemplos para aprender]

Buenas...esto es supuestamente un aporte aunque se que es una bobada para muchos pero a mi me costo mucho entenderlo y la verdad hubiera querido ver algo como lo que expongo en algun tutorial.

La idea de los INNER JOINs es poder acceder a campos de una tabla Z relacionada con una tabla X, posiblemente tambien teniendo que pasar por una tercera (o hasta 4ta o...n-esima) tabla relacionada Y.

X---Y----Z

Casi siempre se relacionan por IDs ... asi que digamos que X son compradores, Y son mercaderias y Z son proveedores, como se puede pensar... debo poder conocer el proveedor de un producto que compro un comprador ante una reclamacion (por ejemplo). Por supuesto cada comprador tiene su ID (podria ser su DNI), cada producto su ID_producto y cada proveedor su ID_proveedor.

En general seria algo asi....
Código SQL:
Ver original
  1. SELECT __(campos)___ FROM ___(tabla1)___
  2. INNER JOIN _(tabla2)____
  3. ON (id_tabla1=id_tabla2)
  4. WHERE condiciones_para_cualquier_campo_de_cualquier_tabla

o para 3 tablas (como en el mini-ejemplo)

Código SQL:
Ver original
  1. SELECT __(campos)___ FROM ___(tabla1)___
  2. INNER JOIN _(tabla2)____
  3. ON (id_tabla1=id_tabla2)
  4. INNER JOIN _(tabla3)_  ON
  5. (id_tabla2=id_tabla3)
  6. WHERE condiciones_para_cualquier_campo_de_cualquier_tabla

donde las condiciones WHERE o cualquier LIMIT va al final y son opcionales.

Asi se puede hacer PERFECTAMENTE pero es mucho mas facil de seguir y evitar confundirse si usamos "alias" para los nombres de las tablas:

o... para 3 tablas

Código SQL:
Ver original
  1. SELECT t1.* FROM TTTT AS t1
  2. INNER JOIN  TTTT AS t2 ON
  3. t1.id_ = t2.id_
  4. INNER JOIN TTTT AS t3 ON
  5. t2.id_  = t3.id_


y... para 4 ...

Código SQL:
Ver original
  1. SELECT t1.* FROM TTTT AS t1
  2. INNER JOIN  TTTT AS t2 ON
  3. t1.id_ = t2.id_
  4. INNER JOIN TTTT AS t3 ON
  5. t2.id_  = t3.id_
  6. INNER JOIN TTTT AS t4 ON
  7. t3.id_  = t4.id_

Donde TTTT son los nombres de las distintas tablas. Puede verse como este tipo de estructura es totalmente predecible y se puede generar facilmente en cualquier ORM.

Saludos! y no se enojen los que saben.
__________________
The best powerful search engine for MSN messenger profiles I know is msn profile viewer. It's really good either if you have an e-mail address or not. Try it!

Última edición por gnzsoloyo; 25/03/2013 a las 18:49