CREATE TABLE region (
reg_codigo INT,
reg_nombre VARCHAR(50),
PRIMARY KEY (reg_codigo)
);
CREATE TABLE provincia (
prov_codigo INT,
prov_nombre VARCHAR(50),
prov_region INT,
PRIMARY KEY (prov_codigo),
FOREIGN KEY (prov_region) REFERENCES region (reg_codigo)
);
CREATE TABLE comuna (
com_codigo INT,
com_nombre VARCHAR(50),
com_provincia INT,
PRIMARY KEY (com_codigo),
FOREIGN KEY (com_provincia) REFERENCES provincia(prov_codigo)
);
CREATE TABLE tipo_institucion (
tpinst_codigo INT,
tpinst_descripcion VARCHAR(50),
PRIMARY KEY (tpinst_codigo)
);
CREATE TABLE acreditacion (
acr_codigo INT,
acr_descripcion VARCHAR(100),
PRIMARY KEY (acr_codigo)
);
CREATE TABLE institucion (
inst_codigo INT,
inst_nombre VARCHAR(100),
inst_acreditacion_inicio DATE,
inst_acreditacion_fin DATE,
inst_acreditacion INT,
inst_tipo_institucion INT,
PRIMARY KEY (inst_codigo),
FOREIGN KEY (inst_acreditacion) REFERENCES acreditacion (acr_codigo),
FOREIGN KEY (inst_tipo_institucion) REFERENCES tipo_institucion (tpinst_codigo)
);
CREATE TABLE sede (
sed_codigo INT,
sed_institucion INT,
sed_nombre VARCHAR(100),
sed_comuna INT,
PRIMARY KEY (sed_codigo, sed_institucion),
FOREIGN KEY (sed_institucion) REFERENCES institucion (inst_codigo),
FOREIGN KEY (sed_comuna) REFERENCES comuna (com_codigo)
);
CREATE TABLE nivel (
niv_codigo INT,
niv_descripcion VARCHAR(100),
PRIMARY KEY (niv_codigo)
);
CREATE TABLE modalidad (
mod_codigo INT,
mod_descripcion VARCHAR(50),
PRIMARY KEY (mod_codigo)
);
CREATE TABLE vigencia (
vig_codigo INT,
vig_descripcion VARCHAR(100),
PRIMARY KEY (vig_codigo)
);
CREATE TABLE tipo_area (
tpar_codigo INT,
tpar_descripcion VARCHAR(100),
PRIMARY KEY (tpar_codigo)
);
CREATE TABLE area (
are_codigo INT,
are_descripcion VARCHAR(100),
are_tipo_area INT,
PRIMARY KEY (are_codigo),
FOREIGN KEY (are_tipo_area) REFERENCES tipo_area(tpar_codigo)
);
CREATE TABLE jornada (
jor_codigo INT,
jor_descripcion VARCHAR(100),
PRIMARY KEY (jor_codigo)
);
CREATE TABLE tipo_plan (
tppl_codigo INT,
tppl_descripcion VARCHAR(100),
PRIMARY KEY (tppl_codigo)
);
CREATE TABLE carrera (
car_codigo INT,
car_nombre VARCHAR(50),
car_version VARCHAR(50),
car_duracion_estudio INT,
car_duracion_titulacion INT,
car_duracion_total INT,
car_requisito_ingreso VARCHAR(100),
car_codigo_demre VARCHAR(100),
car_modalidad INT,
car_jornada INT,
car_tipo_plan INT,
car_nivel INT,
car_area INT,
car_sede INT,
car_vigencia INT,
car_acreditacion INT,
PRIMARY KEY (car_codigo),
FOREIGN KEY (car_modalidad) REFERENCES modalidad(mod_codigo),
FOREIGN KEY (car_jornada) REFERENCES jornada(jor_codigo),
FOREIGN KEY (car_tipo_plan) REFERENCES tipo_plan(tppl_codigo),
FOREIGN KEY (car_nivel) REFERENCES nivel(niv_codigo),
FOREIGN KEY (car_area) REFERENCES area(are_codigo),
FOREIGN KEY (car_sede) REFERENCES sede(sed_codigo),
FOREIGN KEY (car_vigencia) REFERENCES vigencia(vig_codigo),
FOREIGN KEY (car_acreditacion) REFERENCES acreditacion(acr_codigo)
);
CREATE TABLE sexo (
sex_codigo INT,
sex_descripcion VARCHAR(50),
PRIMARY KEY (sex_codigo)
);
CREATE TABLE estudiante (
est_run INT,
est_nacimiento DATE,
est_rango_edad VARCHAR(50),
est_sexo INT,
PRIMARY KEY (est_run),
FOREIGN KEY (est_sexo) REFERENCES sexo(sex_codigo)
);
CREATE TABLE ingreso (
ing_codigo INT,
ing_descripcion VARCHAR(150),
PRIMARY KEY (ing_codigo)
);
CREATE TABLE matricula (
mat_estudiante INT,
mat_carrera VARCHAR(50),
mat_periodo INT,
mat_valor_matricula FLOAT,
mat_valor_arancel FLOAT,
mat_ingreso_primer_agno INT,
mat_ingreso_semestre_matricula INT,
mat_agno_ingreso INT,
mat_semestre_ingreso INT,
mat_forma_ingreso INT,
PRIMARY KEY (mat_estudiante, mat_carrera, mat_periodo),
FOREIGN KEY (mat_estudiante) REFERENCES estudiante (est_run),
FOREIGN KEY (mat_forma_ingreso) REFERENCES ingreso (ing_codigo)
);
SELECT * from matricula
describe matricula
alter TABLE matricula ADD FOREIGN KEY (mat_carrera) REFERENCES carrera(car_codigo); -- intentar
nuevamente
ALTER table carrera add car_valor_matricula INT not null;
SELECT acreditado - no acreditado as diff
from ( SELECT acr_descripcion, AVG (car_valor_matricula) AS acreditado
FROM nivel INNER JOIN carrera ON niv_codigo = car_nivel
INNER JOIN sede ON sed_codigo = car_sede
INNER JOIN institucion ON inst_codigo =sed_institucion
inner join acreditacion ON inst_acreditacion = acr_codigo
WHERE niv_descripcion = 'magister'
AND acr_codigo = 1
) as tab1,
( SELECT acr_descripcion, AVG(car_valor_matricula) AS no_acreditado
from nivel INNER JOIN carrera ON niv_codigo = car_nivel
INNER JOIN sede ON sed_codigo = car_sede
INNER JOIN institucion ON inst_codigo = sed_institucion
INNER JOIN acreditación ON ins_acreditacion =a cr_codigo
WHERE niv_descripcion ='magister'
AND acr_codigo = 2
) AS tab2
inst_acr_codigo IS NOT NULL THEN mat.mat_valor_matricula END)- AVG (CASE
ALTER TABLE institucion ADD inst_acr_codigo INT not null;.
SELECT
(AVG(CASE WHEN inst_acr_codigo IS NOT NULL THEN mat_valor_matricula END) -
AVG(CASE WHEN inst_acr_codigo IS NULL THEN mat_valor_matricula END))
AS diferencia_promedios
FROM matricula mat
JOIN carrera car ON mat_carrera = car_codigo
JOIN sede sed ON car_sede = sed_codigo
JOIN institucion inst ON sed_institucion = inst_codigo
WHERE niv_codigo = 'MAG'; -- Suponiendo que 'MAG' identifica programas de Magíster