INNER JOIN: Consulta Mysql para Unir Tablas Relacionadas

>> Video Curso Gratuito de PHP y Mysql (no requiere registración)

Les dejo también un video donde explico y doy ejemplos del INNER JOIN. Dale a me gusta!

Supongamos que tenemos una Tabla Mysql llamada “Empresas” y otra tabla “Servicios”.

Y nos interesa mostrar en pantalla los servicios que brinda cada empresa, considerando que cada fila de la tabla “Servicios” tiene un valor asociado a la empresa que pertenece.

(ver el siguiente grafico)

Consulta Mysql INNER JOIN para unir tablas relacionadas
¿Cómo listar todas las empresas y sus servicios correspondiente?
Lo hacemos utilizando INNER JOIN mediante la siguiente Consulta Mysql:


>> Ver resultado de la consulta Mysql INNER JOIN citada arriba


Nota 1:: Como se puede observar en el resultado, la empresa YouTube queda afuera del listado. El motivo es que no tiene ningún servicio asociado en la tabla SERVICIOS (no existe servicio que tenga IdEmpresa=3).

Nota 2:: Deseas ganar dinero desde tu casa y programando sitios en PHP?
En Freelancer.com podrás encontrar los requerimientos de muchos clientes, publicar tu presupuesto y obtener proyectos!

Si quisieramos listar todas las empresas, independientemente que tengan servicios o no, debemos utilizar la Consulta Mysql LEFT JOIN

¿Cómo se interpreta las tablas Mysql y consulta que hicimos arriba?

Observemos que hay una columna llamada “IdEmpresa” en la tabla “Servicios” en donde se especifica el identificador de la empresa a la cual pertenece el servicio en cuestión. Por ejemplo, el servicio “Registro de dominios” tiene IdEmpresa=2, por lo tanto pertenece a la empresa Solo10.com.

Buscas dominio para tu sitio y un excelente hosting con soporte técnico en español?
Te recomiendo mi proveedor: Solo10.com

Para comprender esta consulta mysql, te conviene leerla de la siguiente manera. Imaginemos que estamos conversando con el motor de base de datos mysql y le decimos:

  • Traeme todas las filas de la tabla mysql llamada “Empresa” (ver línea número 2: “from Empresas”)
  • A cada fila, agregale las columnas de la tabla mysql “Servicios” (únicamente las columnas de aquellas filas en donde IdEmpresa sea igual al Id de la empresa correspondiente a la fila actual en la tabla Empresas) (ver línea número 3: “inner join Servicios on Servicios.IdEmpresa=Empresas.Id”)
  • De todo ese conjunto de columnas, dame únicamente la columna “Nombre” de la tabla Mysql “Empresas” y “Servicio” de la tabla mysql “Servicios”. (ver línea número 1: select Empresas.Nombre,Servicios.Servicio)

Nuestro código fuente php quedaría completo de la siguiente manera:


Las últimas líneas del código, tal como hemos visto hace un tiempo, son para leer e imprimir en pantalla los resultados de una consulta Mysql.





Deseas ganar dinero desde tu casa y programando sitios en PHP?
En Freelancer.com podrás encontrar los requerimientos de muchos clientes, publicar tu presupuesto y obtener proyectos!

Buscas dominio para tu sitio y un excelente hosting con soporte técnico en español?
Te recomiendo mi proveedor: Solo10.com


También te puede interesar



Te agradaría derivar tu proyecto a un programador con años de experiencia?

Ing. Diego Angelini.
Autor de BlogdePHP.com
Programador Web Freelance






Porfolio de proyectos
  • http://www.juliopari.com Julio

    Ahí falta lo que es LEFT JOIN, RIGHT JOIN

  • http://www.blogdephp.com Diego

    LEFT JOIN y RIGHT JOIN están previstos para el próximo post :-)

    Gracias por participar Julio!

  • http://www.livebuzz.tk Joseph

    Hola usuarios. tengo una duda con algo qu he estado investigando y lo cual me ha detenido en el avance de mi proyecto.

    Sucede que en una tabla mysql tengo un campo tipo DATETIME llamado registro_fecha del cual solo quiero extraer la fecha almacenada. NO La HORA!!….. como seria esto posible en PHP mediante un ECHO ??????

  • http://www.blogdephp.com Diego

    Hola Joseph, gracias por tu consulta y por participar en el blog.

    Si tienes un campo DATETIME, seguramente visualizas las fechas de la siguiente manera:
    2011-07-11 18:04:45

    Un truco fácil que se me ocurre es tomar sólo los 10 primeros caracteres e imprimirlo en pantalla, de esta manera queda afuera la hora.

    La sentencia sería:
    echo substr($Fecha,0,10)

    donde $Fecha es la variable donde tienes almacenada tu fecha en forma formato DATETIME.

    Por favor, dejame saber si te ha funcionado el truco y puedes seguir adelante con tu proyecto.

    Un gran saludo para ti y para todos los miembros de la Facultad Informática de Panamá

  • http://www.livebuzz.tk Joseph

    Genial….Gracias por responder a mi duda…..creo q m estaba complicando y ahogando en un vaso de agua..Saludos desde Panamá!…Gracias

  • Carlos

    hola que tal, muy buen blog quisiera algo asi parecido o al menos eso creo, lo que pasa es que quiero mostrar por ejemplo un nombre en vez de la clave almacenada. o sea que me muestre los datos asi como este pero que en vez de todos esos me muestre uno especifico de acuerdo a su clave,,no se si me explico espero y puedas ayudarme gracias

  • http://blogdephp.com/consulta-mysql-left-join-right-join-unir-tablas-relacionadas/ LEFT JOIN: Consulta Mysql para Unir Tablas Relacionadas

    [...] a la práctica! Cuando analizamos el ejemplo de INNER JOIN en Mysql teníamos el siguiente esquema de [...]

  • diego

    ok

  • Diegonoe06

    si, puede ser

  • Blogdephp

    ahh, listo

  • Diegonoe06

    me alegra, bye

  • http://www.facebook.com/people/Edward-Cardenaas/1024090005 Edward Cardenaas

    saludos desde Monterrey, México, excelente artículo, blog e iniciativa :)

  • Diegorodg07

    como le harias si por ejemplo desde un formulario pides el id de la empresa y quieres que solo se muestren( por ejemplo si se introduce 1) q solo se muestren los servicios de la empresa con id 1

  • http://www.blogdephp.com/ BlogdePhp.com

    Hola Diego, gracias por participar del post sobre INNER JOIN en BlogdePHP.com.

    Tendrías que agregar el siguiente renglón en la consulta Mysql:

    where Empresas.Id=$_POST['id_empresa']

    Donde $_POST['id_empresa'] sería el valor ingresado por el usuario en el formulario.

    Coméntame si te funciona. Saludos.

    Ing. Diego Angelini
    Director BlogdePHP.com

  • Alfonso_ssa

    Saludos.
    Cual es la diferencia de usar el inner join o usar esta consulta

    select Empresas.Nombre,Servicios.Servicio
    from Empresas, Servicios
    where Empresas.Id=Servicios.Id

  • http://www.blogdephp.com/ BlogdePhp.com

    Hola Alfonso, gracias por tu consulta.

    Estas semanas se habló sobre ese tema en el foro, puedes verlo en el siguiente link:
    Diferencia entre INNER JOIN y Where en Mysql

  • Micorrexcelent

    Oies allí dice como mostrar los datos pero ¿como uno las columnas de una tabla a otra?. eso si es lo dificil.

    osea como agrego las columnas de la tabla2 a la tabla1 con todo y datos teniendo en cuenta que los ids son iguales en ambas
    ejemplo
    tabla1
    id: 1
    Nombre: juan

    tabla2: 
    id: 1
    Apellido: perez

    de tal manera que quede asi:
    tabla1id: 1Nombre: juan
    Apellido: perez

    como se hace eso?
    manualmente no puedo por que son miles y miles de registros.

  • Micorrexcelent

    Hola que tal de nuevo.

    ya hice eso que pregunte, se me ocurrio agregar las columnas y despues hacer el update where.
    ahora mi otro problemacomo fusiono 40 bases de datos que tienen exactamente la misma estructura con la diferencia de que son diferentes datos y con la igualdad de que los ids inician en 1 todos. de antemano gracias

  • Edgar SC

    Excelente explicación, me sirvió mucho.

  • http://www.blogdephp.com/ BlogdePhp.com

    gracias Edgar, me alegra tu comentario :)

  • Eri

    hola a todos, necesito guardar dos registros uniendo con un id en dos tablas en php, porfavor ayudenme, se los agradecere mucho, gracias…..

  • Ismael Palacio

    Hola, el ejemplo se ve muy claro, pero ¿cómo devolver los resultados de la siguiente forma?

    solo10.com: Registro de dominios, Web hosting, Consulta de disponibilidad

    google.com: Búsqueda de pags web, gmail, google analytics

    Muchas gracias.

  • Stiven Faustino

    que mamera esa publicidad fija en el footer

  • Maximiliano Villalobos

    Hola. Una consulta. Tomando el ejemplo citado arriba,¿como hago para que me muestre todas las filas? de ambas tablas tengan o no algo con que relacionarse en la otra tabla. Gracias

  • Andy

    hola disculpa tengo un programa en el cual de tres tablas puedo seleccionar diferentes caracteristicas, las cuales deben aparecer una tabla o grid, como le hago?