INNER JOIN para unir Tablas
Escrito por Alex Barros Muy bien, aprendices del Sql, hoy hablaremos de la instrucción INNER JOIN. Muy útil para casos concretos.
Primero de todo vamos a crear una situación hipotética:
Imaginemos que tenemos que hacer una web que contiene unos artículos en referencia a comentarios de novelas, y que son doce escritores de prestigio los que van introduciendo esas críticas.
Lo normal y más básico para un programador sería pensar en base de datos y lenguaje dinámico. Una buena elección podría ser trabajar con PHP y MySql (aunque para lo que voy a decir basta con una base de datos de tipo Sql).
Lo primero que nos viene a la mente es: haré una tabla, llamémosla criticas. En ella almacenaríamos cada artículo. Los campos básicos serían ID, Libro, Escritor (del libro, nunca confundir con el autor de la crítica), Editorial, año … y Autor de la crítica.
Pero y si quisiéramos, como es normal, poner en la misma crítica una referencia al autor de la critica, aúnque sólo sea un pequeño texto biográfico? Tendríamos que repetir un mismo texto repetidas veces en la base (la biografia de doce autores en, pongamos 150 registros) y si quisieramos modificarlo y hubiera 70 entradas con ese autor… eso sería un desastre.

Entonces queda claro que hay que hacer una referencia a otra tabla que contenga a los autores, con sus respectivos datos. La tabla autores. Cada autor tendría su ID, su nombre y su biografía, además de otros datos como webpage, e-mail, bibliografía…
Algunos dirían: pues fácil, haces dos querys a la base. en uno le dices
-
SELECT * FROM criticas WHERE ID =‘37′
y en otra
-
SELECT * FROM autores WHERE …
where qué? tendrías que sacar una variable de sql a php, otra vez a sql…
Nada! Si alguien sugiere eso desconfiad de él y de su familia (es broma ;D) existe un método sencillo y eficaz: el INNER JOIN
Tan sencilla es la sentencia como:
-
SELECT * FROM criticas INNER JOIN autores ON criticas.autor = autores.id WHERE criticas.id=‘7′
De esta forma estamos uniendo las dos tablas, cada vez que en criticas el autor sea n, en autores se unirá su correspondiente fila, con id=n.
Traduciendo al español la sentencia dice exactamente:
SELECCIONA TODOS LOS CAMPOS UNIENDO criticas CON autores DONDE el campo autor de la tabla criticas SEA IGUAL A el campo id de la tabla autores EN EL REGISTRO EN QUE el id de criticas sea 7
En definitiva, el inner join une dos tablas, donde encajan un campo de una con el mismo de la otra.
A partir de ahora las tablas se hacen más manejables y flexibles.
Y recordad!:
- Para seleccionar campos de cada tabla : tabla.campo universal en sql, dato importante.
- Estructura del inner join: SELECT campos FROM tabla1 INNER JOIN tabla2 ON tabla1.campo = tabla2.campo
- Antes de hacer barbaridades con vuestras bases de datos documentaos un poco, lo digo por experiencia
Lee también: Explicación visual de los SQL Join
Categorias: Código, HOWTO/CóMO, MySQL |



Noviembre
21:22 Hacker Ha dicho:
Está muy bien, pero yo necesito como unir más de dos tablas, espero que puedan ayudarme… gracias
Marzo
12:09 McGregor Ha dicho:
Hola, he estado leyendo tu artículo, y quería preguntarte a cerca de un INNER JOIN distinto al que tienes aqui. Estoy intentando juntar los datos de dos DB distintas, pero que son iguales (en estructura, nombres de las tablas y relaciones). El problema es que tienen una autonumérico como clave primaria y además hay valores que existen en las dos tablas (con el mismo autonumérico). El problema está en que quiero coger lo que hay en una DB y lo que no esté en la otra quiero añadirlo.
Gracias por tu tiempo
Un saludo
Mayo
15:14 endre Ha dicho:
buenos dias necesito que me saquen de una duda. tengo varias tablas y necesito enviarlas todas a una sola hoja para lograr imprimir esta. el problema esta en que no se como hacer por favor ayudenme!!!! es urgente enviaeme la resp a mi correo por favorrr
Mayo
20:52 Alex Barros Ha dicho:
Hola endre, no me gustar ser descortés; pero como tu lo has sido, yo tamién lo sere:
Aqui no somos criados de nadie. Si tienes una duda y podemos ayudarte, lo haremos con mucho gusto, pero tómate la molestia de hacerlo respetuosamente, y explicando mejor el problema. Si tienes prisa no es nuestro problema.