9.7.3.5.- Combinar datos de varias tablas

Una base de datos contiene varias tablas, lo que permite crear tablas para funciones diferentes. Por ejemplo, podríamos tener una base de datos de características de objetos y otra que contuviese la ubicación y el estado de diferentes objetos como se muestra en la tabla que está a continuación. Podemos combinar estas dos tablas para crear una tabla maestra sobre la que realizar consultas. Para ello, las dos tablas deberán tener un campo coincidente que se pueda utilizar para conectarlas; además, cada tabla debe tener un campo cuyo valor identifique inequívocamente cada fila, campo que se denomina clave primaria. En la primera tabla que hemos creado (prueba_test), la columna name puede hacer de clave primaria y la columna id del objeto hará esta función en la siguiente tabla:

tabla_nueva

Podemos crear esta tabla de manera similar a como creamos la primera:

into_datos

La tabla la completaremos con operaciones INSERT adicionales. Una vez hecho esto, podemos utilizar el operador SELECT para seleccionar datos en base a campos de ambas tablas. Por ejemplo, si queremos saber dónde están todos los objetos verdes (green), de la primera tabla escogeremos los colores, mientras que de la segunda escogeremos la columna ubicaciones. Para ello, podemos emplear un par de trucos:

combina_tabla_1

El comando anterior combina automáticamente las dos tablas produciendo una salida en base a los criterios especificados. La salida de este ejemplo incluye el nombre, el color y la ubicación de los objetos, aunque cada tabla tenga sólo dos de estos tres valores. Otro modo de combinar datos de varias tablas es utilizar JOIN, que es muy similar al comando anterior, pero especificando una tabla con FROM y otra con JOIN.

prueba_join

Combinar datos permite simplificar la estructura de la base de datos en determinadas situaciones. Los ejemplos aquí mostrados ilustran este hecho, aunque con conjuntos de datos muy pequeños. La tabla prueba_test describe objetos genéricamente, mientras que la tabla locations describe objetos específicamente.  En un comercio minorista se podrían utilizar tablas similares para describir su inventario: la tabla prueba_test podría contener descripciones de productos, mientras que la tabla locations podría especificar el estante, la caja que contiene el producto y quizá incluso abarcar varios almacenes o tiendas. Esto permite que cada tabla sea pequeña; de lo contrario, dicha tabla requeriría varias entradas para cada elemento  y duplicaría una gran cantidad de datos. Al dividir las tablas, se reducirá el espacio de almacenamiento.