ElTicus.com

Programación, lenguajes y recursos para programadores

Manual
Aprende como funcionan los JOINS en SQL
Primera parte
Publicado por jl Fecha: 2008-04-09 16:17:04 Idioma: Español Tipo de documento: Manual

Como funcionan los JOINS en MYSQL

La instrucción JOIN en SQL sirve para unir dos tablas en base a un criterio, el cual generalmente es un campo llave.

Primera parte: Utilizando el INNER JOIN

Por ejemplo, teniendo las siguientes dos tablas:

USUARIOS
IDNOMBREORIGEN
1JUANCOLIMA
2PEDROCOLIMA
3LUISJALISCO
4CARLOSGUADALAJARA

VENTAS
IDARTICULOFECHAIDCLIENTE
1Balon basketbol #52008-03-12999
2Raquetas de Ping Pong2008-03-021
3Guantes de portero XL2008-02-20999
4Tenis nike Modelo 12752008-01-302
5Rodilleras infantiles barbi2008-01-113

Tenemos que la tabla ventas tiene un campo llamado IDCLIENTE el cual corresponde con el campo ID de la tabla usuarios.
Entonces, vamos a hacer una consulta con un INNER JOIN que nos devuelva la unión de esas dos tablas.

La consulta quedaría así:

SELECT * FROM ventas INNER JOIN usuarios on ventas.idcliente=usuarios.id;

La ejecutamos y nos devuelve la siguiente tabla:

RESULTADO DEL INNER JOIN
IDARTICULOFECHAIDCLIENTEIDNOMBREORIGEN
2Raquetas de Ping Pong2008-03-0211JUANCOLIMA
4Tenis nike Modelo 12752008-01-3022PEDROCOLIMA
5Rodilleras infantiles barbi2008-01-1133LUIS JALISCO

La cual corresponde a la unión de las dos tablas.

Nótese que NO aparecieron aquellos registros que NO tení­an una correspondencia, o sea que no apareció el usuario CARLOS que no tenía ninguna venta ni las ventas cuyo IDCLIENTE era 999.

Entonces, de una tabla de 4 elementos, relacionada con otra tabla de 5 elementos, nos quedó una tabla de 3, los cuales corresponden a la intesección de ambas.




Segunda parte: Utilizando LEFT JOIN y RIGHT JOIN

Existen otras dos formas del JOIN que sirven también para relacionar dos tablas, se trata de "LEFT JOIN" y "RIGHT JOIN". La diferencia con el INNER es que con estas podemos indicarle que una de las tablas tiene una Jerarquía mayor que la otra.

En el caso de LEFT JOIN la tabla de la izquierda la consideramos como Relevante y por tanto queremos que simpre aparezcan los elementos de esta, independientemente de que tengan un equivalente en la tabla mensionada del lado derecho del JOIN.

Para terminar de comprenderlo, veamos un ejemplo:

SELECT * FROM ventas LEFT JOIN usuarios on ventas.idcliente=usuarios.id;

Utilizamos exactamente la misma sentencia pero en lugar de INNER JOIN ponemos LEFT JOIN. El resultado será el siguiente conjunto de registros o recordset:

RESULTADO DEL LEFT JOIN
IDARTICULOFECHAIDCLIENTEIDNOMBREORIGEN
1Balon basketbol #52008-03-12999NULL NULL NULL
2Raquetas de Ping Pong2008-03-0211JUANCOLIMA
3Guantes de portero XL2008-02-20 NULL NULL NULL
4Tenis nike Modelo 12752008-01-3022PEDROCOLIMA
5Rodilleras infantiles barbi2008-01-1133LUIS JALISCO

El resultado fue una tabla de 5 renglones, esto quiere decir que la tabla de la izquierda o "Tabla Left" se desplegó en su totalidad y aquellos registros de la tabla secundaria que pudieron relacionarse se incluyeron y aquellos que no tuvieron relación aparecen como valores NULOS.


NOTA: Pera cuestiones de una mejor comprensión del resultado esperado de la consulta anterior, podemos interpretarlo en lenguaje natural como: Listado de todos los artículos vendidos incluyendo, si se tiene, la información del comprador .


En este momento el lector ya debe imaginarse la función del operador RIGHT JOIN, el cual obviamente tiene la función complementaria al LEFT JOIN. Con el RIGHT JOIN es la tabla mencionada del lado derecho la que tiene la Jerarquía y por lo tanto será la de la derecha la que aparecerá completa.

Probemos con la misma consulta, pero utilizando RIGHT esta véz:

SELECT * FROM ventas RIGHT JOIN usuarios on ventas.idcliente=usuarios.id;

Y el resultado es:

RESULTADO DEL RIGHT JOIN
IDARTICULOFECHAIDCLIENTEIDNOMBREORIGEN
2Raquetas de Ping Pong2008-03-0211JUANCOLIMA
4Tenis nike Modelo 12752008-01-3022PEDROCOLIMA
5Rodilleras infantiles barbi2008-01-1133LUIS JALISCO
NULL NULL NULL NULL 4CARLOS GUADALAJARA

NOTA: Igualmente podemos realizar nuestra interpretación de la consulta de la siguiente manera: Listado de todos los clientes incluyendo, si se tiene, la información de su compra.
Lo cual es válido aún cuando sería más apropiado presentar la información con los valores nulos del lado derecho.



Tercera parte: Otras consideraciones


Utilizar "Tabla1 LEFT JOIN Tabla2" es equivalente a utilizar "Tabla2 RIGHT JOIN Tabla1"


En los ejemplos presentados anteriormente se utilizaron tablas que tenían una relación de uno a uno entre los registros. Pero que pasaría si, por ejemplo, ¿uno de los clientes tuviera 3 compras registradas? En este caso, el uso de cualquiera de los 3 JOINS devolvería dicho registro duplicado tantas veces como relaciones tuviera. Es decir, tres veces.




Nadie ha puesto ningún comentario todavía


Haz un comentario sobre este tema
Nombre email (no se muestra)
comentario:
Escribe las 2 letras que ves aquí: Imagen anti-spam =




No hay comentarios

Artículos relacionados:
código fuente Como ponerle un contador de visitas a tu sitio en menos de 5 minutos. Tip Como agregar un campo ID a una tabla y hacerlo llave primaria al mismo tiempo Recurso no clasificado Solución al error: Client does not support authentication protocol requested by server. Tip Como recuperar los primeros N caracteres de un campo de texto sin enters ni tabuladores. código fuente Generar una tabla HTML desde una Base de Datos MYSQL
Recurso no clasificado Aprendiendo MySQL con PHP Truco Conteo Condicionado en Mysql