trabajo resuelto alcoles

Upload: miguel-zavala

Post on 03-Apr-2018

225 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/28/2019 Trabajo Resuelto Alcoles

    1/14

    COMITAN

    INSTITUTO TECNOLOGICO DE COMITANCAMPUS CIITIC

    INSTRUCCIONES:

    I. RESUELVE LA SIGUIENTE SERIE DE EJERCICIOS EN SQL, ESCRIBE EL SCRIPTUTILIZADO EN LA PARTE DE LAS SOLUCIONES, AS COMO LA SALIDA PRODUCIDA,COMO LO EJEMPLIFICA LA SOLUCIN NMERO 1.

    EJERCICIO A RESOLVERPresentamos 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:

    PROVEEDORESNUMPROVchar(2)

    PNOMBREchar(10)

    CATEGORIAtynint

    CIUDADchar(20)

    P1 CARLOS 20 COMITANP2 JUAN 10 SAN CRISTOBALP3 JOSE 30 COMITAN

    P4 INMA 20 COMITANP5 EVA 30 TUXTLA

    GUTIERREZ

    COMPONENTESNUMCOMPOchar(2)

    CNOMBREchar(3)

    COLORchar(10)

    PESOtynint

    CIUDADchar(20)

    C1 X3A ROJO 12 COMITANC2 B85 VERDE 17 SAN

    CRISTOBALC3 C4B AZUL 17 LAS

    MARGARITAS

    C4 C4B ROJO 14 COMITANC5 VT8 AZUL 12 SAN

    CRISTOBALC6 C30 ROJO 19 COMITAN

    ARTICULOSNUMARTICchar(2)

    TNOMBREchar(20)

    CIUDADchar(20)

    T1 CLASIFICADOR SAN CRISTOBAL

    1Fundamentos de Bases de Datos

    LICENCIATURA LICENCIATURA EN INFORMATICA

    MATERIA FUNDAMENTOS DE BASES DE DATOS

    SEMESTRE 4 GRUPO PRCTICA

    ASESOR L.I. PEDRO ALCOLES CORNELIO

    ESTUDIANTE FECHA 24/MAYO/2012

  • 7/28/2019 Trabajo Resuelto Alcoles

    2/14

    AT2 PERFORADORA LAS

    MARGARITAST3 LECTORA TUXTLA

    GUTIERREZT4 CONSOLA TUXTLA

    GUTIERREZT5 MEZCLADORA COMITANT6 TERMINAL LA TRINITARIAT7 CINTA COMITAN

    ENVIOSNUMPROVchar(2)

    NUMCOMPOchar(2)

    NUMARTICchar(2)

    CANTIDADint

    P1 C1 T1 200

    P1 C1 T4 700P2 C3 T1 400P2 C3 T2 200P2 C3 T3 200P2 C3 T4 500P2 C3 T5 600

    P2 C3 T6 400P2 C3 T7 800P2 C5 T2 100P3 C3 T1 200P3 C4 T2 500P4 C6 T3 300P4 C6 T7 300P5 C2 T2 200P5 C2 T4 100P5 C5 T4 500P5 C5 T7 100P5 C6 T2 200P5 C1 T4 100P5 C3 T4 200P5 C4 T4 800P5 C5 T5 400P5 C6 T4 500

    PROVEEDORES .- Representa los datos de proveedores de componentes para lafabricacin de artculos y su ciudad de residencia.

    COMPONENTES.- Indica la informacin de piezas utilizadas en la fabricacin de diferentesartculos, indicndose el lugar de fabricacin de dichos componentes.

    ARTICULOS.- Informacin sobre los diferentes artculos que se fabrican y el lugar demontaje del mismo.

    ENVIOS.- Suministros realizados por los diferentes proveedores de determinadascantidades 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.

    2Fundamentos de Bases de Datos

  • 7/28/2019 Trabajo Resuelto Alcoles

    3/14

    c) Intenta representar la consulta mediante una expresin algebraica relacional. (Puedenexistir numerosas expresiones algebraicas relacionales equivalentes que respondan a lamisma consulta).c) Expresa la consulta mediante una sentencia SELECT de SQL.d) Pueden existir distintas formas de escribir una consulta SQL que resuelva el apartadoanterior. Se te ocurre alguna otra forma de expresin de la sentencia en SQL pararepresentar la consulta?.No te fes de los datos particulares del ejemplo; puede que obtengas el mismo resultadoque la solucin correcta, pero que sea errnea tu consulta para otros datos diferentes. Tusolucin 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 quesean tambin correctas.

    SOLUCIONES A LOS EJERCICIOS

    CREATEDATA BASEbdempresa;

    USEbdempresa;

    -- Estructura de tabla para la tabla `articulos`

    CREATETABLE`articulos`(

    `tno`varchar(10)NOTNULLdefault'',

    `tnombre`varchar(40)defaultNULL,

    `ciudad`varchar(40)defaultNULL,PRIMARYKEY (`tno`)

    )ENGINE=InnoDBDEFAULTCHARSET=latin1;

    -- Volcar la base de datos para la tabla `articulos`

    INSERTINTO`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`

    CREATETABLE`componentes`(

    `cno`varchar(10)NOTNULLdefault'',

    `cnombre`varchar(20)defaultNULL,

    `color`varchar(20)defaultNULL,

    `peso`floatdefaultNULL,

    `ciudad`varchar(40)defaultNULL,

    PRIMARYKEY (`cno`)

    )ENGINE=InnoDBDEFAULTCHARSET=latin1;

    -- Volcar la base de datos para la tabla `componentes`

    INSERTINTO`componentes`(`cno`,`cnombre`,`color`,`peso`,`ciudad`)VALUES('C1','X3A','ROJO',12,'COMITAN'),

    ('C2','B85','VERDE',17,'SAN CRISTOBAL'),

    ('C3','C4B','AZUL',17,'LAS MARGARITAS'),

    ('C4','C4B','ROJO',14,'COMITAN'),

    ('C5','VT8','AZUL',12,'SAN CRISTOBAL'),

    ('C6','C30','ROJO',19,'COMITAN');

    -- Estructura de tabla para la tabla `envios`

    3Fundamentos de Bases de Datos

  • 7/28/2019 Trabajo Resuelto Alcoles

    4/14

    CREATETABLE`envios`(

    `pno`varchar(10)defaultNULL,

    `cno`varchar(10)defaultNULL,

    `tno`varchar(10)defaultNULL,

    `cantidad`int(11)defaultNULL

    )ENGINE=InnoDBDEFAULTCHARSET=latin1;

    -- Volcar la base de datos para la tabla `envios`

    INSERTINTO`envios`(`pno`,`cno`,`tno`,`cantidad`)VALUES

    ('P1','C1','T1',200),

    ('P1','C1','T4',700),('P2','C3','T1',400),

    ('P2','C3','T2',200),

    ('P2','C3','T3',200),

    ('P2','C3','T4',500),

    ('P2','C3','T5',600),

    ('P2','C3','T6',400),

    ('P2','C3','T7',800),

    ('P2','C5','T2',100),

    ('P3','C3','T1',200),

    ('P3','C4','T2',500),

    ('P4','C6','T3',300),

    ('P4','C6','T7',300),

    ('P5','C2','T2',200),

    ('P5','C2','T4',100),('P5','C5','T4',500),

    ('P5','C5','T7',100),

    ('P5','C6','T2',200),

    ('P5','C1','T4',100),

    ('P5','C3','T4',200),

    ('P5','C4','T4',800),

    ('P5','C6','T4',500),

    ('P5','C5','T5',400);

    -- Estructura de tabla para la tabla `proveedores`

    CREATETABLE`proveedores`(

    `pno`varchar(20)NOTNULLdefault'',

    `pnombre`varchar(20)defaultNULL,

    `catergoria`int(11)defaultNULL,

    `ciudad`varchar(40)defaultNULL,

    PRIMARYKEY (`pno`)

    )ENGINE=InnoDBDEFAULTCHARSET=latin1;

    -- Volcar la base de datos para la tabla `proveedores`

    INSERTINTO`proveedores`(`pno`,`pnombre`,`catergoria`,`ciudad`)VALUES

    ('P1','CARLOS',20,'COMITAN'),

    ('P2','JUAN',10,'SAN CRISTOBAL'),('P3','JOSE',30,'COMITAN'),

    ('P4','INMA',20,'COMITAN'),

    ('P5','EVA',30,'TUXTLA GUTIERREZ');

    EJERCICIOS SOLUCIONADOS (puedes mejorar la solucin)

    1. Obtener todos los detalles de todos los artculos de TUXTLA GUTIERREZ.

    4Fundamentos de Bases de Datos

  • 7/28/2019 Trabajo Resuelto Alcoles

    5/14

    ciudad=TUXTLA GUTIERREZ(articulos);

    select*fromarticuloswhereciudad="TUXTLA GUTIERREZ";

    2. Obtener todos los valores de P# para los proveedores que abastecen el artculo T1.

    pno( tno=T1 (envios))

    selectpnofromenvioswheretno="T1";

    3. Obtener la lista de pares de atributos (COLOR, CIUDAD) de la tabla componentes

    eliminando los pares duplicados.

    color, ciudad (componentes)

    selectdistinctcolor,ciudadfromcomponentes;

    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))

    selecttno,ciudadfromarticuloswhereciudadlike'%D'orciudadlike'%E%';

    5. Obtener los valores de P# para los proveedores que suministran para el artculo T1

    el componente C1.

    selectpnofromenvioswheretno="T1"andcno="C1";

    pno( tno=T1 and con=C1 (envios))

    5Fundamentos de Bases de Datos

  • 7/28/2019 Trabajo Resuelto Alcoles

    6/14

    6. Obtener los valores de TNOMBRE en orden alfabtico para los artculos abastecidos

    por el proveedor P1.

    selectdistincttnombrefromarticulos,envioswherearticulos.tno=envios.tno

    andenvios.pno="P1"orderbytnombre;

    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, articuloswhere envios.tno=articulos.tnoAND

    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.selectcnofromcomponenteswherepesoIN(selectmin(peso)fromcomponentes);

    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 envioswhere tno="T1"AND pno IN (select pno from envios

    wheretno="T2");

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

    Fundamentos de Bases de Datos

  • 7/28/2019 Trabajo Resuelto Alcoles

    7/14

    10.Obtener los valores de P# para los proveedores que suministran para un artculo

    de COMITAN o SAN CRISTOBAL un componente ROJO.

    selectpnofromenvios,articulos,componenteswhereenvios.tno=articulos.tno

    AND envios.cno=componentes.cno AND (articulos.ciudad="COMITAN" OR

    articulos.ciudad="SAN CRISTOBAL")AND componentes.color="ROJO";

    pno (envios X ( ciudad=SAN CRISTOBAL(articulos)) and (

    color=ROJO(componentes)))

    11.Obtener, mediante subconsultas, los valores de C# para los componentessuministrados para algn artculo de COMITAN por un proveedor de COMITAN.

    selectcnofromenviose,articulosa,proveedorespwheree.tno=a.tnoand

    e.pno=p.pnoanda.ciudad="COMITAN"ANDp.ciudad="COMITAN";

    cno (envios X ( ciudad=COMITAN(articulos)) and (

    ciudad=COMITAN(proveedores)))

    12.Obtener los valores de T# para los artculos que usan al menos un componente

    que se puede obtener con el proveedor P1.

    selecte.tnofromenviose,articulosa,componentesc,proveedorespwhere

    e.tno=a.tnoande.cno=c.cnoande.pno=p.pnoande.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.

    7Fundamentos de Bases de Datos

  • 7/28/2019 Trabajo Resuelto Alcoles

    8/14

    selectproveedores.ciudad, envios.cno, articulos.ciudadfromenvios,

    proveedores,articuloswhereenvios.pno=proveedores.pnoand

    envios.tno=articulos.tno;

    (proveedores(ciudad), con(envios), ciudad(articulos)) envios X (

    proveedores, artculos )

    14.

    Repetir el ejercicio anterior pero sin recuperar las ternas en los que los dos valores de

    ciudad sean los mismos.

    selectproveedores.ciudad, envios.cno, articulos.ciudadfromenvios,proveedores,

    articuloswhereenvios.pno=proveedores.pnoandenvios.tno=articulos.tnoand

    proveedores.ciudad!=articulos.ciudad;

    (proveedores(ciudad), con(envios), ciudad(articulos)) envios X ( ciudad

    ciudad (proveedores, artculos))

    8Fundamentos de Bases de Datos

  • 7/28/2019 Trabajo Resuelto Alcoles

    9/14

    15. Obtener el nmero de suministros, el de artculos distintos suministrados y lacantidad total de artculos suministrados por el proveedor P2.selectcount(*),count(distincttno),sum(cantidad)fromenvioswhere pno="p2";

    count(*) , count(distinct tno), sum(articulos)) envios X ( proveedores,

    artculos )

    16. Para cada artculo y componente suministrado obtener los valores de C#, T# y la

    cantidad total correspondiente.

    selectcno,tno,sum(cantidad) fromenviosgroupbycno,tno;

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

    9Fundamentos de Bases de Datos

  • 7/28/2019 Trabajo Resuelto Alcoles

    10/14

    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.

    selectdistinctenvios.tnofromenvios,proveedores,articuloswhere

    envios.pno=proveedores.pnoandenvios.tno=articulos.tno andproveedores.ciudad!=

    "SAN CRISTOBAL"ANDproveedores.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.

    selectdistinctpnofromenvios,componenteswherecomponentes.color="ROJO";

    distinct pno envios X ( color =ROJO (componentes))

    10Fundamentos de Bases de Datos

  • 7/28/2019 Trabajo Resuelto Alcoles

    11/14

    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.

    selectdistincttnofromenvioswherecnoin(selectcnofromenvios GROUPBYtno

    HAVINGAVG(cantidad)>320);

    distinct tno (envios) cno= ( 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.

    selectdistinctpnofromenviosawherecantidad>(selectavg(cantidad)fromenvios

    bwhereb.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'.

    selectcnofromenvioswheretno="T2"ANDpno="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'.

    selectenvios.*fromenvios,componenteswhere envios.cno=componentes.cnoand

    componentes.color!="ROJO";

    distinct envios.* envios X( colo ROJO (coponentes))

    11Fundamentos de Bases de Datos

  • 7/28/2019 Trabajo Resuelto Alcoles

    12/14

    23. Seleccionar los identificadores de componentes que se suministren para los artculos

    'T1' y 'T2'.

    select distinctcnofromenvioswheretno='T1' andcnoin(selectcnofromenvios

    wheretno='T2');

    distinct cno ( tno=T1 (envios) ) and cno=( con ( tno=T2 (envios))

    (envios))

    24. Seleccionar el identificador de proveedor y el nmero de envos de componentes de

    color 'ROJO' llevados a cabo por cada proveedor.

    selectdistinctpno,count(*)fromenvios,componenteswhere

    envios.cno=componentes.cnoand componentes.color="ROJO" GROUPBYpno;

    distinct pno count(*) envios X ( componentes=ROJO GROUP BY pno)

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

    selectdistinctcolorfromcomponentes,envioswherecomponentes.cno=envios.cnoand

    envios.pno="P1";

    distinct cno ( tno=T1 (envios) ) and cno=( con ( tno=T2 (envios))

    (envios))

    12Fundamentos de Bases de Datos

  • 7/28/2019 Trabajo Resuelto Alcoles

    13/14

    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.ciudadfromenvios,articulos,proveedores,componentes

    where envios.pno=proveedores.pnoandenvios.cno=componentes.cnoand

    envios.tno=articulos.tnoand articulos.ciudad=proveedores.ciudadand

    articulos.ciudad=componentes.ciudadandproveedores.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.

    selectdistinctcnombrefromcomponenteswherecnoin(selectcnofromenviosgroup

    bycnohavingsum(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 suministren ms de dos artculos distintos.

    selectdistinctproveedores.pnofromproveedores,envioswhere

    proveedores.pno=envios.pnoand proveedores.ciudad="COMITAN"andenvios.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.

    13Fundamentos de Bases de Datos

  • 7/28/2019 Trabajo Resuelto Alcoles

    14/14

    selectdistincttnofromenvios,componenteswhere envios.cno=componentes.cno

    groupbytnohavingcount(distinctciudad)=1;

    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 tnofromenviosgroupby tnohavingcount(distinctcno)=(selectcount(*)

    fromcomponentes);

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

    (componentes)

    31. Seleccionar los cdigos de proveedor y artculo que suministran al menos dos

    componentes de color 'ROJO'.

    selectpno,tnofromenvios,componenteswhereenvios.cno=componentes.cnoand

    componentes.color="ROJO"groupbypno,tnohavingcount(*)>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.

    14Fundamentos de Bases de Datos