Anda di halaman 1dari 16

BD 2006/2007 lgebra relacional y SQL

7/12
14.
Repetir el ejercicio anterior pero sin recuperar las ternas en los que los
dos valoresde ciudad sean los mismos.
15.
Obtener el nmero de suministros, el de artculos distintos suministrados
y lacantidad total de artculos suministrados por el proveedor
P2.
Articulo_ciudad (p#, c#, ciudada)

p#,c#,ciudad (Envos * Artculos)

ciudad, c#, ciudada( Proveedores * Articulo_ciudad )


SELECT p.ciudad ,e.c#, a.ciudad FROM envios e, proveedores p , artculos
aWHERE e.p#=p.p# AND e.t#=a.t#;SELECT p.ciudad ,e.c#,
a.ciudad FROM proveedores p JOIN (envios e NATURAL JOIN artculos a)
ON p.p#=e.p#;
CIUDAD C# CIUDAD
SEVILLA C1 MADRIDSEVILLA C1 CACERESMADRID C3
MADRIDMADRID C3 MALAGAMADRID C3 CACERESMADRID C3
CACERESMADRID C3 SEVILLAMADRID C3 BARCELONAMADRID C3
SEVILLAMADRID C5 MALAGASEVILLA C3 MADRIDSEVILLA C4
MALAGASEVILLA C6 CACERESSEVILLA C6
SEVILLACACERES C2 MALAGACACERES C2 CACERESCACERES C5 CA
CERESCACERES C5 SEVILLACACERES C6 MALAGACACERES C1 CACE
RESCACERES C3 CACERESCACERES C4 CACERESCACERES C5 SEVILLA
Articulo_ciudad (p#, c#, ciudada)

p#,c#,ciudad (Envos * Artculos)


ciudad, c#, ciudada(

ciudad<> ciudada (Proveedores * Articulo_ciudad ))


SELECT p.ciudad ,c#, a.ciudad FROM envios e, proveedores p , articulos
aWHERE e.p#=p.p# ANDe.t#=a.t# AND p.ciudad <> a.ciudad;SELECT
p.ciudad ,e.c#, a.ciudad FROM proveedores p JOIN (envios e NATURAL
JOINartculos a) ON p.p#=e.p# and p.ciudad <>a.ciudad;
CIUDAD C# CIUDAD
SEVILLA C1 MADRIDSEVILLA C1 CACERESMADRID C3
MALAGAMADRID C3 CACERESMADRID C3 CACERESMADRID C3
SEVILLAMADRID C3 BARCELONAMADRID C3 SEVILLAMADRID C5
MALAGASEVILLA C3 MADRIDSEVILLA C4 MALAGASEVILLA C6
CACERESCACERES C2 MALAGACACERES C5 SEVILLACACERES C6 M
ALAGA

BD 2006/2007 lgebra relacional y SQL


8/12
16.
Para cada artculo y componente suministrado obtener los valores de
C#, T#
y lacantidad total correspondiente.17.
Obtener los valores de
T#
de los artculos abastecidos al menos por un proveedorque no viva en
MADRID y que no est en la misma ciudad en la que se monta elartculo.
(

()

Count(*) Nmero de Suministros

Count(Distinct t#) Artculos Suministrados

Sum(Cantidad) Total Artculos Suministrados(

p#='P2'( Envos ) ))
SELECT COUNT(*) Nmero de Suministros,COUNT (DISTINCT t#)
Artculos Suministrados,SUM(cantidad) Total Artculos Suministrados FROM
enviosWHERE p#='P2';
Nmero deSuministrosArtculosSuministradosTotal
ArtculosSuministrados
8 7 3200

( c#, t# )

Sum(Cantidad) Total (Envos)


SELECT c#,t#, SUM(cantidad) Total FROM enviosGROUP BY c#,t#;
C# T# Total
C1 T1 200C1 T4 800C2 T2 200C2 T4 100C3 T1 600C3 T2 200C3 T3 200C3
T4 700C3 T5 600C3 T6 400C3 T7 800C4 T2 500C4 T4 800C5 T2 100C5 T4
500C5 T5 400C5 T7 100C6 T2 200C6 T3 300C6 T4 500Prov_no_Madrid (p#,
ciudadp)

p#, ciudad
(

ciudad<>'MADRID' (Proveedores))

t#(

(ciudad <> ciudadp) ( Artculos * (Envos * Prov_no_Madrid )))


SELECT DISTINCT e.t# FROM envios e,articulos aWHERE e.t# = a.t#
AND EXISTS(SELECT * FROM proveedores pWHERE p.ciudad!= a.ciudad
AND p.p# = e.p# AND p.ciudad!='MADRID' );
T#

T1T2T3T4T5T7

BD 2006/2007 lgebra relacional y SQL


9/12
18.

Obtener los valores de


P#
para los proveedores que suministran al menos uncomponente
suministrado al menos por un proveedor que suministra al menos
uncomponente
ROJO
.19.
Obtener los identificadores de artculos, T#, para los que se ha
suministrado algncomponente del que se haya suministrado una media
superior a 320 artculos.20.
Seleccionar los identificadores de proveedores que hayan realizado algn
envo conCantidad mayor que la media de los envos realizados para el
componente a quecorresponda dicho envo.21.
Seleccionar los identificadores de componentes suministrados para el
artculo 'T2'por el proveedor 'P2'.

p#(Envios * (

c#(Envos * (

p#(Envos * (

Color='ROJO' (Componentes)))))))
SELECT distinct p# FROM enviosWHERE c# IN(SELECT c# FROM
enviosWHERE p# IN( SELECT p# FROM envios NATURAL JOIN
componentesWHERE color='ROJO') );
P#
P1P2P3P4P5

