Advertisement
AmbarG

simulacro2024RepasoNuevo

Nov 18th, 2024
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. SELECT nom_alumno, domicilio FROM alumno WHERE dni IN
  2. (SELECT dni FROM clase WHERE cod_idioma IN
  3. (SELECT cod_idioma FROM idioma WHERE cod_nivel =
  4. (SELECT cod_nivel FROM nivel where nom_nivel = 'basico')) AND legajo IN
  5. (SELECT legajo FROM profesor WHERE nombre = 'juarez'));
  6.  
  7. SELECT nom_alumno, domicilio FROM alumno WHERE dni IN
  8. (SELECT dni FROM clase WHERE cod_idioma IN
  9. (SELECT cod_idioma FROM idioma WHERE cod_nivel='BAS') AND legajo IN
  10. (SELECT legajo FROM profesor WHERE nombre = 'juarez'));
  11.  
  12. SELECT a.nom_alumno, a.domicilio FROM alumno a
  13. INNER JOIN clase c ON a.dni=c.dni
  14. INNER JOIN idioma i ON c.cod_idioma=i.cod_idioma
  15. INNER JOIN nivel n ON i.cod_nivel=n.cod_nivel
  16. INNER JOIN profesor p ON c.legajo=p.legajo
  17. WHERE n.nom_nivel='basico' AND p.nombre='juarez';
  18.  
  19. select * from nivel;
  20.  
  21. --1) Utilice pareo de tablas y muestre la cantidad de idiomas que dicta cada profesor, agrupados por nombre de profesor.
  22. select p.nombre, count (i.cod_idioma) from idioma i
  23. inner join clase c on i.cod_idioma = c.cod_idioma
  24. inner join profesor p on c.legajo = p.legajo
  25. group by p.nombre;
  26.  
  27.  
  28. --2) Utilice inner join y muestre la duración, el nombre de nivel, el nombre del idioma y el precio de las clases dictadas el día
  29. --26/10/2024.
  30.  
  31. select n.duracion,n.nom_nivel,i.nom_idioma,i.precio,c.dia from clase c
  32. inner join idioma i on c.cod_idioma= i.cod_idioma
  33. inner join nivel n on i.cod_nivel = n.cod_nivel
  34. where c.dia = '26-10-2024';
  35.  
  36. --3) Utilice subconsultas y muestre para el profesor “Castro” las aulas donde dicta clases.
  37. select p.nombre, c.aula from clase c
  38. inner join profesor p on c.legajo = p.legajo
  39. where p.nombre = 'castro';
  40.  
  41. --4) Utilice subconsultas y muestre para el alumno “Maria Rocha” los días y aulas asignados para su clase de “Inglés”.
  42.  
  43. select a.nom_alumno, c.dia, c.aula, i.nom_idioma from clase c
  44. inner join alumno a on c.dni=a.dni
  45. inner join idioma i on c.cod_idioma = i.cod_idioma
  46. where a.nom_alumno = 'maria rocha' and i.nom_idioma = 'ingles';
  47.  
  48. --5) Muestre el nombre del profesor y el precio de los idiomas cuyo precio son menores a 1100,00.
  49.  
  50. select p.nombre, i.nom_idioma, i.precio from clase c
  51. inner join profesor p on c.legajo = p.legajo
  52. inner join idioma i on i.cod_idioma = c.cod_idioma
  53. where i.precio < 1100.00;
  54.  
  55. --6) Realice una función que permita ingresar el Código de idioma y muestre la cantidad de clases que se dictan para ese
  56. --idioma
  57.  
  58. create or replace function cantidad_clases(codidioma varchar)
  59. returns integer as $$
  60. declare
  61.     cantidad integer;
  62. begin
  63.     select count(*) into cantidad from clase c
  64.     inner join idioma i on c.cod_idioma = i.cod_idioma
  65.     where c.cod_idioma = codidioma;
  66.     return cantidad;
  67. end;
  68. $$language plpgsql;
  69.  
  70. select cantidad_clases('AL');
  71.  
  72.  
  73. --7) Realice una función que reciba como parámetro el Legajo de Profesor, cargue un cursor con los códigos y precios de los
  74. --idiomas que tiene a su cargo y muestre el total recaudado. Considere que se realiza el 20% de descuento cuando el idioma
  75. --es “Alemán”.
  76.  
  77. CREATE OR replace function recaudacion(legajjo integer)
  78. returns numeric as $$
  79. declare
  80.     cursorr cursor for
  81.     select i.cod_idioma,i.precio from clase c
  82.     inner join idioma i on c.cod_idioma = i.cod_idioma
  83.     inner join profesor p on c.legajo = c.legajo
  84.     where p.legajo = legajjo;
  85.  
  86.     v_codigo varchar;
  87.     v_precio numeric;
  88.     total numeric :=0;
  89.  
  90. begin
  91.     open cursorr;
  92.     loop
  93.         fetch cursorr into v_codigo,v_precio;
  94.         exit when not found;
  95.  
  96.         if(select nom_idioma from idioma where cod_idioma =v_codigo ) = 'AL' then
  97.             total := total + (v_precio * 0.80);
  98.         else
  99.             total := total + v_precio;
  100.         end if;
  101.  
  102.     end loop;
  103.     close cursorr;
  104.     return total;
  105. end;
  106. $$language plpgsql;
  107.  
  108. select recaudacion(88);
  109.    
  110.  
  111. --8) Realice un cursor que reciba como parámetro un “dia” y guarde el dni, nombre del idioma, nombre del profesor y nombre
  112. --del alumno, luego recorra el cursor y muestre el contenido del mismo
  113.  
  114. create or replace function recibir(diaa date)
  115. returns void as $$
  116. declare
  117.     datos cursor for
  118.     select a.dni, i.nom_idioma, p.nombre, a.nom_alumno from clase c
  119.     inner join alumno a on c.dni = a.dni
  120.     inner join profesor p on c.legajo = p.legajo
  121.     inner join idioma i on c.cod_idioma = i.cod_idioma
  122.     where c.dia = diaa;
  123.  
  124.     v_dni integer;
  125.     v_nombre_idioma varchar;
  126.     v_nombre varchar;
  127.     v_nombre_alumno varchar;
  128.  
  129. begin
  130.     open datos;
  131.     loop
  132.         fetch datos into v_dni,v_nombre_idioma,v_nombre,v_nombre_alumno;
  133.         exit when not found;
  134.  
  135.         raise notice'dni: %,nombre idioma: %,nombre: %, nombre alumno: %', v_dni,v_nombre_idioma,v_nombre,v_nombre_alumno;
  136.     end loop;
  137.     close datos;
  138. end;
  139. $$language plpgsql;
  140. select recibir('25-10-2024');
  141.  
  142.  
  143. --9) Realice un trigger que antes de ingresar una nueva clase verifique que se haya asignado un aula, y si el campo aula está
  144. --vacío no inserte ese registro y debe mostrar el mensaje “debe asignar un aula para la clase”
  145. create or replace function verificacionn()
  146. returns trigger as $$
  147. begin
  148.     if new.aula is null or trim (new.aula) = '' then
  149.         raise exception 'debe asignar un aula para la clase';
  150.     end if;
  151.     return new;
  152. end;
  153. $$language plpgsql;
  154.  
  155. create trigger verificarr
  156. before insert on clase
  157. for each row
  158. execute function verificacionn();
  159.  
  160. --10)Realice un trigger que luego de insertar un registro en la tabla “clase”, inserte un nuevo registro en la tabla
  161. --“historial_clase”, ésta última tabla posee la misma estructura de la tabla “clase”, pero se le adiciona el campo
  162. --“fecha_registro” de tipo fecha, en el cual debe registrar la fecha actual (con current_date puede registrar la fecha del
  163. --sistema).
  164.  
  165. create table historial_clase(dni integer, cod_idioma varchar, legajo integer, dia date, aula integer, fecha_registro date);
  166.  
  167. create or replace function insertar()
  168. returns trigger as $$
  169. begin
  170.     insert into historial_clase(
  171.     dni,
  172.     cod_idioma,
  173.     legajo,
  174.     dia,
  175.     aula,
  176.     fecha_registro)
  177.     values(
  178.     new.dni,
  179.     new.cod_idioma,
  180.     new.legajo,
  181.     new.dia,
  182.     current_date
  183.     );
  184.  
  185.     return new;
  186. end;
  187. $$language plpgsql;
  188.  
  189. create trigger insercionn
  190. after insert on clase
  191. for each row
  192. execute function insertar();
  193.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement