Está en la página 1de 12

EJERCICIOS SQL 15-25

Javier Garca Cambronel PRIMERO DE ASIR

[EJERCICIOS SQL 15-25]

SOLUCIN EJERCICIOS SQL 15-25


15. Obtener el nmero de suministros, el de artculos distintos suministrados y la cantidad total de artculos suministrados por el proveedor P2.
Hacemos un contador sobre todos los suministros y le damos el nombre con as despus hacemos lo mismo con artculos evitando la duplicacin para obtener el nmero de artculos distintos y despus hademos la suma y lo nombramos con as como cantidad total que es lo que nos pide el ejercicio, claramente, todo esto lo hacemos desde envios y en la condicin Where decimos que sea del proveedor P2. SELECT COUNT(*) as [Numero de suministros],COUNT(Distinct T#) as [Numero de articulos], SUM(ENVIOS.CANTIDAD) as [Cantidad TOTAL] FROM ENVIOS WHERE ENVIOS.P#='P2'

PRIMERO DE ASIR

Pgina 1

[EJERCICIOS SQL 15-25] 16. Para cada artculo y componente suministrado obtener los valores de C#, T# y la cantidad total correspondiente.
Obtenemos los valores de cada articulo y cada componente, hacemos la suma de envos y cantidad y la renombramos como cantidad total esto lo hacemos desde envios, pero para ello tenemos que utilizar la clausula grop by sobre c# y t#. SELECT C#, T#, SUM(envios.cantidad) AS [Cantidad TOTAL] FROM ENVIOS group by C#, T#

PRIMERO DE ASIR

Pgina 2

[EJERCICIOS SQL 15-25] 17. Obtener los valores de T# de los artculos abastecidos al menos por un proveedor que no viva en MADRID y que no est en la misma ciudad en la que se monta el artculo.
Obtenemos los valores de t# que no estn duplicados pertenecientes a los artculos haciendo un inner join entra la tabla envios y artculos donde hacemos la comparacin y dentro de esta la clausula Where donde indicamos que al menos un proveedor no pertenezca a Madrid y que no este en la ciudad donde se encuentra el artculo. SELECT DISTINCT ARTICULOS.T# FROM ARTICULOS INNER JOIN ENVIOS ON ARTICULOS.T#=ENVIOS.T# WHERE EXISTS (SELECT DISTINCT PROVEDORES.* FROM PROVEDORES WHERE ENVIOS.P#=PROVEDORES.P# and PROVEDORES.CIUDAD<>'MADRID' and PROVEDORES.CIUDAD<>ARTICULOS.CIUDAD);

PRIMERO DE ASIR

Pgina 3

[EJERCICIOS SQL 15-25] 18. Obtener los valores de P# para los proveedores que suministran al menos un componente suministrado al menos por un proveedor que suministra al menos un componente ROJO.
Hacemos un select evitando la duplicacion de los valores de p# desde envios donde decimos a traves de la clausula Where que al menos un component sea suministrados por un proveedor que suministre al menos un component rojo. SELECT DISTINCT P# FROM ENVIOS WHERE Exists (SELECT C# FROM COMPONENTES WHERE ENVIOS.C#=COMPONENTES.C# and COMPONENTES.COLOR='ROJO')

PRIMERO DE ASIR

Pgina 4

[EJERCICIOS SQL 15-25] 19. Obtener los identificadores de artculos, T#, para los que se ha suministrado algn componente del que se lleva suministrado una media superior a 320 artculos.
Obtenemos los identidicadores de los articulos (para esto utilizamos la clausula distinct evitando la duplicacin) desde envois donde los components estan entre la consulta que tenemos en parenthesis hacienda la agrupacion correspondiente de los components desde envios e indicando que la media AVG sea mayor a 320 artculos. SELECT distinct t# FROM ENVIOS Where C# in (Select C# From ENVIOS GROUP BY C# having AVG(cantidad) > 320)

PRIMERO DE ASIR

Pgina 5

[EJERCICIOS SQL 15-25] 20. Seleccionar los identificadores de proveedores que hayan realizado algn envo con Cantidad mayor que la media de los envos realizados para el componente a que corresponda dicho envo.
Seleccionamos los identificadores de proveedores evitando la duplicacin ,esto lo hacemos desde envios donde la cantidad cumple los requisites indicados en la consulta que tenemos entre parentesis en where donde indicaremos que sean los envois con una cantidad mayor que la media de los envois realizamos para el component al que pertenece ese mismo envio. SELECT DISTINCT p# FROM ENVIOS WHERE CANTIDAD IN ( SELECT AVG(cantidad) FROM ENVIOS envios2 WHERE ENVIOS.C#=ENVIOS2.C# group by p#)

PRIMERO DE ASIR

Pgina 6

[EJERCICIOS SQL 15-25] 21. Seleccionar los identificadores de componentes suministrados para el artculo 'T2' por el proveedor 'P2'.
Seleccionaremos los identificadores de los componentes para ello evitamos la duplicacin desde envios para el artculo T2 y por el proveedor P2 SELECT DISTINCT c# FROM ENVIOS WHERE T#='T2' and P#='P2'

PRIMERO DE ASIR

Pgina 7

[EJERCICIOS SQL 15-25] 22. Seleccionar todos los datos de los envos realizados de componentes cuyo color no sea 'ROJO'.
Seleccionamos todos los datos pertenecientes a envois realizados de los components que como indicamos despues de hacer el inner join no sean de color rojo. SELECT ENVIOS.* FROM ENVIOS inner join COMPONENTES on ENVIOS.C#=COMPONENTES.C# WHERE COMPONENTES.COLOR<>'ROJO'

PRIMERO DE ASIR

Pgina 8

[EJERCICIOS SQL 15-25] 23. Seleccionar los identificadores de componentes que se suministren para los artculos 'T1' y 'T2'.
Seleccionamos los identificadores de componentes que se suministren para los artculos T1 y T2 para estos creamos dos consultas una indicando los que se suministran para el articulo t1 y otra para el t2 desde la tabla envios y luego la unimos el operador INTERSECT para devolver todas las filas comunes a estas dos consultas. SELECT C# FROM ENVIOS WHERE T#='T1' INTERSECT SELECT C# FROM ENVIOS WHERE T#='T2'

PRIMERO DE ASIR

Pgina 9

[EJERCICIOS SQL 15-25] 24. Seleccionar el identificador de proveedor y el nmero de envos de componentes de color 'ROJO' llevados a cabo por cada proveedor.
Obtenemos el indentificador del proveedor el nmero deenvios con un contador sobre todos ellos y renombrandolo como nmero de envios desde envios y en la clausula ehere indicaremos que el numero de envios sean de componentes de color rojo. SELECT P#, COUNT(*) as [Numero de envios] FROM ENVIOS where envios.C# IN (SELECT C# from COMPONENTES WHERE COLOR='ROJO') GROUP BY P#;

25. Seleccionar los colores de componentes suministrados por el proveedor 'P1'.


Seleccionamos el color desde los components que son enviados donde el proveedor es p1 SELECT color from COMPONENTES inner join ENVIOS On COMPONENTES.C#=ENVIOS.C# WHERE ENVIOS.P#='p1'

PRIMERO DE ASIR

Pgina 10

[EJERCICIOS SQL 15-25]

PRIMERO DE ASIR

Pgina 11