l. --IMPORTANTE! CAMBIAR EL NOMBRE A ALGUNAS RESTRICCIONES PARA QUE NO SEAN SIMILARES!
2. --MAS IMPORTANTE!!! ENTENDER TODO EL CODIGO :)
3. --CREDITOS A SU COMPAÑERO ALEX 4. --CUALQUIER DUDA AL GRUPO DE WHATSAPP 5. 6. --1. Crear una Base de Datos denominado lEXAMEN_A en PostgreSQL 7. create database "lEXAMEN_A"; 8. 9. --2. Crear un usuario con el nombre EXAMEN_lA con contraseña 12345 de tipo super usuario 10. create user EXAMEN_lA SUPERUSER PASSWORD '12345'; 11. 12. --3. A la base de datos lEXAMEN_A asignar el usuario creado y con su contraseña correspondiente 13. ALTER DATABASE "lEXAMEN_A" OWNER TO EXAMEN_lA; 14. 15. --4. Se debe crear un Esquema denominado DATOS_EXAMEN_A en la misma 16. --base de datos creado esto para futuros backup (solo creación) 17. CREATE SCHEMA DATOS_EXAMEN_A 18. 19. --====AQUÍ SE DEBEN CREAR DOMINIOS DE DATOS PARA LAS TABLAS======== 20. --5. ------------------CREACION DE TABLAS============================ 21. /*================================================================== 22. --crear las tablas por defecto en el esquema PUBLIC 23. Nombre de la tabla: CARRERAS 24. Campos:
25. l. Carrera_No: DOM_NRO
26. 2. C_Nombre: TEXT050 27. 3. SIGLA SIGLA 28. Restricciones:*/ 29. /*l.Crear un dominio de datos CARRERA_NO de tipo llave primaria 30. ejemplo CAR-01, CAR-02, CAR-03,-,N*/ 31. 32. CREATE DOMAIN DOM_NRO as CHAR(6) 33. CONSTRAINT PK_DOM_NRO check(value - 'A[CAR-]{4}\d{2}$'); 34. /*2. Crear dominio de datos con nombre TEXT050 de tipo varchar 35. con tamaño de 50 no debe aceptar valores nulos*/ 36. CREATE DOMAIN TEXT050 VARCHAR(50) NOT NULL; 37. /*3. Crear dominio de datos con nombre SIGLA solo debe ingresar 38. caracteres de tipo alfabético ejemplo A,B,C,D,-,z letras 39. mayúsculas y no números ni caracteres especiales*/ 40. CREATE DOMAIN SIGLA AS VARCHAR(50) 41. CONSTRAINT PK_SIGLA CHECK (VALUE - 'A[A-Z]{l,}$'); 42. 43. --=================================================================== 44. CREATE TABLE PUBLIC.CARRERAS( 45. Carrera_No DOM_NRO, 46. C_Nombre TEXT050, 47. SIGLA SIGLA 48. ) ; 49. alter table PUBLIC.CARRERAS ADD primary key (Carrera_No); 50. /*Nombre de la tabla: ESTUDIANTES 51. Campos: 52. l. Est_No: DOM_CODIGO 53. 2. nombre: TEXT050 54. 3. apellido TEXT050 55. 4. fecha_nacimiento DATE 56. 5. fecha_ingreso DATE 57. 6. carrera_No DOM_NRO 58. 7. promedio ENTERO 59. 8. sexo VALOR 60. Restricciones:*/ 61. /*l. Crear un dominio de datos denominado EST_NO de tipo entero 62. en secuencia de impares positivos ejemplo 1, 3, 5,-,N estos 63. datos debe ingresar automaticamente*/ 64. CREATE DOMAIN DOM_CODIGO AS INT 65. CONSTRAINT PK_DOM_CODIGO check(value %2=1 AND VALUE >0); 66. /*2. Usar el mismo dominio de datos TEXT050 para los campos 67. indicados*/ 68. /*3. Crear un dominio de datos llamado VALOR donde el campo sexo 69. solo debe aceptar valores M, F de tipo mayúscula usar un 70. constraint para el caso*/ 71. DROP TABLE ESTUDIANTES 72. (REATE DOMAIN VALOR as char(l) 73. CONSTRAINT CK_VALOR check(value ='M' or value='F'); 74. /*4. Para el campo carrera_No usar el mismo dominio de datos 75. DOM_NRO*/ 76. /*5. Crear un dominio de dato ENTERO donde solo debe ingresar 77. números positivo entre 1 al 100*/ 78. (REATE DOMAIN ENTERO AS INTEGER 79. CONSTRAINT PK_ENTERO CHECK(VALUE >=1 ANO VALUE<=100); 80. SELECT*FROM ESTUDIANTES 81. (REATE TABLE ESTUDIANTES( 82. Est_No DOM_CODIGO, 83. nombre TEXT050, 84. apellido TEXT050, 85. fecha_nacimiento DATE, 86. fecha_ingreso DATE, 87. carrera_No DOM_NRO, 88. promedio ENTERO, 89. sexo VALOR 90. ); 91. /***********************/ 92. --6.Adicionar constraint de llave primaria al campo Est_No de la tabla 93. --ESTUDIANTES 94. alter table ESTUDIANTES add CONSTRAINT PK_ESTUDIANTES PRIMARY KEY(Est_No) 95. --7.Adicionar constraint de llave secundaria al campo carrera_No de la 96. --tabla ESTUDIANTES con el campo carrera_No de la tabla CARRERAS 97. ALTER TABLE estudiantes ADD CONSTRAINT FK_ESTUDIANTES 98. FOREIGN KEY (carrera_no) REFERENCES PUBLIC.CARRERAS(Carrera_No); 99. --8.Agregar nuevos registros a las tablas CARRERAS, ESTUDIANTES 100. --Insertar datos en la tabla carreras 101. INSERT INTO PUBLIC.CARRERAS(Carrera_No,C_Nombre,SIGLA) 102. VALUES('CAR-01', 'Psicología', 'PSI'), 103. ('CAR-02', 'Ingeniería de Sistemas', 'IDS'), 104. ('CAR-03', 'Contabilidad', 'CON'), 105. ('CAR-04', 'Ingeniería de Química', 'IDQ'), 106. ('CAR-05', 'Mercadotecnia', 'MER'), 107. ('CAR-06', 'Arquitectura', 'ARQ'), 108. ('CAR-07', 'Administracion de Empresas', 'ADE'), 109. ('CAR-08','Medicina','MED'), 110. ('CAR-09', 'Sociología', 'SOC'), 111. ('CAR-10','Parvularia','PAR'); 112. SELECT*FROM PUBLIC.CARRERAS 113. --Insertar datos en la tabla estudiantes 114. INSERT INTO estudiantes (Est_No,nombre,apellido,fecha_nacimiento,fecha_ingreso,carrera_No,promedio,sexo) 115. VALUES(l, 'Juan', 'Vazquez', '1960-05-08', '1992-02-18', 'CAR-01',89, 'M'), 116. (3, 'Carlos Miguel', 'Lopez', '1990-07-18', '2016-02-05', 'CAR-02',70, 'M'), 117. (5, 'Maria Carlota', 'Sanchez', '2020-07-28', '2003-05-25', 'CAR-09',75, 'F'), 118. (7, 'Casandra', 'Gavilan', '2009-06-08', '2015-02-21', 'CAR-10',69, 'F'), 119. (9, 'Andrea', 'Davila', '1980-08-28', '2010-02-11', 'CAR-02',55, 'F'), 120. (11, 'Joao', 'Aguiar', '2000-09-18', '2011-02-27', 'CAR-01',89, 'M'), 121. (13, 'Flor', 'Velazquez', '2001-03-13', '2008-02-24', 'CAR-03',90, 'F'), 122. (15, 'Celeste', 'Vazquez', '1999-04-11', '2007-02-24', 'CAR-05' ,95, 'F'), 123. (17, 'Abigail', 'Andrade','1998-06-23', '2012-02-25', 'CAR-07',75, 'F'), 124. (19, 'Juan Carlos', 'Espinoza', '2005-12-08', '2012-02-11', 'CAR-10',85, 'M'), 125. (21, 'Jose Carlos', 'Flores', '2006-07-28', '2005-02-23', 'CAR-06',85, 'M'), 126. (23, 'Cristian Jesus', 'Kilberth', '2010-03-08', '2006-02-18', 'CAR-01',98, 'M'); 127. SELECT*FROM estudiantes 128. --Realizar las pruebas de visualización usando el LMD con insertar 2 129. --registro a las tablas 130. --IMPORTANTE!!! CAMBAIAR LOS REGISTROS POR OTROS 131. INSERT INTO PUBLIC.CARRERAS(Carrera_No,C_Nombre,SIGLA) 132. VALUES('CAR-11', 'NOMBRE_CARRERA', 'CARR'); 133. INSERT INTO estudiantes (Est_No,nombre,apellido,fecha_nacimiento,fecha_ingreso,carrera_No,promedio,sexo) 134. VALUES(25, 'Nombre', 'Apellido', '1999-02-21', '1999-02-18', 'CAR-02' ,89, 'M'); 135. /*9. Adicionar una columna TELEFONO a la tabla carreras, donde debe 136. crearse a través de dominio de datos TELEFONO la validación 137. correspondiente para el teléfono. En este caso, se establece que el 138. valor debe estar en el formato "xxx-xxxxxxxx", donde "x" es un número 139. del 0 al 9. Ejemplo 591-73299220 (ahora si no permite insertar valores 140. permitir que acepten nulos)*/ 141. create domain TELEFONO as varchar(50) check(VALUE - 'A\d{3}-\d{8}$'); 142. ALTER TABLE carreras ADD COLUMN TELEFONO TELEFONO NULL; 143. SELECT*FROM estudiantes; 144. /*========= CREACION DE HERENCIA DE TABLAS=========================== 145. --10.Crear herencia de 2(dos) tablas hijas que hereden campos de la 146. tabla CARRERAS, el cual tiene que tener nombres las tablas de: CARRERA_! 147. CARRERA_2, en la tabla CARRERRA_l solo deben ingresar en su campo 148. carrera_No registros en el rango (ejemplo CAR-01 hasta CAR-20), y en la 149. tabla CARRERA_2 en el campo carrera_No registro en el rango (ejemplo 150. CAR-21 hasta CAR-40), aplicar las reglas correspondientes y ver 151. resultados con LMD y LQD realizar 1 ó 2 inserción de registros a las 2 152. tablas, mostrar resultados con capturas de pantalla.*/ 153. /*--IMPORTANTE!!! CONSULTAR AL DOCENTE SOBRE COMO CREAR UN RULE CON CHECK 154. --PUESTO QUE ME INDICAN QUE NO PASARON EL TEMA DE REGLAS 155. --ESTO FUNCIONA, PERO NO SATISFACE LAS INDICACIONES DEL INGENIERO DE USAR RULE CON CHECK 156. --OTRA OPCIONES NO USAR RULE Y CREAR LA RESTRICCION DENTRO DE LA TABLA*/ 157. (REATE TABLE CARRERA_!( 158. )INHERITS(CARRERAS); 159. --crear rule para carrera_! 160. create rule rule_carrera_l as on insert 161. to carrera_! where Carrera_No not between 'CAR-01'AND 'CAR-20' 162. do instead nothing; 163. 164. CREATE TABLE CARRERA_2( 165. )INHERITS(CARRERAS); 166. --crear rule para carrera_2 167. create rule rule_carrera_2 as on insert 168. to carrera_2 where Carrera_No not between 'CAR-21'AND 'CAR-40' 169. do instead nothing; 170. 171. --IMPORTANTE!! REGISTRAR OTROS DATOS PARA QUE NO SEAN SIMILARES!! 172. INSERT INTO CARRERA_l(Carrera_No,C_Nombre,SIGLA,TELEFONO) 173. VALUES('CAR-02', 'gastronomia', 'GAT', '591-68103937'); 174. 175. INSERT INTO CARRERA_2(Carrera_No,C_Nombre,SIGLA,TELEFONO) 176. VALUES('CAR-25', 'telecomunicacion', 'TLM', '591-68103937'); 177. 178. SELECT *FROM CARRERA_! 179. SELECT *FROM CARRERA_2 180. /*11.Crear herencia de identidad para la tabla ESTUDIANTES con 3(tres) 181. tablas hijas de igual arquitectura y diseño solo aplicar en campos 182. usando LQD, mostrar resultados con capturas de pantalla.*/ 183. (REATE TABLE ESTUDIANTE_! ()INHERITS (ESTUDIANTES); 184. CREATE TABLE ESTUDIANTE_2 ()INHERITS (ESTUDIANTES); 185. (REATE TABLE ESTUDIANTE_3 ()INHERITS (ESTUDIANTES); 186. 187. /*12.Crear herencia de múltiple para la tabla CARRERA y ESTUDIANTE con 188. 1 tablas hijas de igual arquitectura y diseño solo campos realizar 189. aplicando el LQD el nombre de la tabla debe ser PERSONAL con un único 190. campo llamado Personal_No de tipo primary key, y luego hacer heredar 191. los siguientes campos solo datos aplicando LQD, mostrar resultados con 192. capturas de pantalla.*/ 193. create table PERSONAL( 194. personal_no int primary key) inherits (carreras, estudiantes); 195. select * from personal; 196. 197. ---------------------------SUBCONSULTAS (SUBQUERY) ----------------- 198. --ESTAS CONSULTAS SE LAS DEJA A USTEDES XD 199. /*13.Realizar la subconsulta donde debe mostrar los campos de SIGLA, 200. NOMBRE y APELLIDO de los estudiantes con un promedio que estén en el 201. rango de 51 a 70 esto aplicando la tabla carreras y estudiantes*/ 202. 203. /*14.Realizar la subconsulta para listar aquellos estudiantes que 204. estén en la carrera Parvularia el cual debe mostrar en una lista 205. NOMBRE CARRERA, NOMBRE ESTUDIANTE*/ 206. select * from estudiantes; 207. select c.c_nombre as "NOMBRE CARRERA", e.nombre! I' '! le.apellido AS "NOMBRE ESTUDIANTE" 208. from estudiantes as e join carreras as c using(carrera_no) 209. where c.c_nombre = 'Parvularia'; 210. /*15.Realizar una subconsulta aquellos estudiantes que su apellido en 211. la penúltima letra sea igual a la letra E, ejemplo Marquez se debe 212. buscar por la letra E*/ 213. 214. 215. 216.