Volver a la lista de artículos Artículos
Lectura de 11 minutos

Consejos de SQL JOIN para principiantes

Si es un principiante y quiere saber cómo empezar a utilizar Tipos de JOIN en SQL en sus consultas, ha llegado al lugar adecuado.

El uso de la cláusula SQL JOIN es necesario si quieres consultar varias tablas. Tarde o temprano, tendrás que utilizar más de una tabla en una consulta. Es la naturaleza de las bases de datos relacionales en general: consisten en datos que suelen guardarse en múltiples tablas; a su vez, éstas forman una base de datos. Una vez que te familiarices con las consultas básicas de SQL, es conveniente que empieces a aprender la cláusula JOIN. Además de los consejos de este artículo, nuestro curso Tipos de JOIN en SQL puede ayudarte con esto.

En este artículo, te guiaré a través de cuatro consejos para usar la cláusula JOIN. Pero primero, déjame mostrarte las tablas con las que trabajaremos.

Conozca las tablas

Para ayudarte con JOINs, utilizaré tres tablas:

  • manufacturer
  • product_type
  • product

La tabla manufacturer contiene los siguientes atributos:

La tabla fabricante contiene los siguientes atributos

  • id - El número de identificación del fabricante en la base de datos.
  • manufacturer_name - El nombre del fabricante.

La segunda tabla es product_type, que tiene estos atributos

  • id - El ID del tipo de producto.
  • type_name - El nombre del tipo de producto.

La última tabla es product_type, que tiene cuatro atributos

  • id - El ID del producto.
  • product_name - El nombre del producto.
  • type - El tipo de producto; hace referencia a la tabla
  • manufactured_by - El nombre del fabricante del producto; hace referencia a la tabla

¡Es el momento del primer consejo!

Consejo #1: Utilice la sintaxis explícita de JOIN

Probablemente se esté preguntando qué significa esto. No se preocupe, lo entenderá en unos momentos.

Como sabe, la cláusula JOIN se utiliza para combinar o unir datos de dos o más tablas. Sin embargo, esta no es la única forma de unir tablas. También existe una sintaxis antigua - de antes de SQL-92 - en la que las tablas se unen enumerándolas en la cláusula FROM. Esta sintaxis es usada por muchos principiantes, lo cual está bien y hará exactamente el mismo trabajo que una sintaxis JOIN explícita. Pero aprender la sintaxis JOIN explícita vale la pena a largo plazo. Tiene varios beneficios sobre la lista de tablas en la cláusula FROM, de la que hablaré más adelante en este artículo.

Le mostraré cómo funcionan las uniones de tablas no explícitas. Digamos que quieres obtener una lista de productos junto con sus nombres de fabricantes. Así es como se hace enumerando dos tablas en la cláusula FROM:

SELECT	product.id,
		product.product_name,
		manufacturer.manufacturer_name
FROM product, manufacturer
WHERE product.manufactured_by = manufacturer.id;

Primero he enumerado las columnas que quiero en el resultado. Son id y product_name de la tabla product y manufacturer_name de la tabla manufacturer. A continuación, he enumerado el product y la tabla manufacturer tabla en la cláusula FROM. Por último, he indicado que la columna manufactured_by de la tabla product debe ser igual a la columna id de la tabla manufacturer.

¿El resultado?

idproduct_namemanufacturer_name
1SuperFXQuazySoftware
2UnterBDieBeste
3HyperXYZFabricaInfinita
4TurboRayQuazySoftware
5VeryTradeDieBeste
6BlueSkyFabricaInfinita
7DirtyGrittyQuazySoftware
8SmoothUndertakerDieBeste
9HelioTrollFabricaInfinita

Puede obtener el mismo resultado utilizando la sentencia JOIN:

SELECT	product.id,
		product.product_name,
		manufacturer.manufacturer_name
FROM product JOIN manufacturer 
ON product.manufactured_by = manufacturer.id;

La parte SELECT es la misma en ambas consultas. Pero en lugar de simplemente listar dos tablas en la cláusula FROM, las he unido escribiendo explícitamente la cláusula JOIN. Si escribes esta cláusula, es necesario especificar qué columnas se utilizarán al conectar las dos tablas. Esto se hace utilizando la cláusula ON y conectando la columna manufactured_by de la tabla product con la columna id de la tabla manufacturer. Si te fijas, verás que la cláusula ON funciona como la cláusula WHERE de la consulta anterior.

¿Por qué recomiendo utilizar una sentencia explícita JOIN? En primer lugar, esta forma le permite ver fácilmente qué tipo de unión se utiliza para combinar las tablas. Hay cuatro tipos de uniones (inner join, left join, right join y full join), que comentaré más adelante. Cuando el tipo de unión se indica explícitamente en la consulta, es más fácil entender lo que hace la consulta.

La otra razón para utilizar la sintaxis explícita de JOIN es ver la diferencia entre las condiciones de unión y las condiciones de filtrado. Dado que la cláusula WHERE se utiliza para filtrar datos, puede resultar confuso utilizarla para unir tablas.

Hay más ventajas de usar JOINs explícitos que no tengo espacio para cubrir; vea este artículo, que habla sobre las ventajas de Tipos de JOIN en SQL, para más detalles.

Si necesita repasar sus conocimientos básicos de SQL antes de seguir adelante, nuestro curso SQL para principiantes puede ser ideal para ello. También puedes utilizar su sección JOIN para empezar a aprender a unir tablas.

Consejo #2: Usar Alias de Tabla

Para mostrarte a qué me refiero con los alias y por qué son útiles, déjame mostrarte cómo se ve una consulta sin ellos. Si quisiera listar todos los productos y sus nombres de tipo de producto, esta es una forma de hacerlo:

SELECT	product.id,
		product.product_name,
		product_type.type_name
FROM product 
JOIN product_type 
ON product.type = product_type.id;

Primero, la explicación de la consulta. Al igual que el ejemplo anterior, esta consulta selecciona las columnas id y product_name de la tabla product. También selecciona la columna type_name de la tabla product_type. Las tablas product y product_type están unidas por el tipo de columna de la tabla product y la columna id de la tabla product_type.

Este es el resultado:

idproduct_nametype_name
1SuperFXServer
2UnterBServer
3HyperXYZServer
4TurboRayLaptop
5VeryTradeLaptop
6BlueSkyLaptop
7DirtyGrittySoftware
8SmoothUndertakerSoftware
9HelioTrollSoftware

Aunque esta consulta no es complicada, escribirla es engorroso. Cada vez que quiero hacer referencia a la tabla, tengo que escribir su nombre completo. Por si fuera poco, también hay una tabla cuyo nombre consta de dos palabras y un guión bajo. ¡Imagínate si hay más tablas y con nombres más largos! Sin embargo, hay una manera de hacerte la vida más fácil. En lugar de escribir los nombres completos de las tablas, puedes asignar a cada una un alias:

SELECT	p.id,
		p.product_name,
		pt.type_name
FROM product p 
JOIN product_type pt 
ON p.type = pt.id;

Esta es precisamente la misma consulta que la anterior, pero utiliza los alias de las tablas en lugar de los nombres completos. Fíjate bien. He asignado los alias en las cláusulas FROM y JOIN. Notará la diferencia; la tabla product se llama ahora py la tabla product_type se llama ahora pt. Por supuesto, con los nombres de las tablas cambiados, estos nuevos nombres tienen que ser utilizados al seleccionar las columnas id, product_name, y type_name.

Creo que la consulta ahora se ve mucho mejor. ¡Y seguro que fue más cómodo escribirla! Un consejo más: ¡utiliza alias significativos! La práctica habitual es utilizar la primera o dos letras del nombre de la tabla o la primera letra de cada palabra del nombre de la tabla. La cuestión es que su alias debe ser lo más corto posible, pero también debe parecer una elección "natural" para un alias; debe ser capaz de saber inmediatamente qué alias se refiere a qué tabla.

Consejo 3: Conozca la diferencia entre los distintos tipos de JOIN

Ya he mencionado que existen cuatro tipos básicos de JOIN:

  • INNER JOIN
  • LEFT JOIN
  • RIGHT JOIN
  • FULL OUTER JOIN

La cláusula INNER JOIN devolverá sólo los registros coincidentes que sean iguales en ambas tablas. Observe que INNER JOIN es lo mismo que JOIN.

La cláusula LEFT JOIN devuelve todos los registros de la tabla izquierda (la primera tabla, colocada después de FROM) y sólo los registros coincidentes de la tabla derecha (la segunda tabla, colocada después de JOIN).

Por otro lado, RIGHT JOIN devuelve todos los registros de la tabla derecha y sólo los registros coincidentes de la tabla izquierda.

Por último, FULL OUTER JOIN devuelve todos los registros de ambas tablas. Los registros que no coinciden se rellenan con los valores de NULL. Esta unión devuelve potencialmente una gran cantidad de datos. Tenga en cuenta que FULL OUTER JOIN es lo mismo que FULL JOIN.

Puede encontrar una explicación más detallada, pero fácil de entender, en este artículo sobre los tipos de JOIN de SQL.

Sé que puede ser difícil recordar todo, especialmente si eres un principiante o no usas las uniones muy a menudo. Pero no hay necesidad de recordar todo porque está la hoja de trucos de SQL JOIN. Puedes guardarla o imprimirla y utilizarla siempre que uses la cláusula JOIN o quieras aprender algo nuevo de un vistazo.

En la práctica, usted usará más a menudo INNER JOIN y LEFT JOIN, así que concentrémonos en esos dos. Ya has visto cómo utilizar INNER JOIN en los ejemplos anteriores. Ahora le mostraré cómo funciona LEFT JOIN.

En este ejemplo, vamos a enumerar todos los tipos de productos y los productos que pertenecen a cada categoría. Puedes hacerlo de esta manera:

SELECT	pt.id,
		pt.type_name,
		p.product_name
FROM product_type pt 
LEFT JOIN product p 
ON pt.id = p.type;

Esta consulta primero selecciona las columnas deseadas; nada nuevo aquí. A continuación, une las dos tablas y les asigna un alias. He unido la tabla usando algo nuevo; la sentencia LEFT JOIN. Sólo para recordar, esta unión selecciona todas las filas de la tabla izquierda (product_type) y las filas coincidentes de la tabla derecha (product). Esto es exactamente lo que necesitaba; echa un vistazo:

idtype_nameproduct_name
1SoftwareDirtyGritty
1SoftwareSmoothUndertaker
1SoftwareHelioTroll
2LaptopTurboRay
2LaptopVeryTrade
2LaptopBlueSky
3ServerSuperFX
3ServerUnterB
3ServerHyperXYZ
4ScooterNULL
5PrinterNULL

Observe que no hay productos para las categorías "Scooter" e "Impresora". En el caso de que no haya filas coincidentes en la tabla correcta, el resultado será NULL.

Sugerencia #4: Haga un mapa de las uniones múltiples

No está limitado a unir sólo dos tablas; puede unir tres o más tablas. Permítame mostrarle primero cómo hacerlo, y luego le daré algunos consejos útiles.

Tu tarea es listar todos los productos junto con su tipo de producto y nombre del fabricante. Este código lo hará:

SELECT	p.id,
		p.product_name,
		pt.type_name,
		m.manufacturer_name
FROM product p 
JOIN product_type pt
	ON p.type = pt.id 
JOIN manufacturer m 
	ON p.manufactured_by = m.id;

