Sie sind auf Seite 1von 7

TEMA:

CREAR BASES DE DATOS


RECUPERACIN DE DATOS

PARTE 1: Crear la base de datos

/* ********************************************************************
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

PARTE 2: CREAR TIPOS

/* ********************************************************************
CREACION DE TIPOS
******************************************************************** */
USE ControlAcademico

CREATE TYPE TCodCP FROM nvarchar(2) not null


CREATE TYPE TCodAlumno FROM nvarchar(10) not null
CREATE TYPE TCodAsignatura FROM nvarchar(5) not null
CREATE TYPE TCodDocente FROM nvarchar(10) not null
CREATE TYPE TSemestre FROM nvarchar(6) not null

GO

PARTE 3: CREAR LAS TABLAS

/* ********************************************************************
CREACION DE TABLAS
******************************************************************** */
USE ControlAcademico

create table taCarreraProfesional


(
CodCP TCodCP,
NombreCP nvarchar(60) null,
Primary key (CodCP)
)
create table taAlumno
(
codAlumno TCodAlumno,
aPaterno nVarchar(40) not null,
aMaterno nVarchar(40) not null,
Nombres nVarchar(40) not null,
codCP TCodCP,
Primary key (CodAlumno),
Foreign key (CodCP) references taCarreraProfesional(CodCP)
)

create table taDocente


(
codDocente TCodDocente,
aPaterno nVarchar(40) not null,
aMaterno nVarchar(40) not null,
Nombres nVarchar(40) not null,
Categoria nVarchar(2) default 'PR'
Check (Categoria in ('PR','AS','AU','JP','CO')),
Regimen nVarchar(4) default 'DE'
Check (Regimen in ('DE','TC','TP20','TP10')),
Primary key (CodDocente)
)

create table taAsignatura


(
CodAsignatura TCodAsignatura,
CodCP TCodCP,
NombreAsignatura Varchar(100) not null,
Categoria Varchar(4) default 'OE'
Check (Categoria in ('OE','EE','OCG','ECG','PPP')),
Creditos Int default 1
Check (Creditos > 0),
Primary key (CodAsignatura, CodCP)
)

create table taCatalogo


(
Semestre TSemestre,
CodAsignatura TCodAsignatura,
CodCP TCodCP,
Grupo nvarchar(1),
CodDocente TCodDocente,
Primary key (Semestre, CodAsignatura, CodCP, Grupo),
Foreign key (CodAsignatura, CodCP) references taAsignatura(CodAsignatura, CodCP),
Foreign key (CodDocente) references taDocente(CodDocente)
)
create table taMatricula
(
Semestre TSemestre,
CodAsignatura TCodAsignatura,
CodCP TCodCP,
Grupo nvarchar(1),
CodAlumno TCodAlumno,
Nota nVarchar(3) default 'NSP'
Check (Nota in ('NSP','00',

'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

Obtener la relacin de alumnos de la Carrera IS, con los siguientes atributos

R(codAlumno,aPaterno,aMaterno,Nombres)

select codAlumno,aPaterno,aMaterno,Nombres
from taAlumno
where codCp = 'IS'

Obtener el nmero de alumnos


La sentencia SELECT es:

select count(codAlumno) as NroAlumno


from taAlumno

Obtener el nmero de alumnos de la Carrera IS


La sentencia SELECT es:

select count(codAlumno) as NroAlumno


from taAlumno
where codCP = 'IS'

Obtener la relacin de carreras con sus respectivos nmeros de alumnos. Con los siguientes atributos:
R(codCP,NroAlumnos)

La sentencia SELECT es:

Select codCp,Count(CodAlumno) as NroAlumnos


from taAlumno
group by codCp

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)

La sentencia SELECT es:

select codAsignatura,codCp,Grupo,Count(codAlumno) as NroAlumnos


from taMAtricula
where (Semestre = '2010-1') and (codCp ='IS')
group by codAsignatura,codcp,Grupo
having count(codAlumno) < 7
order by NroAlumnos
PARTE 5: COMPOSICIN I

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)

select a.codCp,c.nombreCp,count(codAlumno) as NroAlumno


from taAlumno a inner join TaCarreraProfesional C
on (a.codCp = c.codCp)
group by a.codCp, c.nombreCp

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)

select m.codAlumno,l.aPaterno,l.aMaterno,l.Nombres,sum(creditos) as NroCreditos


from taMatricula m inner join taAsignatura a
on (m.codAsignatura = a.codAsignatura) and (m.codCp = a.codCp)
inner join taAlumno l
on m.codAlumno = l.codAlumno
where (Nota in ('11','12','13','14','15','16','17','18','19','20'))
group by m.codAlumno,l.aPaterno,l.aMaterno,l.nombres

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.

select m.codAlumno,a.aPaterno,a.aMaterno,a.nombres, m.nota,"Observaciones" = case


when m.nota = 'NSP' then 'NO SE PRESENTO'
when Cast(m.nota as integer) <= 6 then 'REPROBADO'
when Cast(m.nota as integer) <= 10 then 'DESAPROBADO'
else 'APROBADO' end
from taMatricula m inner join taAlumno a
on (m.codAlumno = a.codAlumno)
where (m.codAsignatura = 'ME201') and (M.Grupo = 'A') and
(m.codCp = 'IS') and (m.semestre = '2010-1')
PARTE 6. MODULARIDAD Y SENTENCIAS SQL

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:

o Determinar relacin de alumnos de la carrera profesional IS matriculados en el semestre 2010-


1, con sus respectivas notas.

select codAlumno,codAsignatura,nota
into #Alumnos_is
from taMatricula
where (semestre = '2010-1') and (codCp = 'IS')

Esta sentencia da como resultado un tabla temporal con el siguiente resultado:


#ALUMNOS_IS(codAlumno,codAsignatura,Nota)

o Utilizando la tabla temporal anterior, determinar la relacin de alumnos con el nmero de


asignaturas en las que se matriculo:

select codAlumno,count(codAsignatura) NroAsignaturasMatricula


into #Asignaturas_Matricula
from #Alumnos_IS
group by CodAlumno

Esta sentencia da como resultado una tabla temporal con el siguiente resultado:
#Asignaturas_Matricula(codAlumno,NroAsignaturasMatricula)

o Utilizando la tabla temporal #ALUMNOS_IS, determinar la relacin de alumnos con el nmero


de asignaturas aprobadas:

select codalumno,count(codasignatura) NroAsignaturasAprobadas


into #Asignaturas_Aprobadas
from #Alumnos_is
where (Nota in ('11','12','13','14','15','16','17','18','19','20'))
group by codalumno

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

o Finalmente, utilizando la ltima tabla temporal y la tabla taALUMNO, se determina la relacin


pedida:

select i.codAlumno, a.apaterno as ApellidoPaterno,a.amaterno as


ApellidoMaterno,a.Nombres
from #alumnos_invictos i inner join taalumno a
on i.codalumno = a.codalumno

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:

o Determinar relacin de alumnos de la carrera profesional IS matriculados en el semestre 2010-


1.

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'))

Esta sentencia da como resultado alumnos de la Carrera profesional IS matriculados en el


semestre 2010-1 en una tabla temporal con la siguiente estructura:

#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')))

- Calcular el promedio ponderado para los alumnos invictos:

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)

Primero determinamos la relacin de alumnos de la carrera de IS con la relacin de asignaturas aprobadas.

select codalumno,codasignatura,codcp
into #Matricula
from taMatricula
where (codcp = 'IS') and
(Nota in ('11','12','13','14','15','16','17','18','19','20'))

Lugo, determinamos el nmero de crditos aprobados por cada alumno.

select m.codalumno,sum(a.creditos) NRoCreditos


into #NroCreditos
from #Matricula m inner join taAsignatura a
on (m.codasignatura = a.codasignatura) and (m.codcp = a.codcp)
group by m.codalumno

Finalmente, agregamos los datos adicionales del alumno:

select a.*,isnull(c.nrocreditos,0)NroCreditos
from taAlumno a left outer join #NroCreditos c
on (a.codalumno = c.codalumno)
where a.codcp = 'IS'

Das könnte Ihnen auch gefallen