t#( Envios * (

c#(

A > 320(


(c#)

AVG(cantidad) A (Envos) ) ) ) )
SELECT DISTINCT t# FROM enviosWHERE c# IN ( SELECT c# FROM
enviosGROUP BY c# HAVING AVG(cantidad) > 320 );
T#
T1T2T3T4T5T6

p#(

(Cantidad > A)(Envos * (

(c#)

AVG(cantidad) A (Envos) ) ))
SELECT distinct p# FROM envios aWHERE cantidad >
(SELECT AVG(cantidad) FROM envios bWHERE b.c#=a.c# );
P#
P1P2P5

c#(

t#='T2' AND p#='P2'(Envos)) Ntese que es un error grave dar como solucin
la expresin:

c#(

t#='T2'(Envos))

c#(

p#='P2'(Envos))
SELECT c# FROM enviosWHERE t# = 'T2' AND p# = 'P2';
C#

C3C5

BD 2006/2007 lgebra relacional y SQL


10/12
22.
Seleccionar todos los datos de los envos realizados de componentes cuyo
color nosea 'ROJO'.23.

Seleccionar los identificadores de componentes que se suministren para


los artculos'T1' y 'T2'.24.
Seleccionar el identificador de proveedor y el nmero de envos de
componentes decolor 'ROJO' llevados a cabo por cada proveedor.25.
Seleccionar los colores de componentes suministrados por el proveedor
'P1'.

Envos.* (Envos* (

Color <> 'ROJO'(Componentes)) )


SELECT e.* FROM envios e, componentes cWHERE e.c# = c.c# AND color
<> 'ROJO';SELECT e.* FROM envios e NATURAL JOIN
componentesWHERE color <> 'ROJO';
P# C# T# CANTIDAD
P5 C2 T2 200P5 C2 T4 100P2 C3 T1 400P3 C3 T1 200P2 C3 T2 200P2 C3
T3 200P2 C3 T4 500P5 C3 T4 200P2 C3 T5 600P2 C3 T6 400P2 C3 T7
800P2 C5 T2 100P5 C5 T4 500P5 C5 T5 400(

c#(

t#='T1'(Envos)) )

c#(

t#='T2'(Envos)) Ntese que es un error grave dar como solucin:

c#(

t#='T1' AND t#='T2'(Envos))


SELECT c# FROM enviosWHERE t# ='T1' INTERSECTSELECT c# FROM
enviosWHERE t# ='T2';
C#
C3

(p#)

COUNT(*)A ( Envos *(

Color = 'ROJO'(Componentes)) )
SELECT p#, count(*) A FROM enviosWHERE c# IN ( SELECT c# FROM
componentesWHERE color = 'ROJO')GROUP BY p# ;
P# A
P1 2P3 1P4 2P5 4

color(Componentes * (

p# = 'P1'(Envos)) )
SELECT DISTINCT color FROM
componentesWHERE c# IN ( SELECT DISTINCT c# FROM enviosWHERE
p# = 'P1');
COLOR
ROJO

BD 2006/2007 lgebra relacional y SQL


11/12
26.
Seleccionar los datos de envo y nombre de ciudad de aquellos envos que
cumplanque el artculo, proveedor y componente son de la misma
ciudad.27.
Seleccionar los nombres de los componentes que son suministrados en
una cantidadtotal superior a 500.28.

Seleccionar los identificadores de proveedores que residan en Sevilla y


nosuministren ms de dos artculos distintos.
Puede parecer que la sentencia SQL es muy diferente de la expresin
algebraica relacional. En realidad sonequivalentes aplicando la siguiente
propiedad del lgebra de conjuntos: A - B = A

B (donde

B representa elcomplementario de B).

c#, t#, p#, cantidad,


ciudad(Artculos * ( Proveedores *( Envos * Componentes))) Nota:
como no se indica nada en *, el join con proveedor se realiza por p# y ciudad;
el join con artculo por el t# yciudad
SELECT e.*, c.ciudad FROM envios e, componentes c,articulos a,
proveedores pWHERE e.t# = a.t# AND e.c# = c.c# ANDe.p# = p.p# AND
p.ciudad=c.ciudad AND p.ciudad = a.ciudad;SELECT e.*,
.ciudad FROM articulos NATURAL JOIN( proveedores NATURAL
JOIN(envios e NATURAL JOIN componentes));
P# C# T# CANTIDAD C.CIUDAD
P4 C6 T7 300 Sevilla

cnombre(Componentes * (

(S > 500)(

(c#)

SUM(cantidad) S ( Envos)) ) )
SELECT DISTINCT cnombre FROM
componentesWHERE c# IN ( SELECT c# FROM enviosGROUP BY
c# HAVING SUM(cantidad)> 500);
CNOMBRE
C30C4BVT8X3A

p#(

ciudad='SEVILLA' (Proveedores))

p#(

(c <= 2)(

(p#)

COUNT(DISTINCT t#) C ( Envos) ) )


(SELECT p# FROM proveedoresWHERE
ciudad='SEVILLA')MINUS(SELECT p# FROM enviosGROUP BY p# HAVING
COUNT(DISTINCT t#) > 2);
P#
P1P3P4

Job Board

Anda mungkin juga menyukai