Beruflich Dokumente
Kultur Dokumente
/* ********************************************************************
CREACION DE LA BASE DE DATOS
******************************************************************** */
CREATE DATABASE ControlAcademico
ON
(NAME = ControlAcademico, -- Primary data file
FILENAME = 'C:\Data\ControlAcademico.mdf',
SIZE = 3MB,
MAXSIZE = 20MB,
FILEGROWTH = 5MB
)
LOG ON
(NAME = ControlAcademico_Log, -- Log file
FILENAME = 'C:\Data\ControlAcademico.ldf',
SIZE = 1MB,
MAXSIZE = 20MB,
FILEGROWTH = 2MB
)
GO
/* ********************************************************************
CREACION DE TIPOS
******************************************************************** */
USE ControlAcademico
GO
/* ********************************************************************
CREACION DE TABLAS
******************************************************************** */
USE ControlAcademico
'01','02','03','04','05','06','07','08','09','10',
'11','12','13','14','15','16','17','18','19','20')),
Primary key (Semestre,CodAsignatura,CodCP,Grupo,CodAlumno),
Foreign key (Semestre, CodAsignatura, CodCP, Grupo) references
taCatalogo(Semestre,CodAsignatura, CodCP, Grupo),
Foreign key (CodAlumno) references taAlumno(CodAlumno)
)
GO
PARTE 4: CONSULTAS DE UNA NICA TABLA
R(codAlumno,aPaterno,aMaterno,Nombres)
select codAlumno,aPaterno,aMaterno,Nombres
from taAlumno
where codCp = 'IS'
Obtener la relacin de carreras con sus respectivos nmeros de alumnos. Con los siguientes atributos:
R(codCP,NroAlumnos)
Obtener la relacin de asignaturas ofrecidas en el semestre 2010-1 en la carrera IS, que tengan menos de 7
alumnos. La relacin resltate debe estar ordenado por el nmero de alumnos y tener los siguientes
atributos:
R(codAsignatura,codCP,Grupo,NroAlumnos)
Obtener la relacin de asignaturas en las que se matriculo el estudiante de cdigo 009200528A, con los
siguientes atributos:
R(codAsignatura,codCP,Grupo,nombreAsignatura,Categoria,Creditos,Nota)
El resultado de este ejercicio se podra utilizar como base para emitir una ficha de seguimiento.
select m.codAsignatura,m.codcp,m.grupo,a.nombreAsignatura,
a.categoria,a.creditos,m.nota
from taMatricula m inner join taAsignatura a
on (m.codAsignatura = a.codAsignatura) and (m.codCp = a.codCp)
where (m.codAlumno = '009200528A')
Obtener la relacin de nmero de alumnos por carrera, con los siguientes atributos
R(codCP,nombreCP,NroAlumnos)
Obtener la relacin de numero de crditos acumulados por cada uno de los estudiantes de la carrea
profesional IS, con los siguientes atributos.
R(codALumno,aPaterno,aMaterno,Nombres,Creditos)
Obtener la relacin de alumnos de la asignatura de cdigo ME201, grupo A, de la carrera IS, dictadas en
semestre 2010-1.
La relacin resultante puede ser considerada como base para la emisin de actas, y debe tener los siguientes
atributos
R(codALumno,aPaterno,aMaterno,nombres,Nota,Observaciones)
En la columna Observaciones debe mostrar: APROBADO si la nota esta entre 11 y 20, DESAPROBADO si esta
entre 07 y 10, REPROBADO si esta entre 0 y 6, y NO SE PRESENTO si la nota es igual a NSP.
Obtener la relacin de alumnos de Ingeniera de Sistemas que hayan aprobado todas sus asignaturas en el
semestre 2010-1. La relacin resultante debe tener los siguientes atributos:
R(codAlumno,ApellidoPaterno,ApellidoMaterno,Nombres)
Solucion:
a) Primer Algoritmo
La idea central de este algoritmo es comparar el nmero de asignaturas en las que se matriculo cada
alumno, con el nmero de asignaturas que aprob, Si estas son iguales, entonces el alumno ha aprobado
todas sus asignaturas. A continuacin se descompone esta idea en unidades lgicas:
select codAlumno,codAsignatura,nota
into #Alumnos_is
from taMatricula
where (semestre = '2010-1') and (codCp = 'IS')
Esta sentencia da como resultado una tabla temporal con el siguiente resultado:
#Asignaturas_Matricula(codAlumno,NroAsignaturasMatricula)
La sentencia anterior da como resultado una tabla temporal con el siguiente resultado:
#Asignaturas_Aprobadas(codAlumno,NroAsignaturasAprobadas)
o Los alumnos han aprobado todas las asignaturas en el semestre dado, si el nmero de
asignaturas en las que se matriculo es igual al nmero de asignaturas que aprob. Entonces
utilizando las tablas temporales #Asignaturas_Matricula y #Asignaturas_Aprobadas, se
determina la relacin de alumnos que aprobaron todas sus asignaturas.
select m.codalumno
into #Alumnos_invictos
from #Asignaturas_matricula m inner join #Asignaturas_Aprobadas a
on (m.codalumno = a.codalumno) and
(m.nroasignaturasmatricula = a.nroasignaturasAprobadas)
Esta sentencia da como resultado una tabla con los cdigos de los alumnos invictos:
#Alumnos_invictos
b) La idea de este algoritmo es determinar que alumno se matricularon en el semestre dado y determinar a
los que tengan ninguna asignatura desaprobada. A continuacin se descompone esta idea central en
unidades lgicas:
select codalumno,apaterno,amaterno,nombres
into #alumnos_matriculados
from taalumno
where codalumno in (select distinct codalumno from tamatricula
where (semestre = '2010-1') and (codcp = 'IS'))
#alumnos_matriculados(codAlumno,aPaterno,aMaterno,Nombres)
o Utilizando la tabla temporal anterior, determinar la relacin de alumnos que aprobaron todas las
asignaturas en las que se matricularon:
select *
from #alumnos_matriculados
where codalumno not in (select distinct codalumno
from taMatricula
where (semestre = '2010-1') and (codcp = 'IS') and
(Nota not in
('11','12','13','14','15','16','17','18','19','20')))
select a.codalumno,a.apaterno,a.amaterno,a.nombres,
(sum(cast(m.nota as integer)*s.creditos)/sum(s.creditos)) PromedioPonderado
from taAlumno a
inner join #alumnos_invictos ai
on a.codAlumno = ai.codAlumno
inner join taMatricula m
on a.codalumno = m.codalumno inner join taAsignatura s
on (m.codasignatura = s.codasignatura) and (m.codcp = s.codcp)
where (m.semestre = '2010-1')
group by a.codalumno,a.apaterno,a.amaterno,a.nombres
PARTE 7. COMPOSICIN II
Obtener la relacin de alumnos de la carrera profesional IS con el nmero de crditos aprobados, con la
siguiente informacin:
R(codAlumno, aPAterno,aMaterno,Nobres,NroCreditos)
select codalumno,codasignatura,codcp
into #Matricula
from taMatricula
where (codcp = 'IS') and
(Nota in ('11','12','13','14','15','16','17','18','19','20'))
select a.*,isnull(c.nrocreditos,0)NroCreditos
from taAlumno a left outer join #NroCreditos c
on (a.codalumno = c.codalumno)
where a.codcp = 'IS'