foto perfil

Aplicación práctica para la introducción a SQL: uniones y subconsultas

Publicado el 14 noviembre, 2020

Descripción general de la lección y conocimientos necesarios

Para completar con éxito esta lección, debería poder definir uniones en SQL y explicar la diferencia entre uniones internas y externas. Debe tener MySQL instalado en su computadora y también la base de datos de muestra de modelos clásicos .

Código de programa

Si observa la base de datos de modelos clásicos , notará oportunidades para unir datos en una sola consulta. Algunos de estos incluyen clientes y pedidos, pedidos y detalles de pedidos, pedidos y productos, etc.

Para el código del programa, crearemos una unión interna entre la tabla de pedidos y la tabla de detalles del pedido . Esto nos ayudará a obtener más información sobre los pedidos que se encuentran en la base de datos.

Primero, veamos las columnas en cada uno.

Tabla de pedidos
*Número de orden
fecha de orden
fecha requerida
fecha de envío
estado
comentarios
número de cliente
Tabla de detalles de pedido
*Número de orden
*código de producto
cantidadPedido
priceEach
orderLineNumber

* = clave principal

Un campo común entre los dos es orderNumber . Lo usaremos para extraer el número de pedido, la fecha del pedido, la fecha de envío, el código del producto, la cantidad solicitada y el precio. Ingrese la siguiente instrucción SQL y haga clic en el ícono Ejecutar (el rayo), o ingrese Ctrl + Shift + Enter .

SELECCIONE orders.orderNumber, orderDate, shippingDate, productCode, amountOrdered, priceEach 
FROM orders
INNER JOIN orderdetails
ON orders.orderNumber = orderdetails.orderNumber;

La razón por la que especificamos orders.orderNumber es porque el campo orderNumber está en ambas tablas. Para facilitar la lectura, puede comenzar cada campo con la tabla que está consultando.

La figura 1 muestra una instantánea de los resultados.


Figura 1: Resultados de la unión interna
Resultados de unión interna

Aplicación de código

Hemos devuelto con éxito información de dos tablas en la base de datos de modelos clásicos . Ahora es tu turno de crear una unión entre tablas.

Considere las mesas de clientes y pedidos . Cree una unión a la izquierda entre las tablas (la tabla de la izquierda son los clientes). Debido a que estamos usando MySQL, la combinación es una combinación izquierda (otras bases de datos la llaman combinación externa izquierda, pero el resultado es el mismo). El resultado debería mostrar no solo los clientes con pedidos, sino también los clientes sin pedidos.

Preguntas de seguimiento

Según las lecciones de este capítulo y las consultas que haya completado hasta ahora, responda las siguientes preguntas.

  • Cree una subconsulta de las tablas de clientes y oficinas para seleccionar clientes que tengan el mismo estado que la oficina. Por ejemplo, seleccione oficinas estatales de CA y aquellos clientes que vivan en CA.
  • Crear un CROSS JOIN entre los clientes y la mesa de pedidos
  • Usando un enfoque de subconsulta, encuentre los pagos de los clientes que sean menores que el promedio, Y que se realizaron antes del 1/1/2005.

Clave de respuesta

A continuación se encuentran las respuestas a la aplicación del código y las preguntas de seguimiento.

Aplicación de código

En la aplicación de código, unirá las tablas en el campo customerNumber . En el siguiente código, seleccionamos algunos campos de cada tabla.

SELECCIONE customers.customerNumber, customerName, creditLimit, orderNumber, orderDate, SHIPDate 
FROM clientes
LEFT OUTER JOIN orders
ON customers.customerNumber = orders.customerNumber;

La figura 2 muestra una instantánea de los datos; notará que American Souvenirs Inc y Porto Imports Co no han recibido ningún pedido. Esto indica que la combinación externa izquierda se realiza correctamente, ya que recupera registros de la tabla izquierda y la tabla derecha, incluso si ningún registro coincide en el lado derecho.


Figura 2: Salida de unión exterior izquierda
Salida de unión exterior izquierda

Notará que hay filas con un valor NULL; esto significa que el cliente no ha recibido ningún pedido. ¡Esto también significa que nuestra combinación externa izquierda era correcta!

Preguntas de seguimiento

A continuación se encuentran las respuestas a las preguntas de seguimiento.

Crear una subconsulta

SELECT customerNumber, customerName 
FROM clientes
WHERE
 estado IN (SELECT estado
   FROM
oficinas
  WHERE estado = 'CA');

ÚNETE CRUZADO

Esto devolverá todo, por lo que si tiene bases de datos más grandes, ¡podría causar problemas!

SELECCIONAR * 
DE los clientes
CRUZAR UNIR pedidos;

Uso de una subconsulta con AVG

Esta subconsulta debería ser bastante similar a la primera, excepto que ahora está utilizando la función AVG para determinar el monto promedio de los pagos. Además, agregará una cláusula AND para filtrar según la fecha de pago.

SELECCIONE el número de cliente, el número de cheque, la fecha de pago, el monto de los 
pagos
DONDE
 monto <(SELECCIONE
  PROMEDIO (monto) de los
  pagos)
 Y la fecha de pago <'2005-01-01';

Articulos relacionados