INNER, LEFT y RIGHT JOIN

Supongamos que tenemos una Tabla Mysql llamada “categories” y otra tabla “services”.

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

Al efectuar un INNER JOIN entre la tabla «categories» y la tabla «services», Observamos que la categoría Nueva (category_id=9) queda fuera del listado de resultados puesto que no existe ninguna fila en la tabla «services» con category=9.

SELECT name, title FROM categories c
INNER JOIN services s ON (s.category=c.category_id)

En la consulta anterio mostramos el nombre de la categoría y el servicio asociado teniendo en cuenta que las categorías que no tengan servicios no se muestran en los resultados.

La consulta LEFT JOIN devuelve todas las filas de la tabla citada en la cláusula “FROM” y sus filas vinculadas en la tabla citada dentro de la cláusula “LEFT JOIN” (incluyendo aquellas filas que no tengan filas vinculadas).

SELECT name, title FROM categories c
LEFT JOIN services s ON (s.category=c.category_id)

Al hacer LEFT JOIN estamos dando prioridad a la tabla de la izquierda, es decir, «categories», por tanto, se mostrarán todas, aunque no tengan servicios asociados.

En el caso del ejemplo, LEFT JOIN nos sirve para listar todas las categorías y sus servicios correspondientes. Las categorías que no tienen ningún servicio también formarán parte del resultado. (en el caso de INNER JOIN, las categorías que no tienen servicio quedan fuera).

RIGHT JOIN funciona similar a LEFT JOIN pero en viceversa. Es decir, se listan todas las filas de la tabla Mysql citada en la cláusula “RIGHT JOIN”, incluyendo aquellas que no tienen ninguna fila vinculada en la tabla citada dentro de la cláusula “FROM”.

SELECT name, title FROM categories c
RIGHT JOIN services s ON (s.category=c.category_id)

Si se produjera el caso de que hubiera servicios que no están incluidos en ninguna categoría, se mostrarían en este resultado con category=NULL.

Cierto es que estas querys también se pueden realizar utilzando la sentencia WHERE de mysql de la siguiente forma:

SELECT name, title FROM categories c, services s 
WHERE s.category=c.category_id

Por lo tanto, nos estaremos preguntando…

¿Que ventajas obtenemos al utilizar INNER, LEFT y RIGHT JOIN en vez de introducir las condiciones en el WHERE?

La respuesta radica en la optimización de consultas. Imaginemos que tenemos una tabla «categories» que tenga 50 columnas y la tabla «services» tenga 30, al usarla con WHERE lo que estaríamos haciendo es llamar EN MEMORIA a todos los campos de ambas tablas y mostrando las columnas seleccionadas, es decir la sentencia tiene en memoria 80 columnas con sus registros respectivos… esto es mucha carga y por ello mucho tiempo de respuesta, es decir la consulta es muy lenta y pesada.

Con la misma suposición, lo que facilita el usar el INNER JOIN es que no llama a todos los registros de la tabla, solo llama a los que hayas seleccionado, es decir en memoria no se cargo ni se esta guardando ninguna columna, solo lo que has seleccionado para mostrar… esto quiere decir más rapidez, menor carga.

Ahora, hay que tener en cuenta que en un software o programa que se implemente, no existe solo una consulta sino decenas de ellas, por ello las consulta o sentencias deben ser agiles, rapidas y leves.

Autor
Escrito por Jose Aguilar - Director ejecutivo y tecnológico en JA Modules. Experto programador PrestaShop y Experto programador WordPress.
Te ha servido? Valora esta entrada!
(6 votos, promedio: 5 de 5)
Comparte en las redes sociales
¿Buscas trabajo de programador?

Una respuesta a “INNER, LEFT y RIGHT JOIN”

  1. saul Lopez dice:

    Muy buena pagina

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Ver más sobre