GreysitoErPutoAmo

Actividades Complementarias T6

Mar 5th, 2015
401
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 7.09 KB | None | 0 0
  1. -- Modifica el número de plazas con un valor igual a la mitad en aquellos centros con menos de dos profesores
  2.  
  3. UPDATE centros
  4. SET num_plazas=num_plazas/2
  5. WHERE cod_centro
  6. IN (SELECT cod_centro FROM profesores GROUP BY cod_centro HAVING COUNT(*)<2)
  7. OR (COD_CENTRO NOT IN (SELECT DISTINCT COD_CENTRO FROM PROFESORES));
  8.  
  9. -- Elimina los centros que no tengan personal
  10.  
  11. DELETE centros
  12. WHERE cod_centro
  13. IN (SELECT cod_centro FROM profesores GROUP BY cod_centro HAVING COUNT(*)=0);
  14.  
  15. -- Añade un nuevo profesor en el centro o en los centros cuyo número de administrativos sea 1 en la especialidad de 'IDIOMA', con DNI 8790055 y de nombre 'Clara Salas'.
  16.  
  17. INSERT INTO profesores
  18.  (cod_centro, dni, apellidos, especialidad)
  19.  SELECT DISTINCT cod_centro, 8790055, 'CLARA SALAS', 'IDIOMA'
  20.  FROM centros
  21.  WHERE cod_centro IN (SELECT cod_centro FROM personal
  22.  WHERE funcion='ADMINISTRATIVO'
  23.  GROUP BY cod_centro
  24.  HAVING COUNT(*)=1);
  25.  
  26.  -- Borra al personal que esté en centros de menos de 300 plazas y con menos de dos profesores.
  27.  -- Añadimos los que no tienen personal despues del AND y antes del OR.
  28. DELETE FROM personal
  29.  WHERE cod_centro IN (SELECT cod_centro FROM centros
  30.  WHERE num_plazas < 300) AND (cod_centro NOT IN (SELECT DISTINCT cod_centro FROM profesores)
  31.  OR cod_centro IN
  32.  (SELECT cod_centro FROM profesores
  33.  GROUP BY cod_centro
  34.  HAVING COUNT(*)<2));
  35.  
  36.  -- Borra a los profesores que estén en la tabla PROFESORES y que no estén en la tabla PERSONAL.
  37.  
  38.  DELETE FROM profesores
  39.   WHERE dni NOT IN
  40.   (SELECT dni
  41.   FROM personal
  42.   WHERE funcion='PROFESOR');
  43.  
  44.   -- Da de alta un nuevo artículo de 'Primera' categoría para los fabricantes de 'FRANCIA' y abastece con 5 unidades de ese artículo a todas las tiendas y en la fecha de hoy.
  45.  
  46.   COMMIT;
  47.  
  48. INSERT INTO articulos
  49. SELECT 'Tampones', cod_fabricante, 1,'Primera',100,75,35
  50. FROM fabricantes
  51. WHERE pais='FRANCIA'; -- FALTA LA SEGUNDA PARTE.
  52.  
  53.      -- Proporcionar el numero de tiendas y de existencias mínimas
  54.  
  55. SELECT 5*(SELECT COUNT(*) FROM TIENDAS) FROM DUAL -- ???????????????? WTF
  56.  
  57. INSERT INTO ARTICULOS
  58. SELECT 'Tampones', COD_FABRICANTE, 4, 'Primera', 1.20, 1, 5*(SELECT COUNT (*) FROM TIENDAS)
  59. FROM FABRICANTES
  60. WHERE PAIS = 'FRANCIA';
  61.  
  62. INSERT INTO PEDIDOS
  63. SELECT NIF, 'Tampones', cod_fabricante, 4, 'Primera', SYSDATE, 5
  64. FROM tiendas, faricantes
  65. WHERE PAIS = 'FRANCIA';
  66.  
  67.  -- Inserta un pedido de 20 unidades en la tienda '1111-A' con el artículo que mayor número de ventas haya realizado.
  68.  -- (poner el distinct y group by articulo, cod_fabricante, peso, categoria)
  69.  
  70. INSERT INTO PEDIDOS        
  71.            SELECT DISTINCT '1111-A', articulo, cod_fabricante, peso, categoria, SYSDATE, 20
  72.            FROM ventas
  73.            WHERE articulo=(SELECT articulo FROM ventas
  74.            GROUP BY articulo, cod_fabricante, peso, categoria
  75.            HAVING SUM(unidades_vendidas) =
  76.            (SELECT (MAX(SUM(unidades_vendidas)))
  77.            FROM ventas
  78.            GROUP BY articulo, cod_fabricante, peso, categoria));
  79.  
  80. -- Da de alta una tienda en la provincia de 'MADRID' y abastécela con 20 unidades de cada uno de los artículos existentes.                  
  81.                  
  82. INSERT INTO tiendas
  83.  VALUES ('6755-J','PAPITOmarket','C/Mi Amool 69','Madrid','Madrid',28043);
  84.  
  85. INSERT INTO pedidos
  86.  SELECT '6755-J',articulo, cod_fabricante, peso,categoria, SYSDATE, 20
  87.  FROM articulos;
  88.  
  89. -- Da de alta dos tiendas en la provincia de 'SEVILLA' y abastécelas con 30 unidades de artículos de la marca de fabricante 'GALLO'.
  90.  
  91. INSERT INTO TIENDAS VALUES ('4100-A', 'CACASHOP', 'C/ZURULLO 20', 'Sevilla', 'Sevilla', 41500);
  92. INSERT INTO TIENDAS VALUES ('4545-B', 'MIERDITIENDA', 'C/ESCROTO 30','Sevilla', 'Sevilla', 41500);
  93.  
  94. INSERT INTO pedidos
  95.     SELECT DISTINCT NIF, ARTICULO, A.COD_FABRICANTE, PESO CATEGORIA, SYSDATE, 30
  96.     FROM TIENDAS, ARTICULOS A, FABRICANTES F
  97.     WHERE F.NOMBRE='GALLO' AND PROVINCIA='SEVILLA' AND A.COD_FABRICANTE = F.COD_FABRICANTE;
  98.  
  99. -- Realiza una venta para todas las tiendas de 'TOLEDO' de 10 unidades en los artículos de 'Primera' categoría.
  100.  
  101. INSERT INTO VENTAS
  102.   SELECT NIF, ARTICULO, COD_FABRICANTE, PESO, CATEGORIA, SYSDATE, 10
  103.   FROM articulos,tiendas
  104.   WHERE categoria='Primera'
  105.   AND provincia='TOLEDO';
  106.  
  107. -- Para aquellos artículos de los que se hayan vendido más de 30 unidades, realiza un pedido de 10 unidades para la  tienda con NIF '5555-B' con la fecha actual. AGRUPAR TAMBIÉN POR COD_FABRICANTE Y PONER SELECT DISTINCT.
  108.  
  109. INSERT INTO PEDIDOS SELECT DISTINCT '5555-B', ARTICULO, COD_FABRICANTE, PESO, CATEGORIA, SYSDATE, 10 FROM VENTAS WHERE ARTICULO IN  
  110. (SELECT ARTICULO FROM VENTAS
  111. GROUP BY ARTICULO, COD_FABRICANTE, PESO, CATEGORIA
  112. HAVING SUM(UNIDADES_VENDIDAS)>30);
  113.  
  114.         --Otra forma de hacerlo mas sencilla
  115.  
  116. INSERT INTO PEDIDOS
  117.     SELECT DISTINCT '5555-B', ARTICULO, COD_FABRICANTE, PESO, CATEGORIA, SYSDATE, 10
  118.     FROM VENTAS
  119.     GROUP BY ARTICULO, COD_FABRICANTE, PESO, CATEGORIA
  120.     HAVING SUM(UNIDADES_VENDIDAS)>30;
  121.  
  122. --  Cambia los datos de la tienda con NIF '1111-A' igualándolos a los de la tienda con NIF '2222-A'.
  123.  
  124. UPDATE TIENDAS SET (NOMBRE, DIRECCIÓN,POBLACIÓN,PROVINCIA,CODPOSTAL)=
  125.     (SELECT NOMBRE, DIRECCIÓN,POBLACIÓN,PROVINCIA,CODPOSTAL FROM TIENDAS WHERE NIF = '2222-A')
  126.     WHERE NIF='1111-A';
  127.  
  128. -- Cambiar todos los artículos de ‘primera’ a 'segunda categoría del país ITALIA
  129.  
  130. UPDATE articulos
  131.  SET categoria='Segunda'
  132.  WHERE categoria='Primera' AND
  133.  cod_fabricante = (SELECT cod_fabricante FROM fabricantes
  134.  WHERE pais='ITALIA');
  135.  
  136. -Modifica aquellos pedidos en los que la cantidad pedida sea superior a las existencias del artículo, asignando el 20 por 100 de las existencias a la cantidad que se ha pedido.
  137.  
  138. UPDATE PEDIDOS P SET UNIDADES_PEDIDAS=
  139. (SELECT EXISTENCIAS*0.2 FROM ARTICULOS WHERE
  140.     ARTICULO=P. ARTICULO AND
  141.     COD_FABRICANTE=P. COD_FABRICANTE AND
  142.     PESO=P. PESO AND
  143.     CATEGORIA=P. CATEGORIA )
  144.     WHERE UNIDADES_PEDIDAS >
  145.         (SELECT EXISTENCIAS FROM ARTICULOS WHERE
  146.         ARTICULO=P. ARTICULO AND
  147.         COD_FABRICANTE=P. COD_FABRICANTE AND
  148.         PESO=P. PESO AND
  149.         CATEGORIA=P. CATEGORIA);
  150.  
  151. -- Eliminar aquellas tiendas que no han realizado ventas.
  152.  
  153. DELETE FROM TIENDAS WHERE NIF NOT IN (SELECT NIF FROM VENTAS);
  154.  
  155. -- Eliminar los artículo que no hayan tenido no compras ni ventas.
  156.  
  157. DELETE FROM ARTICULOS
  158.  WHERE (ARTICULO, COD_FABRICANTE, PESO, CATEGORIA) NOT IN
  159.     (SELECT DISTINCT ARTICULO COD_FABRICANTE, PESO, CATEGORIA FROM VENTAS
  160.      GROUP BY ARTICULO)
  161.  AND (ARTICULO, COD_FABRICANTE, PESO, CATEGORIA) NOT IN
  162.     (SELECT DISTINCT ARTICULO, COD_FABRICANTE, PESO, CATEGORIA FROM PEDIDOS
  163.     GROUP BY ARTICULO);
  164.  
  165. -- Borrar los pedidos de ‘primera’ categoría cuyo país de procedencia sea BÉLGICA.
  166.  
  167. DELETE FROM PEDIDOS
  168.  WHERE COD_FABRICANTE = (SELECT COD_FABRICANTE FROM FABRICANTES WHERE PAIS='BELGICA');
  169.  
  170. -- Borrar los pedidos que no tengan tienda.
  171.  
  172.  DELETE FROM PEDIDOS
  173.   WHERE NIF NOT IN(SELECT NIF FROM TIENDAS);
  174.  
  175. -- Restar uno a las unidades de los últimos pedidos de la tienda con nif 555-B
  176.  
  177. UPDATE PEDIDOS
  178.  SET UNIDADES_PEDIDAS=UNIDADES_PEDIDAS-1
  179.  WHERE NIF='5555-B' AND
  180.  FECHA_PEDIDO= (SELECT MAX(FECHA_PEDIDO) FROM PEDIDOS WHERE NIF='5555-B');
Add Comment
Please, Sign In to add comment