Lección 6 de SQL: Consultas multitabla con JOIN

Hasta ahora, hemos estado trabajando con una sola tabla, pero los datos de entidades en el mundo real a menudo se dividen en partes y se almacenan en múltiples tablas ortogonales mediante un proceso conocido como normalización.

Normalización de bases de datos

La normalización de bases de datos es útil porque minimiza los datos duplicados en cualquier tabla individual y permite que los datos de la base de datos crezcan independientemente unos de otros (por ejemplo, los tipos de motores de automóviles pueden crecer independientemente de cada tipo de automóvil). Como contrapartida, las consultas se vuelven un poco más complejas, ya que deben poder encontrar datos de diferentes partes de la base de datos, y pueden surgir problemas de rendimiento al trabajar con muchas tablas grandes.

Para responder preguntas sobre una entidad que tiene datos que abarcan varias tablas en una base de datos normalizada, necesitamos aprender a escribir una consulta que pueda combinar todos esos datos y extraer exactamente la información que necesitamos.

Consultas multitabla con JOIN

Las tablas que comparten información sobre una sola entidad deben tener una clave principal que identifique a esa entidad de forma única en toda la base de datos. Un tipo común de clave principal es un entero de incremento automático (porque son eficientes en el uso del espacio), pero también puede ser una cadena o un valor hash, siempre que sea único.

Al utilizar la cláusula JOIN en una consulta, podemos combinar datos de filas de dos tablas independientes utilizando esta clave única. La primera de las uniones que presentaremos es la INNER JOIN.

  • Consulta de selección con INNER JOIN en varias tablas
SELECT column, another_table_column, …
FROM mytable
INNER JOIN another_table 
    ON mytable.id = another_table.id
WHERE condition(s)
ORDER BY column, … ASC/DESC
LIMIT num_limit OFFSET num_offset;

Este INNER JOIN es un proceso que combina las filas de la primera tabla y la segunda tabla que tienen la misma clave (tal como se define en la restricción ON) para crear una fila de resultados con las columnas combinadas de ambas tablas. Después de unir las tablas, se aplican las otras cláusulas que aprendimos anteriormente.

¿Sabías?.
Es posible que vea consultas en las que INNER JOIN se escribe simplemente como JOIN. Estas dos son equivalentes, pero seguiremos haciendo referencia a estas uniones como uniones internas porque hacen que la consulta sea más fácil de leer una vez que comience a usar otros tipos de uniones, que se presentarán en la siguiente lección.

Ejercicio

Hemos añadido una nueva tabla a la base de datos de Pixar para que puedas practicar algunas uniones. La tabla BoxOffice almacena información sobre las calificaciones y las ventas de cada película de Pixar en particular, y la columna Movie_id de esa tabla se corresponde con la columna Id de la tabla Movies en forma 1 a 1. Intenta resolver las tareas siguientes utilizando INNER JOIN que se presentó anteriormente.


  1. Encuentra las ventas nacionales e internacionales de cada película.
  2. Muestra las cifras de ventas de cada película que tuvo un mejor desempeño a nivel internacional que a nivel nacional.
  3. Enumere todas las películas por sus calificaciones en orden descendente.