Sei sulla pagina 1di 14

INSTITUTO TECNOLOGICO DE COMITAN

CAMPUS CIITIC

LICENCIATURA MATERIA
COMITAN

LICENCIATURA EN INFORMATICA FUNDAMENTOS DE BASES DE DATOS 4

SEMESTRE ASESOR

GRUPO

PRCTICA

L.I. PEDRO ALCOLES CORNELIO

ESTUDIANTE

FECHA

24/MAYO/2012

INSTRUCCIONES:

I. RESUELVE LA SIGUIENTE SERIE DE EJERCICIOS EN SQL, ESCRIBE EL SCRIPT UTILIZADO EN LA PARTE DE LAS SOLUCIONES, AS COMO LA SALIDA PRODUCIDA, COMO LO EJEMPLIFICA LA SOLUCIN NMERO 1.
EJERCICIO A RESOLVER Presentamos a continuacin una serie de ejercicios de consulta sobre la base de datos (BDEmpresa) formada por las tablas de PROVEEDORES, COMPONENTES, ARTICULOS y ENVIOS. En dicha base de datos est almacenada la siguiente informacin: PROVEEDORES NUMPROV char(2) P1 P2 P3 P4 P5 COMPONENTES NUMCOMPO char(2) C1 C2 C3 C4 C5 C6 ARTICULOS NUMARTIC char(2) T1 PNOMBRE char(10) CARLOS JUAN JOSE INMA EVA CATEGORIA tynint 20 10 30 20 30 CIUDAD char(20) COMITAN SAN CRISTOBAL COMITAN COMITAN TUXTLA GUTIERREZ PESO tynint 12 17 17 14 12 19 CIUDAD char(20) COMITAN SAN CRISTOBAL LAS MARGARITAS COMITAN SAN CRISTOBAL COMITAN

CNOMBRE char(3) X3A B85 C4B C4B VT8 C30 TNOMBRE char(20) CLASIFICADOR

COLOR char(10) ROJO VERDE AZUL ROJO AZUL ROJO CIUDAD char(20) SAN CRISTOBAL

1 Fundamentos de Bases de Datos

T2 T3 T4 T5 T6 T7 ENVIOS NUMPROV char(2) P1 P1 P2 P2 P2 P2 P2 P2 P2 P2 P3 P3 P4 P4 P5 P5 P5 P5 P5 P5 P5 P5 P5 P5

A PERFORADORA LECTORA CONSOLA MEZCLADORA TERMINAL CINTA NUMCOMPO char(2) C1 C1 C3 C3 C3 C3 C3 C3 C3 C5 C3 C4 C6 C6 C2 C2 C5 C5 C6 C1 C3 C4 C5 C6

LAS MARGARITAS TUXTLA GUTIERREZ TUXTLA GUTIERREZ COMITAN LA TRINITARIA COMITAN NUMARTIC char(2) T1 T4 T1 T2 T3 T4 T5 T6 T7 T2 T1 T2 T3 T7 T2 T4 T4 T7 T2 T4 T4 T4 T5 T4 CANTIDAD int 200 700 400 200 200 500 600 400 800 100 200 500 300 300 200 100 500 100 200 100 200 800 400 500

PROVEEDORES .- Representa los datos de proveedores de componentes para la fabricacin de artculos y su ciudad de residencia. COMPONENTES.- Indica la informacin de piezas utilizadas en la fabricacin de diferentes artculos, indicndose el lugar de fabricacin de dichos componentes. ARTICULOS.- Informacin sobre los diferentes artculos que se fabrican y el lugar de montaje del mismo. ENVIOS.- Suministros realizados por los diferentes proveedores de determinadas cantidades de componentes asignadas para la elaboracin del artculo correspondiente. Para resolver cada consulta, debes seguir los siguientes pasos: a) Lee atentamente el enunciado, hasta que hayas credo entender qu se pide. b) Obtn manualmente los resultados para los datos de ejemplo. 2 Fundamentos de Bases de Datos

c) Intenta representar la consulta mediante una expresin algebraica relacional. (Pueden existir numerosas expresiones algebraicas relacionales equivalentes que respondan a la misma consulta). c) Expresa la consulta mediante una sentencia SELECT de SQL. d) Pueden existir distintas formas de escribir una consulta SQL que resuelva el apartado anterior. Se te ocurre alguna otra forma de expresin de la sentencia en SQL para representar la consulta?. No te fes de los datos particulares del ejemplo; puede que obtengas el mismo resultado que la solucin correcta, pero que sea errnea tu consulta para otros datos diferentes. Tu solucin debe trabajar correctamente para cualquier relacin consistente que pueda almacenar nuestra base de datos. Para cada ejercicio se aporta una posible solucin pero es posible que existan varias que sean tambin correctas. SOLUCIONES A LOS EJERCICIOS
CREATE DATA BASE bdempresa; USE bdempresa; -- Estructura de tabla para la tabla `articulos` CREATE TABLE `articulos` ( `tno` varchar(10) NOT NULL default '', `tnombre` varchar(40) default NULL, `ciudad` varchar(40) default NULL, PRIMARY KEY (`tno`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- Volcar la base de datos para la tabla `articulos` INSERT INTO `articulos` (`tno`, `tnombre`, `ciudad`) VALUES ('T1', 'CLASIFICADORA', 'SAN CRISTOBAL'), ('T2', 'PERFORADORA', 'LAS MARGARITAS'), ('T3', 'LECTORA', 'TUXTLA GUTIERREZ'), ('T4', 'CONSOLA', 'TUXTLA GUTIERREZ'), ('T5', 'MEZCLADORA', 'COMITAN'), ('T6', 'TERMINAL', 'LA TRINITARIA'), ('T7', 'CINTA', 'COMITAN'); -- Estructura de tabla para la tabla `componentes` CREATE TABLE `componentes` ( `cno` varchar(10) NOT NULL default '', `cnombre` varchar(20) default NULL, `color` varchar(20) default NULL, `peso` float default NULL, `ciudad` varchar(40) default NULL, PRIMARY KEY (`cno`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- Volcar la base de datos para la tabla `componentes` INSERT ('C1', ('C2', ('C3', ('C4', ('C5', ('C6', INTO `componentes` (`cno`, `cnombre`, `color`, `peso`, `ciudad`) VALUES 'X3A', 'ROJO', 12, 'COMITAN'), 'B85', 'VERDE', 17, 'SAN CRISTOBAL'), 'C4B', 'AZUL', 17, 'LAS MARGARITAS'), 'C4B', 'ROJO', 14, 'COMITAN'), 'VT8', 'AZUL', 12, 'SAN CRISTOBAL'), 'C30', 'ROJO', 19, 'COMITAN');

-- Estructura de tabla para la tabla `envios`

3 Fundamentos de Bases de Datos

CREATE TABLE `envios` ( `pno` varchar(10) default NULL, `cno` varchar(10) default NULL, `tno` varchar(10) default NULL, `cantidad` int(11) default NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- Volcar la base de datos para la tabla `envios` INSERT ('P1', ('P1', ('P2', ('P2', ('P2', ('P2', ('P2', ('P2', ('P2', ('P2', ('P3', ('P3', ('P4', ('P4', ('P5', ('P5', ('P5', ('P5', ('P5', ('P5', ('P5', ('P5', ('P5', ('P5', INTO `envios` (`pno`, `cno`, `tno`, `cantidad`) VALUES 'C1', 'T1', 200), 'C1', 'T4', 700), 'C3', 'T1', 400), 'C3', 'T2', 200), 'C3', 'T3', 200), 'C3', 'T4', 500), 'C3', 'T5', 600), 'C3', 'T6', 400), 'C3', 'T7', 800), 'C5', 'T2', 100), 'C3', 'T1', 200), 'C4', 'T2', 500), 'C6', 'T3', 300), 'C6', 'T7', 300), 'C2', 'T2', 200), 'C2', 'T4', 100), 'C5', 'T4', 500), 'C5', 'T7', 100), 'C6', 'T2', 200), 'C1', 'T4', 100), 'C3', 'T4', 200), 'C4', 'T4', 800), 'C6', 'T4', 500), 'C5', 'T5', 400);

-- Estructura de tabla para la tabla `proveedores` CREATE TABLE `proveedores` ( `pno` varchar(20) NOT NULL default '', `pnombre` varchar(20) default NULL, `catergoria` int(11) default NULL, `ciudad` varchar(40) default NULL, PRIMARY KEY (`pno`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- Volcar la base de datos para la tabla `proveedores` INSERT ('P1', ('P2', ('P3', ('P4', ('P5', INTO `proveedores` (`pno`, `pnombre`, `catergoria`, `ciudad`) VALUES 'CARLOS', 20, 'COMITAN'), 'JUAN', 10, 'SAN CRISTOBAL'), 'JOSE', 30, 'COMITAN'), 'INMA', 20, 'COMITAN'), 'EVA', 30, 'TUXTLA GUTIERREZ');

EJERCICIOS SOLUCIONADOS (puedes mejorar la solucin) 1. Obtener todos los detalles de todos los artculos de TUXTLA GUTIERREZ. 4 Fundamentos de Bases de Datos

ciudad=TUXTLA GUTIERREZ(articulos); select * from articulos where ciudad="TUXTLA GUTIERREZ";

2. Obtener todos los valores de P# para los proveedores que abastecen el artculo T1.
pno( tno=T1 (envios)) select pno from envios where tno="T1";

3. Obtener la lista de pares de atributos (COLOR, CIUDAD) de la tabla componentes eliminando los pares duplicados.
color, ciudad (componentes) select distinct color, ciudad from componentes;

4. Obtener de la tabla de artculos los valores de T# y CIUDAD donde el nombre de la ciudad acaba en D o contiene al menos una E.
tno, ciudad ( ciudad like %D or ciudad like %E% (articulos)) select tno, ciudad from articulos where ciudad like '%D' or ciudad like '%E%';

5. Obtener los valores de P# para los proveedores que suministran para el artculo T1 el componente C1.
select pno from envios where tno="T1" and cno="C1"; pno( tno=T1 and con=C1 (envios))

5 Fundamentos de Bases de Datos

6. Obtener los valores de TNOMBRE en orden alfabtico para los artculos abastecidos por el proveedor P1.
select distinct tnombre from articulos, envios where articulos.tno=envios.tno and envios.pno="P1" order by tnombre; tnombre (artculos X ( pno=P1 (envios)))1

7. Obtener los valores de C# para los componentes suministrados para cualquier artculo de SAN CRISTOBAL.
select distinct cno from envios, articulos where envios.tno=articulos.tno AND articulos.ciudad="SAN CRISTOBAL"; con (envios X ( ciudad=SAN CRISTOBAL(articulos)))

8. Obtener todos los valores de C# de los componentes tales que ningn otro componente tenga un valor de peso inferior.
select cno from componentes where peso IN (select min(peso) from componentes); con (compoentes peso=( min(peso) (componentes)))

9. Obtener los valores de P# para los proveedores que suministren los artculos T1 y T2.
select pno from envios where tno="T1" AND where tno="T2" ); pno IN (select pno from envios

( pno tno=T1(envios)) ( pno tno=T1(envios))

6 Fundamentos de Bases de Datos

10.Obtener los valores de P# para los proveedores que suministran para un artculo de COMITAN o SAN CRISTOBAL un componente ROJO.
select pno from envios , articulos , componentes where envios.tno=articulos.tno AND envios.cno=componentes.cno AND (articulos.ciudad="COMITAN" OR articulos.ciudad="SAN CRISTOBAL") AND componentes.color="ROJO"; pno (envios X ( color=ROJO(componentes))) ciudad=SAN CRISTOBAL(articulos)) and (

11.Obtener, mediante subconsultas, los valores de C# para los componentes suministrados para algn artculo de COMITAN por un proveedor de COMITAN.
select cno from envios e, articulos a, proveedores p where e.tno=a.tno and e.pno=p.pno and a.ciudad="COMITAN" AND p.ciudad="COMITAN"; cno (envios X ciudad=COMITAN(proveedores))) ( ciudad=COMITAN(articulos)) and (

12.Obtener los valores de T# para los artculos que usan al menos un componente que se puede obtener con el proveedor P1.
select e.tno from envios e, articulos a,componentes c, proveedores p where e.tno=a.tno and e.cno=c.cno and e.pno=p.pno and e.pno="P1"; tno (envios, artculos, componentes X ( pno=P1(envios)))

13. Obtener todas las ternas (CIUDAD, C#, CIUDAD) tales que un proveedor de la primera ciudad suministre el componente especificado para un artculo montado en la segunda ciudad. 7 Fundamentos de Bases de Datos

select proveedores.ciudad, envios.cno, articulos.ciudad from envios, proveedores,articulos where envios.pno=proveedores.pno and envios.tno=articulos.tno ; (proveedores(ciudad), proveedores, artculos ) con(envios), ciudad(articulos)) envios X (

14.

Repetir el ejercicio anterior pero sin recuperar las ternas en los que los dos valores de ciudad sean los mismos.
select proveedores.ciudad, envios.cno, articulos.ciudad from envios, proveedores, articulos where envios.pno=proveedores.pno and envios.tno=articulos.tno and proveedores.ciudad != articulos.ciudad;

(proveedores(ciudad), con(envios), ciudad(articulos)) envios X ( <>ciudad (proveedores, artculos))

ciudad

8 Fundamentos de Bases de Datos

15. Obtener el nmero de suministros, el de artculos distintos suministrados y la cantidad total de artculos suministrados por el proveedor P2.
select count(*), count(distinct tno), sum(cantidad) from envios where count(*) , count(distinct artculos ) tno), sum(articulos)) envios X (

pno ="p2"; proveedores,

16. Para cada artculo y componente suministrado obtener los valores de C#, T# y la cantidad total correspondiente.
select cno, tno, sum(cantidad) from envios group by cno, tno;

(cnom, tno), sum(cantidad) (envios)

9 Fundamentos de Bases de Datos

17. Obtener los valores de T# de los artculos abastecidos al menos por un proveedor que no viva en SAN CRISTOBAL y que no est en la misma ciudad en la que se monta el artculo.
select distinct envios.tno from envios, proveedores, articulos where envios.pno=proveedores.pno and envios.tno=articulos.tno and proveedores.ciudad != "SAN CRISTOBAL" AND proveedores.ciudad != articulos.ciudad; tno envios X ( ciudad <>SAN CRISTOBAL (proveedores) AND ciudad <> ciudad (proveedores, artculos))

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.
select distinct pno from envios, componentes where componentes.color="ROJO"; distinct pno envios X ( color =ROJO (componentes))

10 Fundamentos de Bases de Datos

19. Obtener los identificadores de artculos, T#, para los que se ha suministrado algn componente del que se haya suministrado una media superior a 320 artculos.
select distinct tno from envios where cno in(select cno from envios HAVING AVG(cantidad) > 320); distinct tno (envios) cno= ( GROUP BY tno

con, ( cantidad > 320 (envios)))

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.
select distinct pno from envios a where cantidad >(select avg(cantidad) from envios b where b.cno=a.cno); distinct tpo (envios) cantidad > ( avg(cantidad), ( cantidad > 320 (envios)))

21. Seleccionar los identificadores de componentes suministrados para el artculo 'T2' por el proveedor 'P2'.
select cno from envios where tno="T2" AND pno="P2"; distinct cno (envios) ( tno = T2 and pno=P2)

22. Seleccionar todos los datos de los envos realizados de componentes cuyo color no sea 'ROJO'.
select envios.* from envios, componentes where componentes.color !="ROJO"; distinct envios.cno=componentes.cno and

envios.* envios X( colo <> ROJO (coponentes))

11 Fundamentos de Bases de Datos

23. Seleccionar los identificadores de componentes que se suministren para los artculos 'T1' y 'T2'.
select distinct cno from envios where tno='T1' where tno='T2'); distinct (envios)) and cno in (select cno from envios con ( tno=T2 (envios))

cno ( tno=T1 (envios) ) and cno=(

24. Seleccionar el identificador de proveedor y el nmero de envos de componentes de color 'ROJO' llevados a cabo por cada proveedor.
select distinct pno, count(*) from envios, componentes where envios.cno=componentes.cno and componentes.color="ROJO" GROUP BY pno; distinct pno count(*) envios X ( componentes=ROJO GROUP BY pno)

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


select distinct color from componentes, envios where componentes.cno=envios.cno and envios.pno="P1"; distinct (envios)) cno ( tno=T1 (envios) ) and cno=( con ( tno=T2 (envios))

12 Fundamentos de Bases de Datos

26. Seleccionar los datos de envo y nombre de ciudad de aquellos envos que cumplan que el artculo, proveedor y componente son de la misma ciudad.
select envios.*, articulos.ciudad from envios, articulos, proveedores, componentes where envios.pno=proveedores.pno and envios.cno=componentes.cno and envios.tno=articulos.tno and articulos.ciudad=proveedores.ciudad and articulos.ciudad=componentes.ciudad and proveedores.ciudad=componentes.ciudad; ( envios*, artculos) envios X ( artculos, proveedores, componentes)

27. Seleccionar los nombres de los componentes que son suministrados en una cantidad total superior a 500.
select distinct cnombre from componentes where cno in (select cno from envios group by cno having sum(cantidad) > 500); distinct cnombre (compoenetes) cno in ( con group by cno having sum(cantidad) >500 (envios)

28. Seleccionar los identificadores de proveedores que residan en COMITAN y no su ministren ms de dos artculos distintos.
select distinct proveedores.pno from proveedores, envios where proveedores.pno=envios.pno and proveedores.ciudad="COMITAN" and envios.cantidad > 2; distinct pno (proveedores) envios X ( ciudad=COMITAN (proveedores) and cantidad >2(envios))

29. Seleccionar los identificadores de artculos para los cuales todos sus componentes se fabrican en una misma ciudad. 13 Fundamentos de Bases de Datos

select distinct tno from envios, componentes where group by tno having count(distinct ciudad)=1;

envios.cno=componentes.cno

distinct tno (envios) coponentes X ( cno=cno (envios, componentes) group by tno having count (distitnct ciudad)=1)

30. Seleccionar los identificadores de artculos para los que se provean envos de todos los componentes existentes en la base de datos.
select tno from envios group by from componentes); distinct tno (componentes) tno having count(distinct cno)=(select count(*)

(envios) group by tno having count(distinct cno)=( count(*)

31. Seleccionar los cdigos de proveedor y artculo componentes de color 'ROJO'.

que suministran al menos dos

select pno, tno from envios, componentes where envios.cno=componentes.cno and componentes.color="ROJO" group by pno, tno having count(*) > 1; distinct pno, tno (envios) coponentes X ( cno=cno (envios, componentes) and color=ROJO (componentes) group by pno, tno having count(*)>1)

32. Propn tu mismo consultas que puedan realizarse sobre esta base de datos de ejemplo. Intenta responderla, y si te parece un problema interesante o no ests seguro de su solucin, puedes exponerlos en la clases prcticas para su resolucin en grupo.

14 Fundamentos de Bases de Datos

Potrebbero piacerti anche