TAREA DE LABORATORIO
EJERCICIOS COMPLEMENTARIOS
---Se supone que para acumular créditos se necesita aprobar el curso, por lo tanto
seleccionamos las tuplas con notas aprobadas
-----Aplicamos JOIN a #TABLA1 y Asignatura, luego sumamos los créditos de cada alumno
R(Cod_ALumno, Total_Creditos)
SELECT Cod_Alumno, SUM(Creditos) AS Total_Creditos
FROM #TABLA1 M INNER JOIN Asignatura A
ON M.Cod_Asignatura = A.Cod_Asignatura
GROUP BY Cod_Alumno
……
3.- Relación de alumnos que hayan aprobado todas sus asignaturas en algún semestre
4.- Relación de alumnos que hayan aprobado todas sus asignaturas en todos los semestres
---Relacion de alumnos que aprobaron todos sus cursos en todos los semestres
SELECT A.Cod_Alumno,Paterno,Materno, Nombres, Cod_CP
INTO #ALUMNOS_INVICTOS /*ALUMNOS INVICTOS EN TODOS SUS SEMESTRE*/
FROM Alumno A INNER JOIN #NUMERO_SEMESTRES NS
ON A.Cod_Alumno = NS.Cod_Alumno
5.-Relacion de alumnos que hayan obtenido promedio ponderado en todos los semestres
---Con la relación #ALUMNOS_INVICTOS del anterior ejercicio aplicamos join para recuperar
sus notas
SELECT Semestre, M.Cod_Alumno, Cod_Asignatura, M.Cod_CP, Nota
INTO #NOTAS_ALUMNOS_INVICTOS
FROM #ALUMNOS_INVICTOS AI inner join Matricula M
on AI.Cod_Alumno = M.Cod_Alumno
6.- Los Mejores estudiantes de cada Carrera son los estudiantes que hayan obtenido el
promedio ponderado más alto en los dos últimos semestres. Determinar los mejores
estudiantes en cada carrera profesional
--- Del ejercicio 5 se tiene los alumnos que invictos en todos los semestres entonces,
SELECT AP.Cod_Alumno, M.Cod_CP, AP.Promedio
FROM #ALUMNOS_PROMEDIO AP inner join Matricula M
ON (AP.Cod_Alumno = M.Cod_Alumno), #ULTIMOS_SEMESTRES US
WHERE M.Semestre = US.Semestre
GROUP BY AP.Cod_Alumno, M.Cod_CP, AP.Promedio
HAVING (MAX(CAST(AP.Promedio AS integer))> 13)
9.- Determinar las asignaturas con mas del 70% de desaprobados en el ultimo año
---Dos ultmos semestres
SELECT TOP 2 Semestre
INTO #ULTIMOS_SEMESTRES
FROM Matricula
GROUP BY Semestre
ORDER BY Semestre Desc
---Seleccionamos solo matriculas del los dos ultimos semestres
SELECT Cod_Asignatura, COUNT(Cod_Alumno) as Total_Alumnos_Curso
INTO #TOTAL_ALUMNOS_ASIGNATURA
FROM Matricula M, #ULTIMOS_SEMESTRES US
WHERE M.Semestre = US.Semestre
GROUP BY Cod_Asignatura
---Seleccionamos los alumnos que reprobaron
SELECT Cod_Asignatura, COUNT(Cod_Alumno) as Nro_Alumnos_Reprobados
INTO #TOTAL_REPROBADOS
FROM Matricula M, #ULTIMOS_SEMESTRES US
WHERE M.Semestre = US.Semestre and Nota not in
('11','12','13','14','15','16','17','18','19','20')
GROUP BY Cod_Asignatura
---Asignaturas con su respectivo porcentaje de reprobados mayor al 70%
SELECT TAA.Cod_Asignatura,A.Nombre_Asignatura,
((Nro_Alumnos_Reprobados *100)/Total_Alumnos_Curso) as Porcentaje_Reprobados
FROM #TOTAL_ALUMNOS_ASIGNATURA TAA,#TOTAL_REPROBADOS TR,Asignatura A
WHERE TAA.Cod_Asignatura = TR.Cod_Asignatura
and TR.Cod_Asignatura= A.Cod_Asignatura
AND ((Nro_Alumnos_Reprobados *100)/Total_Alumnos_Curso) > 7
10.- Determinar la relación de alumnos de Informática que hayan desaprobado o reprobado
más de tres veces alguna materia
14.- Relacion de numeros de ingresantes por carrera profesional en los ultimos 5 años
---R(Cod_CP,NomCP, A1996,A1997,A1998,A1999,A2000)
---Primero identifico de que codigo son
BEGIN
SELECT Cod_Alumno,Cod_CP, CAST(Cod_Alumno AS INTEGER)/10000 AS CODIGO
INTO #R_CODIGO
FROM Matricula
GROUP BY Cod_Alumno,Cod_CP
15.- DETERMINAR LOS TRES MEJORES ESTUDIANTES DE CADA CARRERA PROFESIONAL. (MEJORES
PROMEDIOS E INVICTOS) EN EL ULTIMO SEMESTRE.
Esta cláusula SQL TOP es útil en tablas con muchos registros, para limitar el número de
filas a mostrar en la consulta, y así sea más rápida la consulta, consumiendo también menos
recursos en el sistema.
Cuando se usa TOP junto con la cláusula ORDER BY, el conjunto de resultados se limita
al primer número N de filas ordenadas; de lo contrario, devuelve el primer número N de filas en
un orden sin definir. Utilice esta cláusula para especificar el número de filas devueltas de una
instrucción SELECT o afectadas por una instrucción INSERT, UPDATE, MERGE o DELETE.
En una instrucción SELECT, utilice siempre una cláusula ORDER BY con la cláusula
TOP. Esta es la única manera de indicar previsiblemente a qué filas afecta TOP.
Utilice TOP (o bien, OFFSET y FETCH) en lugar de SET ROWCOUNT para limitar el
número de filas devueltas. Estos métodos son preferibles a utilizar SET ROWCOUNT por las
siguientes razones: