Advertisement
AmbarG

Repaso Simulacro

Nov 4th, 2024
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. select * from clase;
  2. --mostrar cuantos estudiantes estan en cada nivel mediante el nombre de nivel:
  3. SELECT n.nom_nivel,
  4. COUNT (c.dni) FROM clase c
  5. INNER JOIN idioma i ON c.cod_idioma=i.cod_idioma
  6. INNER JOIN nivel n ON i.cod_nivel=n.cod_nivel
  7. GROUP BY n.nom_nivel ORDER BY n.nom_nivel desc;
  8.  
  9. SELECT DISTINCT c.dia FROM clase c
  10. INNER JOIN profesor p ON c.legajo=p.legajo
  11. INNER JOIN alumno a ON c.dni=a.dni
  12. INNER JOIN idioma i ON c.cod_idioma=i.cod_idioma
  13. WHERE i.precio BETWEEN 1000 AND 1100;
  14.  
  15. --¿Qué consulta proporciona los nombres y domicilios de los alumnos que asistieron a clases del
  16. --profesor "Juarez" en el nivel "Básico"?
  17.  
  18. select a.nom_alumno,a.domicilio from alumno a
  19. inner join clase c on a.dni = c.dni
  20. inner join profesor p on c.legajo = p.legajo
  21. inner join idioma i on c.cod_idioma = i.cod_idioma
  22. inner join nivel n on i.cod_nivel = n.cod_nivel
  23. where p.legajo = '89' and n.nom_nivel = 'basico';
  24.  
  25. select * from nivel;
  26.  
  27. --A.2) Realice un cursor que reciba como parámetro un código de nivel y guarde todas las clases para ese
  28. --código de nivel. Luego recorra el cursor y las clases cuyo precio son menores a 1500 tienen que ser
  29. --guardados en la tabla “auditoría”. El cursor tiene los siguientes campos: cod_idioma, nom_idioma, precio,
  30. --nom_nivel, día. La tabla "auditoria" no posee clave primaria y tiene la misma estructura del cursor.
  31.  
  32. select * from auditoria;
  33.  
  34. create or replace function guardarClase(codigo_nivel varchar)
  35. returns void as $$
  36. declare
  37.     guardar cursor for
  38.         select i.cod_idioma,i.nom_idioma,i.precio,n.nom_nivel,c.dia from clase c
  39.         inner join idioma i on c.cod_idioma = i.cod_idioma
  40.         inner join nivel n on i.cod_nivel = n.cod_nivel
  41.         where n.cod_nivel = codigo_nivel;
  42.  
  43.     v_cod_idioma varchar(20);
  44.     v_nom_idioma varchar(20);
  45.     v_precio numeric;
  46.     v_nom_nivel varchar(20);
  47.     v_dia date;
  48.  
  49. begin
  50.      open guardar;
  51.      loop
  52.          fetch guardar into v_cod_idioma,v_nom_idioma,v_precio,v_nom_nivel,v_dia;
  53.          exit when not found;
  54.  
  55.     if v_precio < 1500 then
  56.      insert into auditoria(cod_idioma,nom_idioma,precio,nom_nivel,dia)
  57.      values(v_cod_idioma,v_nom_idioma,v_precio,v_nom_nivel,v_dia);
  58.  
  59.      end if;
  60.      end loop;
  61.  
  62.      close guardar;
  63. end;
  64. $$language plpgsql;
  65.      
  66. select guardarClase('INT');
  67. select * from auditoria;
  68.  
  69.  
  70. --A.1) Realice un trigger que antes de registrar una nueva clase, controle si el idioma es “Alemán” no debe
  71. --permitir la inserción, además mostrar el mensaje “curso suspendido”.
  72.  
  73. create or replace function control()
  74. returns trigger as $$
  75. begin
  76.     if(select nom_idioma from idioma
  77.         where cod_idioma = new.cod_idioma)  = 'AL' then
  78.         raise exception 'curso suspendido';
  79.  
  80.     end if;
  81.     return new;
  82. end;
  83. $$language plpgsql
  84.  
  85. create trigger insercion
  86. before insert on clase
  87. for each row
  88. execute function control();
  89.  
  90. insert into clase(dni,cod_idioma,legajo,dia,aula)
  91. values(555,'AL',78,'07-02-2024',14);
  92.  
  93. insert into clase(dni,cod_idioma,legajo,dia,aula)
  94. values(555,'PO',78,'07-02-2024',14);
  95.  
  96. SELECT * FROM CLASE;
  97.  
  98. --1) Utilice pareo de tablas y muestre la cantidad de idiomas que dicta cada profesor, agrupados por nombre de profesor.
  99. select  p.nombre, count(c.cod_idioma) from clase c
  100. inner join profesor p on c.legajo = p.legajo
  101. inner join idioma i on c.cod_idioma = i.cod_idioma
  102. group by p.nombre;
  103.  
  104. --) 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
  105. --26/10/2024.
  106. select n.duracion,n.nom_nivel,i.nom_idioma,i.precio,c.dia from clase c
  107. inner join idioma i on c.cod_idioma = i.cod_idioma
  108. inner join nivel n on i.cod_nivel = n.cod_nivel
  109. where c.dia = '26-10-2024';
  110.  
  111. --3) Utilice subconsultas y muestre para el profesor “Castro” las aulas donde dicta clases.
  112. select p.nombre, c.aula from clase c
  113. inner join profesor p on  c.legajo = p.legajo
  114. where c.legajo = 87;
  115.  
  116. --4) Utilice subconsultas y muestre para el alumno “Maria Rocha” los días y aulas asignados para su clase de “Inglés”.
  117. select a.nom_alumno,c.dia,c.aula,i.nom_idioma from clase c
  118. inner join alumno a on c.dni = a.dni
  119. inner join idioma i on c.cod_idioma = i.cod_idioma
  120. where a.dni = 111 and i.nom_idioma = 'ingles';
  121.  
  122. --5) Muestre el nombre del profesor y el precio de los idiomas cuyo precio son menores a 1100,00.
  123. select p.nombre,i.precio,i.nom_idioma from clase c
  124. inner join profesor p on c.legajo = p.legajo
  125. inner join idioma i on c.cod_idioma  = i.cod_idioma
  126. where i.precio <= 1100.00;
  127.  
  128. --6) Realice una función que permita ingresar el Código de idioma y muestre la cantidad de clases que se dictan para ese
  129. --idioma.
  130. create or replace function cantidadClase(codigo_idioma varchar)
  131. returns integer as $$
  132. declare
  133.     cantidad int;
  134. begin
  135.     select count (*)
  136.     into cantidad from clase c
  137.     inner join idioma i on c.cod_idioma = i.cod_idioma
  138.     where i.cod_idioma = codigo_idioma;
  139.  
  140.     return cantidad;
  141.    
  142. end;
  143. $$language plpgsql;
  144.  
  145. DROP FUNCTION cantidadClase(varchar);
  146.  
  147. select cantidadClase('IN');
  148.  
  149. --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
  150. --idiomas que tiene a su cargo y muestre el total recaudado. Considere que se realiza el 20% de descuento cuando el idioma
  151. --es “Alemán”
  152. create or replace function contar (legajopro int)
  153. returns numeric as $$
  154. declare
  155.     cursorsito cursor for
  156.     select i.cod_idioma,i.precio
  157.     from clase c
  158.     inner join idioma i on c.cod_idioma = i.cod_idioma
  159.     inner join profesor p on c.legajo = p.legajo
  160.     where p.legajo = legajopro;
  161.    
  162.     v_cod_idioma varchar;
  163.     v_precio numeric;
  164.  
  165.     total numeric := 0;
  166.  
  167. begin
  168.     open cursorsito;
  169.     loop
  170.         fetch cursorsito into v_cod_idioma,v_precio;
  171.         exit when not found;
  172.    
  173.     if(select nom_idioma from idioma where cod_idioma = v_cod_idioma) = 'AL' THEN
  174.         total := total + (v_precio * 0.80);
  175.     else
  176.         total := total + v_precio;
  177.     end if;
  178.  
  179.     end loop;
  180.  
  181.     close cursorsito;
  182.  
  183.     return total;
  184. end;
  185. $$language plpgsql;
  186.  
  187. drop function contar(int);
  188.  
  189. SELECT contar(87);
  190.  
  191.  
  192.  
  193.    
  194.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement