En los siguientes Ejemplos de consultas en SQL vamos a revisar el concepto de la cláusula JOIN.

La cláusula JOIN me permite crear uniones entre una o más tablas, vistas o subconsultas, a través de un campo que las relacionen entre sí, este campo es una Clave Primaria en una de las tablas y ese mismo campo es una Clave Foránea en la otra. Su uso lo veremos a través de los siguientes ejemplos de consultas en SQL.

↡ Ejemplos SQL – Uso de JOIN al final ↡

Tipos de JOIN

Existen varios tipos de JOIN en SQL y según el tipo de JOIN que ejecutemos tendremos diferentes conjuntos de resultados.

INNER JOIN

Establece la unión entre 2 tablas o conjunto de resultados, donde los valores sean exactos en ambas tablas.

INNER JOIN

LEFT JOIN

Establece la unión entre la Tabla A y la Tabla B, me mostrará todos los registros de la tabla A y los que coincidan en la Tabla B, si hay registros que existan en A y no en B estos se mostraran con valor NULL.

LEFT JOIN

RIGHT JOIN

Establece la unión entre la Tabla A y la Tabla B, me mostrará todos los registros de la tabla B y los que coincidan en la Tabla A, si hay registros que existan en B y no en A estos mostraran NULL.

RIGHT JOIN

Ejemplos de consultas en SQL

Planteando el siguiente ejercicio vamos a ver el uso de INNER JOIN en SQL.

Ejercicio

Punto a) Una empresa de venta de equipos informáticos necesita conocer a través de un informe, el total de las ventas diarias por cliente que está generando, ordenadas por fecha. Del cliente debemos mostrar (nombres, DNI, correo).

Punto b) En otro reporte la empresa necesita saber el detalle de cada una de las ventas (cuantos y que productos fueron registrados en cada venta)

Tener en cuenta:

De los CLIENTES debemos registrar:

  • Nombres y Apellidos
  • Documento de identidad
  • Correo

De los PRODUCTOS tenemos que registrar:

  • Código
  • Nombre
  • Descripción
  • Valor de descuento

De las VENTAS debemos registrar:

  • Al cliente que se le ha hecho la venta
  • Fecha de la venta
  • Cuantas unidades y cuales productos hemos vendido

Paso 1 : Análisis

Al leer el ejercicio y lo que nos están pidiendo nos damos cuenta que podemos identificar 4 tablas:

  1. CLIENTES
  2. PRODUCTOS
  3. VENTAS
  4. VENTAS_DETALLE
Diagrama Entidad Relación Ventas
Diagrama Entidad Relación Ventas

¿Cómo podemos identificar las 4 tablas?

En primer lugar, porque en el ejercicio nos están pidiendo «registrar la ventas», así que para poder guardar las ventas necesitamos crear nuestra primera tabla (VENTAS).

Adicional a eso nos piden registrar el detalle de cada una de las ventas, muy bien, para registrar el detalle de la ventas debemos crear nuestra segunda tabla (VENTAS_DETALLE), además tenemos que identificar que debemos crear nuestra primera relación entre la tabla VENTAS y VENTAS_DETALLE a través del uso de clave primaria y foránea.

*El campo (ID) de la tabla VENTAS se convierte en el campo (Venta_ID) en la tabla VENTAS_DETALLE para crear la relación entre las 2 tablas

En segundo lugar nos piden «cuantos y que productos fueron registrados en cada venta», si bien es cierto que podríamos registrar los productos con sus características en la tabla (VENTAS_DETALLE) no sería lo más óptimo, lo ideal es separar cada objeto y relacionarlo a través de un campo. Así que tenemos que crear nuestra tercera tabla (PRODUCTOS).

Diagrama Entidad Relación Ventas
*El campo (ID) de la tabla PRODUCTOS se convierte en el campo (ProductoID) en la tabla VENTAS_DETALLE para crear la relación entre las 2 tablas

Y por último nos piden saber «a que cliente le vendimos en cada venta» , así que creamos nuestra última tabla (CLIENTES).

Diagrama entidad relacion ventas - clientes
*El campo (ID) de la tabla CLIENTES se convierte en el campo (ClienteID) en la tabla VENTAS para crear la relación entre las 2 tablas

Otra manera de saber que tablas debemos crear, es identificando que muchas veces en los problemas nos mencionan las características o «campos» de cada una de las entidades.

Paso 2 : Resolver mediante Consultas en SQL

Punto a :

  1. Total de las ventas diarias por cliente que está generando.
  2. Ordenadas por fecha.
  3. Mostrar (nombres, DNI, correo) del cliente.

Consulta SQL:

SELECT 
VEN.FECHA AS FECHA,
CLI.NOMBRE AS NOMBRE_CLIENTE,
CLI.APELLIDO AS APELLIDO_CLIENTE,
CLI.DNI AS DNI_CLIENTE,
CLI.CORREO AS CORREO_CLIENTE,
SUM(VEN.TOTAL) AS TOTAL_VENTAS
FROM VENTAS VEN  INNER JOIN  CLIENTES CLI 
ON (VEN.ClienteID = CLI.ClienteID)
GROUP BY VEN.Fecha, CLI.NOMBRE, CLI.APELLIDO, CLI.DNI, CLI.CORREO
ORDER BY VEN.Fecha

Análisis:

  • Revisando la consulta que hemos escrito nos damos cuenta que usamos la función de agrupación SUM() para obtener el total de las ventas, cuando usamos funciones de agrupación debemos usar en conjunto con la cláusula GROUP BY debido a que estamos agrupando un conjunto de resultados, y además los campos que van listados junto al GROUP BY son todos los campos que están fuera de la función SUM().
  • Para relacionar las VENTAS realizadas con cada CLIENTE hacemos uso del INNER JOIN, por medio del campo ID de la tabla CLIENTES y el campo ClienteID de la tabla VENTAS.

Punto b :

  1. Detalle de cada una de las ventas (cuantos y que productos fueron registrados en cada venta)

Consulta SQL:

SELECT 
VEN.FACTURAID AS FACTURA,
PR.CODIGO AS CODIGO_PRODUCTO,
PR.NOMBRE AS NOMBRE_PRODUCTO,
DT.CANTIDAD AS CANTIDAD_PRODUCTO
FROM VENTAS VEN INNER JOIN  VENTAS_DETALLE DT
ON (VEN.VentaID=DT.VentaID)
INNER JOIN PRODUCTOS PR ON (DT.ProductoID=PR.ProductoID)

Análisis:

  • Para realizar esta consulta usamos 2 INNER JOIN, el primero para relacionar la tabla VENTAS con la tabla VENTAS_DETALLE al crear esta relación nos aseguramos que por cada factura de la tabla VENTAS exista la misma factura en la tabla VENTAS_DETALLE.
  • El segundo INNER JOIN lo usamos para relacionar la tabla PRODUCTOS con la tabla VENTAS_DETALLE con esto nos aseguramos que los productos que existan en la tabla VENTAS_DETALLE tienen que existir en mi tabla principal PRODUCTOS, debido a que en esta tabla guardo la toda la información de cada producto.

Si tienes alguna pregunta o sugerencia sobre el post Ejemplos de consultas en SQL la puedes dejar en los comentarios.

También te puede interesar »

Etiquetado en:

,