Como en los ejemplos anteriores, este código selecciona primero las columnas que se mostrarán en el resultado. La tabla product se une a la tabla product_type; eso ya lo has practicado. Bien, pero ahora necesitas los datos de la tabla manufacturer¿cómo se unen? Simplemente escribe otra cláusula JOIN y especifica la tabla deseada.

Sin embargo, aunque la unión viene después de la tabla product_typeno significa que la tabla manufacturer esté unida a esta tabla, al menos en este caso. No, se une con la tabla product. Esto es obvio por las columnas que he especificado; las tablas están conectadas a través de las columnas manufactured_by de la tabla product y id de la tabla manufacturer.

Este es el resultado:

idproduct_nametype_namemanufacturer_name
1SuperFXServerQuazySoftware
2UnterBServerDieBeste
3HyperXYZServerFabricaInfinita
4TurboRayLaptopQuazySoftware
5VeryTradeLaptopDieBeste
6BlueSkyLaptopFabricaInfinita
7DirtyGrittySoftwareQuazySoftware
8SmoothUndertakerSoftwareDieBeste
9HelioTrollSoftwareFabricaInfinita

Cuando unes varias tablas, es una buena idea hacer un mapa de las tablas que quieres unir. Haz un pequeño dibujo; así es más fácil visualizar las uniones. Esto es especialmente útil si estás haciendo una unión a la izquierda o a la derecha. No tendrás que imaginarlo; la tabla que dibujas a la izquierda es tu tabla izquierda y LEFT JOIN te dará todos los datos de la misma. La tabla que dibujas a la derecha es la tabla derecha. Parece obvio, pero es más difícil imaginarlo sin dibujar, sobre todo si eres principiante. El dibujo puede ser algo tan sencillo como esto:

Dibujando

Otro consejo es enumerar las columnas en la sentencia SELECT en el mismo orden en que se unen las tablas. Si miras la consulta anterior, las columnas son de las tablas product, product_typey manufacturerrespectivamente. Las tablas se unen precisamente en el mismo orden. Hacer esto hará que tu código sea más legible y más fácil de modificar.

Por último, pero no menos importante, une siempre las tablas en una especie de cadena. En otras palabras, cada tabla a la que te unas debe estar unida a la(s) tabla(s) que ya está(n) unida(s) en tu consulta. Si unes dos tablas y luego decides unir otra, la tercera tabla no puede quedar "suelta", sin conexión con las tablas anteriores. Asegúrese de que las condiciones de ON vinculen la nueva tabla con las tablas previamente unidas. Aquí tienes cómo NO hacerlo:

Dibujando

Has aprendido bastante. Esto no es todo lo que necesitas saber sobre la unión de tres tablas, por supuesto. Hay detalles que no he mencionado y que están bien explicados en este artículo sobre uniones de varias tablas. Y ahora que sabe sobre el LEFT JOIN y la unión de múltiples tablas, ¿por qué no aprender cómo hacer un LEFT JOIN de múltiples tablas?

¿Ha aprendido esto?

Con estos consejos sobre el uso de las uniones en SQL, he tratado de hacer tus primeros pasos tan fáciles como sea posible. Has aprendido cómo unir dos tablas usando tanto la sintaxis explícita de JOIN como la lista de tablas en la cláusula FROM. Además, has aprendido a utilizar los alias y lo que hacen las diferentes uniones. Finalmente, te he mostrado cómo unir tres tablas. Creo que esto es un gran paso para ti en muy poco tiempo. Enhorabuena.

Entonces, ¿cómo puedes poner en práctica todos estos consejos? Este artículo sobre la práctica de Tipos de JOIN en SQL le ayudará a encontrar el enfoque más adecuado para usted. O puedes practicar utilizando nuestro SQL para principiantes o el curso Tipos de JOIN en SQL . Depende de lo detallados que quieras que sean tus conocimientos.

¿Quieres compartir tu experiencia con la unión de tablas? ¡La sección de comentarios te espera!