ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

INTRODUCCIÓN A SQL Y BASES DE DATOS RELACIONALES


Enviado por   •  14 de Noviembre de 2022  •  Apuntes  •  3.727 Palabras (15 Páginas)  •  51 Visitas

Página 1 de 15

INTRODUCCIÓN A SQL Y BASES DE DATOS RELACIONALES

SEMANA 5: CONSULTAS AVANZADAS Y OTROS TEMAS / CONSULTAS AVANZADAS MULTITABLA

CONSULTAS AVANZADAS MULTITABLA – VÍDEO 1

En este vídeo vamos a ver ejemplos de consultas más elaboradas en multitabla, ejemplos de consultas un poco más difíciles, el objetivo es que aprendáis a manejar todos los conceptos de SQL para hacer consultas de varias tablas con algo más de dificultad.

Para eso utilizaremos la base de datos de ejemplo

[pic 1]

de un distribuidor de alimentación, que tiene clientes, empleados, transportistas, productos y suministradores, y las categorías de los productos y las órdenes de los clientes con sus detalles de orden

Enlazadas por una serie de claves foráneas, o foreign key en inglés, en las órdenes, en los detalles de orden, y en los productos, pues en las órdenes tenemos el identificador de cliente, el de empleado y el de transportista, para saber quién ha encargado esa orden, qué empleado la vendió y quién la va a transportar.

En los detalles de orden tenemos una clave foránea del identificador de orden, para saber cada detalle de orden a qué orden va, y una de producto, para tener los detalles del producto, porque solamente tenemos un numerito, que nos identifica el producto, y en la de producto pues tenemos una clave foránea de suministrador, que nos da los datos del suministrador, y otra de categoría, para saber, el número de categoría y aquí tenemos el nombre y la descripción.

Bien, vamos a empezar con un primer SELECT que nos dé el total por cada orden,

[pic 2]

como habéis visto, las órdenes están en una tabla y los detalles de orden están en otra y los precios de los productos están en otro, con lo cual, por ahora, no necesitaremos la tabla de órdenes en esta todavía, ¿por qué?

Porque en los detalles de orden aparece ya un OrderID, con lo cual no vamos a necesitar enlazar la tabla de órdenes, siempre que no necesitemos algún campo adicional de la tabla de órdenes, que entonces sí que tendríamos que hacerlo como ahora veremos más adelante.

Bien, pues seleccionamos OrderID, bueno, aquí veréis que los SELECT ya están indentados, porque si no se hacen muy complicados de leer, el SELECT sencillo se puede poner todo seguido, de hecho esto lo podíamos haber puesto seguido pero sería peor. Con lo que vamos a hacer primero la subconsulta de dentro y luego haremos la de fuera.

Hacemos una subconsulta en la cual ponemos el detalle de orden, el identificador de orden, y luego multiplicamos la cantidad de la orden por el precio del producto, que viene en la tabla de productos, y a esta multiplicación le llamamos total (“AS Total”)

Aquí (FROM OrderDetails O) decimos que esto viene de la tabla de órdenes, que se identifica con el alias O, con un INNER JOIN, que podría ser LEFT JOIN también si quisiéramos, en función de cómo tengamos la integridad de la tabla. En principio, como esta tabla está dentro de la base de datos tiene integridad perfecta, da igual que sea INNER JOIN que sea LEFT JOIN, ¿vale?

¿con qué campo? P.ProductID=O.ProductID. A esta subconsulta le llamaremos Orderdetailswithprice, que son detalles de órdenes con precio en inglés.

Y luego esta subconsulta la pongo en el FROM de la consulta que va a hacer el resumen, que va a hacer OrderID, la suma del campo total que he definido aquí, como Ordertotal, o sea la cantidad total por cada orden, GROUP BY OrderID, agrupados por OrderID, ¿vale?

Entonces, pasamos aquí,

[pic 3]

que lo podéis hacer vosotros en este simulador, y fijaos que me da los 196 registros, que son las 196 órdenes que hay. Cada número de orden con su total, ¿de acuerdo? Perfecto, pues ya lo tenemos.

Siguiente, total por línea de orden con cliente, 

[pic 4]

fijaos que aquí sí que tenemos que enlazar los clientes que están en la orden con las cantidades por lo que tenemos que meter la tabla de órdenes en el JOIN.

Entonces ponemos SELECT, OD porque vamos a llamar O a las órdenes y OD a los detalles de órdenes, el campo OrderDetail, el campo OrderID, el campo CustomerName, porque no queremos hacer los resúmenes por id de cliente, sino que queremos por el nombre del cliente, y luego multiplicamos de OrderDetails la cantidad por el precio como total.

Lo traemos de detalles de órdenes OD, con un LEFT JOIN de productos P el ID de producto igual al ID de OrderDetails de producto, con un LEFT JOIN de órdenes, que se llama O, con el OrderID de OrderDetails igual al OrderID de órdenes, y con un LEFT JOIN de Customers, con el OrderID de Customers igual al OrderID de Orders, por eso tenemos las tres tablas.

Bien, esto nos va a devolver esto, ¿vale?

[pic 5]

Nos va a poner el nombre del cliente y el total de la cantidad en cada una de las líneas de orden.

Os propongo un ejercicio que es, sacar el total por cliente, a partir de esta consulta. Es combinar esta consulta, sustituirla en esta anterior y aquí donde pone OrderID, sería CustomerName, y aquí pues tendríais que cambiar GROUP BY CustomerName, y podríais hacer este mismo resumen, por cada OrderID pero aquí saldrían los nombres de los clientes con la cantidad total que han gastado, ¿vale?

Bien, eso es una propuesta que os hago.

Ahora vamos a hacer otra consulta, que son los cinco suministradores que más negocio generan.

[pic 6]

Pues aquí tenemos un SELECT, con un sub-SELECT dentro, que vamos a trabajar primero, ¿vale?

Aquí hacemos un SELECT de la tabla de suministradores el SupplierName, que es el suministrador, de la tabla suministradores, el país, luego de la tabla de OrderDetails la cantidad, y de la tabla de productos el precio,

¿por qué no metemos aquí las órdenes, trabajamos solo con el Details? Porque el SupplierName está enlazado en la tabla de productos, o sea el ID de Supplier, el ID de suministrador, está en la tabla de productos,

entonces cogemos FROM OrderDetails que llamamos O, con un LEFT JOIN con productos P, en el ProductID de producto, igual al ProductID de los OrderDetails, con un JOIN de los suministradores, que le llamamos S, con el SupplierID de producto, igual al SupplierID de suministrador. A todo esto le llamamos Orderdetailswithprice.

Y luego esto lo usamos como consulta, para alimentar un SELECT, en el cual ponemos el nombre del suministrador, su país y el redondeo de la suma de total, que habíamos definido aquí (en la subselección), como el total del suministrador.

...

Descargar como (para miembros actualizados)  txt (21.9 Kb)   pdf (1.5 Mb)   docx (1.4 Mb)  
Leer 14 páginas más »
Disponible sólo en Clubensayos.com