Uniendo datos de varias tablas

La sentencia select basa su extraordinaria capacidad en que con una sentencia puede consultar múltiples tablas a la vez. A esta operación se le llama también join. Las bases de datos se componen de una estructura y organización de los datos, por lo que si aparte de los datos de nuestros clientes queremos mantener, por ejemplo, un historial de compras de cada uno de ellos, necesitaremos normalmente dos tablas; una con los clientes y otra con las ventas. Esta sentencia permite unir dos tablas utilizando las columnas que necesitamos.

Para este ejemplo crearemos dos tablas con lo aprendido anteriormente:

Tabla CLIENTES:

Tabla VENTAS:

Queremos obtener una lista de ventas junto con los DNI de los compradores, dicho de otro modo, pegar en la tabla VENTAS el DNI de los clientes. Para conseguirlo debemos relacionar ambas tablas por al menos una columna que sea común a ambas tablas por ejemplo NUM_SOCIO.

Sintaxis:

Descripción:

  • tabla1.- La tabla maestra de join, donde vamos a pegar los datos.
  • tabla2.- Tabla desde la que obtendremos los datos.
  • condicion.- Condición que debe cumplir dos filas para unirse. Normalmente sería una igualdad de columnas.

Ejemplo:

  • Al utilizar varias tablas le indicamos a SQLite el origen de cada columna ya que la columna NUM_SOCIO está en ambas tablas.
  • Por eso añadimos el nombre de la tabla y un punto (.) como prefijo del nombre de la columna. Por ejemplo, “VENTAS.NUM_SOCIO” que representa la columna NUM_SOCIO de la tabla VENTAS.

Nombrar objetos (alias)

Para reducir el tamaño de las consultas, SQL nos permite utilizar un alias, o sea, un nombre temporal que podemos asignar tanto a las tablas como a las columnas.

Sintaxis:

  • tabla / columna.- Nombre del objeto al que le vamos a dar un alias.
  • as.- Palabra clave opcional, o sea, que podemos asignar un alias sin utilizarla.
  • alias.- Nombre temporal que asignamos al objeto.

Ejemplo sin alias:

Ejemplo reduciendo el tamaño de la sentencia usando el alias C:

Ejemplo usando alias en las columnas con la palabra clave as:

Prácticas con join

Primero daremos de alta a nuevos clientes…

… y creamos una nueva tabla que llamaremos VENTAS.

Insertaremos varios registros de ejemplo:

Con las dos tablas listas vamos a comenzar a practicar los ejemplos. Consultaremos todas las ventas junto con el DNI del comprador.

El asterisco (*) le indica a la base de datos que queremos leer todas las columnas. Utilizamos el prefijo V para obtener todas las columnas de la tabla VENTAS.

Otro ejemplo, buscamos el nombre de los clientes que compraron tazas:

Igual que con select, debemos añadir el prefijo a las columnas que formen parte de la condición where.

Ejemplo de clientes que hayan comprado alguna vez:

Ejemplo para saber cuantos clientes son mayores de 20 años y han comprado marcos de fotos:

Desglosando:

  1. Hemos cruzado las tablas de VENTAS y CLIENTES para asociar a cada uno los productos que han adquirido.
  2. Hacemos un filtro del producto marco de fotos y que la edad sea mayor de 20 años.
  3. Contamos los clientes diferentes al filtro con “count distinct“.
  4. Para que se entienda mejor utilizamos un alias “NUM_CLIENTES“.

Vamos a practicar un poco…

  • Vamos a ver los DNI’s de los clientes que han comprado alguna lámpara.
  • Clientes menores de 50 años. que hayan comprado alfombra.
  • Compras realizadas por clientes mayores de 25 años.

 

 

 

Anuncios