Advertisement
Guest User

Untitled

a guest
Dec 11th, 2017
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.05 KB | None | 0 0
  1. /*Actividad 1: */
  2.  
  3.  
  4. --1.Instala MySql. Pon como contraseña de root la palabra ‘austria’.
  5.  
  6. apt-get install mysql-server mysql-client
  7.  
  8. --2. Accede como root
  9.  
  10. mysql -u root -p
  11.  
  12. --3. Implementa la siguiente base de datos que llamaremos “Clase_primera” (pista: se requieren tres tablas):
  13.  
  14. CREATE DATABASE Clase_primera;
  15. use Clase_primera;
  16.  
  17. CREATE TABLE PROFESOR(
  18. DNI_Profesor CHAR(9) PRIMARY KEY,
  19. Nombre_Profesor VARCHAR(20) NOT NULL,
  20. Edad_Profesor INT NOT NULL
  21. );
  22. CREATE TABLE ALUMNO(
  23. DNI_Alumno CHAR(9) PRIMARY KEY,
  24. Nombre_Alumno VARCHAR(20) NOT NULL,
  25. Direccion_Alumno Varchar(30) NOT NULL
  26. );
  27. CREATE TABLE P_A(
  28. DNI_Profesor CHAR(9),
  29. DNI_Alumno CHAR(9),
  30. PRIMARY KEY (DNI_Profesor, DNI_Alumno),
  31. FOREIGN KEY (DNI_Profesor) REFERENCES PROFESOR (DNI_Profesor),
  32. FOREIGN KEY (DNI_Alumno) REFERENCES ALUMNO (DNI_Alumno)
  33. );
  34.  
  35. --4. Inserta en PROFESOR tres filas: (22334455H, Basilio Vicente, 56), (15162324U, Jacinto Velarte, 45), (34324455Y, Jaime Villanueva, 29)
  36.  
  37. INSERT INTO PROFESOR VALUES ("22334455H", "Basilio Vicente", 56);
  38. INSERT INTO PROFESOR VALUES ("15162324U", "Jacinto Velarte", 45);
  39. INSERT INTO PROFESOR VALUES ("34324455Y", "Jaime Villanueva", 29);
  40.  
  41. --5. Inserta en ALUMNO tres filas: (12223321F, Francisco Espejo, c/Bilbao 89 2º 1ª), (45674543R, Imma Fernández, c/San Patricio 17 11º 3ª), (56778987P, Almudena Ochoa, c/Eustaquio Ovidio 54º 1ª)
  42.  
  43. INSERT INTO ALUMNO VALUES ("12223321F", "Francisco Espejo", "c/Bilbao 89 2º 1ª");
  44. INSERT INTO ALUMNO VALUES ("45674543R", "Imma Fernández", "c/San Patricio 17 11º 3ª");
  45. INSERT INTO ALUMNO VALUES ("56778987P", "Almudena Ochoa", "c/Eustaquio Ovidio 54º 1ª");
  46.  
  47. --6. Observa mediante consultas sencillas que todos los campos se han insertado correctamente.
  48.  
  49. SELECT * FROM PROFESOR;
  50. SELECT * FROM ALUMNO;
  51.  
  52. --7. Asocia los alumnos Francisco Espejo y Imma Fernández con el profesor Basilio Vicente.
  53.  
  54. INSERT INTO P_A VALUES ("22334455H","12223321F");
  55. INSERT INTO P_A VALUES ("22334455H","45674543R");
  56.  
  57. --8. Modifica la edad del profesor Jaime Villanueva a 31.
  58.  
  59. UPDATE PROFESOR set Edad_Profesor=31 where dni_Profesor="34324455Y";
  60.  
  61. --9. Elimina la alumna Almudena Ochoa.
  62.  
  63. DELETE FROM ALUMNO where DNI_Alumno="56778987P";
  64.  
  65. ----------------------------------------------------------------------------------------------------------------------
  66.  
  67.  
  68. /*Actividad 2*/
  69. --Realiza las siguientes consultas:
  70.  
  71. --Muestra profesores con una edad superior a 50.
  72.  
  73. select * from PROFESOR where Edad_Profesor > 50;
  74.  
  75. --Muestra el número total de alumnos.
  76.  
  77. select count(*) FROM ALUMNO;
  78.  
  79. --Muestra cuántos alumnos tiene a su cargo el profesor Basilio Vicente.
  80. --> Si sabem el seu DNI:
  81. select count(*) from P_A where DNI_Profesor='22334455H';
  82. --> Si ho volem buscar explicitament amb el nom:
  83. select count(*) FROM P_A NATURAL JOIN PROFESOR where upper(Nombre_Profesor)='BASILIO VICENTE';
  84.  
  85. --Ordena de mayor a menor los alumnos en función de la longitud (número de caracteres) de su dirección. Muestra el nombre del alumno y dicha longitud.
  86.  
  87. SELECT Nombre_Alumno, LENGTH(Direccion_Alumno) AS Longitud FROM ALUMNO ORDER BY LENGTH(Direccion_Alumno) DESC;
  88.  
  89.  
  90. --Muestra los alumnos cuyo nombre empiece por la letra F y tengan un 2 entre los dígitos del DNI
  91.  
  92. SELECT * from ALUMNO where substr(Nombre_Alumno,1,1)='F' and INSTR(DNI_Alumno,'2')>0;
  93.  
  94. --Ordena los profesores en función del número de alumnos que tienen a su cargo
  95.  
  96. SELECT Nombre_Profesor from P_A RIGHT OUTER JOIN PROFESOR USING(DNI_Profesor) group by DNI_Profesor order by COUNT(DNI_Alumno) DESC;
  97.  
  98. --¿Puedes cambiar el DNI del profesor Basilio Vicente?¿Por qué?
  99.  
  100. /*No, ja que la taula P_A al ser N-N, necessita com a claus principals els DNI_Profesor i els DNI_alumnes, i aquestes a la vegada seran claus foraneas de les taules de Alumnes i profesor. Com que el profesor Basilio ja te un insert a la taula de P-A amb algun alumne, no podem modificar el seu DNI ja que no quadraria amb l'entrada que te a la taula P-A*/
  101.  
  102. --Añade la columna ‘Edad_Alumno’ a la tabla Alumno. Defínela como entero muy pequeño y positivo
  103.  
  104. ALTER TABLE ALUMNO ADD Edad_Alumno SMALLINT unsigned;
  105.  
  106. --Muestra cuántos alumnos tienen a su cargo cada profesor. Ordena según número de alumnos
  107.  
  108. SELECT Nombre_Profesor, count(DNI_ALUMNO) from P_A RIGHT OUTER JOIN PROFESOR USING(DNI_Profesor) group by DNI_Profesor order by COUNT(DNI_Alumno) DESC;
  109.  
  110.  
  111. --Muestra solo aquellos profesores que tengan más de un alumno a su cargo
  112.  
  113. SELECT Nombre_Profesor, count(DNI_ALUMNO) from P_A RIGHT OUTER JOIN PROFESOR USING(DNI_Profesor) group by DNI_Profesor HAVING Count(DNI_ALUMNO) > 1 order by COUNT(DNI_Alumno) DESC ;
  114.  
  115.  
  116.  
  117. /*Actividad 3 */
  118.  
  119. --Crea un usuario que pueda ejecutar procedimientos. Llámalo manolo.
  120.  
  121. CREATE USER Manolo IDENTIFIED BY 'austria';
  122. GRANT Execute ON Clase_Primera.* TO 'Manolo'@'localHost';
  123. FLUSH PRIVILEGES;
  124.  
  125. --Crea un procedimiento que devuelva el número de alumnos que hay en la tabla ALUMNO. Lo llamaremos proc1
  126.  
  127. DELIMITER $$
  128. CREATE PROCEDURE proc1 ()
  129. BEGIN
  130. select count(*) AS num_alums from ALUMNO;
  131. END
  132. $$
  133.  
  134. call proc1;
  135.  
  136. --¿Puede manolo ejecutar proc1?
  137.  
  138. Sí, ya que le hemos dado los privilegios anteriormente.
  139.  
  140. --Crea una función de devuelva el apellido del nombre del alumno que le pases como argumento a la fución. Así cuando el argumento de entrada sea Imma, devolverá Fernández.
  141.  
  142. DELIMITER $$
  143. CREATE FUNCTION select_apellido (nombre VARCHAR(20)) RETURNS VARCHAR(20)
  144. BEGIN
  145. DECLARE apellido VARCHAR(20);
  146. SET apellido = (SELECT REPLACE(Nombre_Alumno, concat(nombre, ' '), '') AS APE_ALUM FROM ALUMNO WHERE substr(Nombre_Alumno, 1, length(nombre)) = nombre);
  147. RETURN apellido;
  148. END;
  149. $$
  150.  
  151. --Crea un dispardor que impida cambiar los DNIs de los profesores.
  152.  
  153. CREATE TRIGGER dni_trigger
  154. BEFORE UPDATE ON PROFESOR
  155. FOR EACH ROW
  156. begin
  157. DECLARE error varchar(100);
  158. SET error = 'Error. No pots canviar el DNI d!un professor';
  159. IF NEW.DNI_Profesor != OLD.DNI_Profesor THEN
  160. SIGNAL SQLSTATE '45000' set message_text = error;
  161. END IF;
  162. END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement