Académique Documents
Professionnel Documents
Culture Documents
INFORMACIÓN
Fecha: 05/05/2015
Modelo Relacional
Instrucciones: Analice el siguiente modelo relacional y posteriormente realice las
consultas solicitadas por tu jefe:
SELECT
p.nombre_prof+''+p.app_prof+''+p.apm_p
rof as [Nombre Completo Profesor],
c.ID_c as [Clave de la carrera],
c.Nombre_carrera as [Nombre de la
Carrera]
FROM dbo.profesor as p inner join
dbo.Carrera as c
on p.id_c = c.ID_c
where p.app_prof like 'A%' or
(p.app_prof like 'S%') or (p.app_prof
like 'M%')
and c.Nombre_carrera in
('Contabilidad','Informatica')
order by c.Nombre_carrera asc,
p.nombre_prof desc
SELECT
p.nombre_prof+''+p.app_prof+''+p.apm_pro
f as [Nombre Completo Profesor],
c.Nombre_carrera as [Nombre de la
Carrera]
FROM dbo.profesor as p inner join
dbo.Carrera as c
on p.id_c = c.ID_c
where c.Nombre_carrera = 'Electricidad'
or c.Nombre_carrera = 'Informática'
or c.Nombre_carrera = 'Contabilidad'
order by c.Nombre_carrera desc,
p.app_prof desc
4. Consulta que muestre una lista única (no repetidos) de las carreras
registradas en la tabla alumno (en la que está inscrito el alumno). Esta
consulta debe mostrar el nombre de la carrera. La consulta debe ser
ordenada descendentemente por el nombre de la carrera ¿Cuál es la
sentencia utilizada?
MAX(a.edad_alum) as
Edad_Maxima,
COUNT(a.Id_A) as
Total_Alumno
from dbo.alumno as a
group by a.ID_c) as
prom
where c.ID_c = PROM.ID_c
order by c.Nombre_carrera
go
Correlacionada
select c.Nombre_carrera as 'Nombre
Carrera',
(select avg(a.edad_alum)
from dbo.alumno as a
Where c.ID_c = a.ID_c )
as 'Edad Promedio',
(select MAX(a.edad_alum)
from dbo.alumno as a
Where c.ID_c = a.ID_c )
as 'Edad Mayor',
(select COUNT(Alu.Id_A)
from dbo.alumno as Alu
Where c.ID_c = Alu.ID_c
) as 'Numero Alumnos'
from dbo.Carrera as c
Where exists (Select 1
From dbo.alumno as a
Where c.ID_c =
a.ID_c)
order by c.Nombre_carrera
go
6. Consulta que muestre el nombre de la carrera, nombre de las
materias por carrera y el cuatrimestre en que se cursan. La consulta debe
incluir el nombre de la carrera aun cuando no haya relación con materias,
es decir, debe mostrar todas las carreras registradas. La consulta debe ser
ordenada ascendentemente por el nombre de la carrera, el cuatrimestre y
el nombre de la materia. ¿Cuál es la sentencia utilizada para la consulta?
select
a.Nombre_alum+''+a.App_Alum+''+a.Apm_Alum
as 'Nombre Alumno',
m.Nombre_Materia as 'Materia'
from dbo.alumno as a
inner join dbo.Carrera as c
on a.ID_c = c.ID_c
inner join dbo.Materia as m
on c.ID_c = m.id_c
where a.Id_A in (select ca.Id_A from
dbo.Calificacion as ca
where ca.ano = 2000 and ca.Periodo = 2)
and c.Nombre_carrera = 'informática'
order by a.Nombre_alum, m.Nombre_Materia
asc
8. Consulta que muestre la clave de la carrera, nombre de la carrera, el
nombre del alumno, edad y sexo de todos aquellos que tengan una letra “A”
o “E” en su nombre o su edad fluctué entre 19 y 23 o que sean del sexo
femenino.
¿Cuál es la sentencia utilizada para la consulta?
--inner join
Select g.Nombre_gpo as 'NOMBRE
GRUPO',
AVG(a.edad_alum) as 'EDAD PROMEDIO'
From dbo.alumno as a
inner join dbo.grupo as g
on a.id_gpo = g.id_gpo
group by g.Nombre_gpo
--Funcion
IF OBJECT_ID ('dbo.fn_get_prom') is
not null
Begin
Drop function dbo.fn_get_prom
End
go
Create function dbo.fn_get_prom
(@P_gpo Int)
Returns Int
as
Begin
Declare @ln_id_gpo int
Select @ln_id_gpo = avg(a.edad_alum)
from dbo.alumno as a
Where a.id_gpo = @P_gpo
Return(@ln_id_gpo)
End
Go
Select g.Nombre_gpo as "Nombre Grupo"
,dbo.fn_get_prom(g.id_gpo) as
Promedio
From dbo.grupo as g
Order by g.Nombre_gpo
Go
11. Consulta que muestre la cantidad de alumnos que tengan una letra
“i” en su nombre. La consulta debe mostrar el nombre de la carrera y la
cantidad de alumnos que tienen esta letra. La consulta debe tener los
siguientes encabezados de columna: “Nombre Carrera” y “Cantidad
Alumnos”.
¿Cuál es la sentencia utilizada?
Select
c.Nombre_carrera as 'Nombre Carrera',
count(a.Id_A) as 'Cantidad Alumnos'
From dbo.alumno as a,dbo.Carrera as c
where a.ID_c = c.ID_c
and a.Nombre_alum LIKE '%i%'
Group by c.Nombre_carrera ;
Select
a.Nombre_alum+''+a.App_Alum+''+a.Apm_Alum
as 'Nombre_Alumno',
m.Nombre_Materia as 'Materia_Materia',
((c.calif_1+c.calif_2+c.calif_3+c.calif_4
)/4) as 'Promedio'
From dbo.alumno as a inner join
dbo.Calificacion as c
on a.Id_A=c.Id_A
inner join dbo.Materia as m
on c.ID_M=m.ID_M
Where m.id_c in (select ca.ID_c from
dbo.Carrera as ca
where ca.Nombre_carrera = 'Informática')
and ano=2000 and Periodo=1
Order by App_Alum,Promedio
13. Consulta que muestre el nombre del alumno de la siguiente manera:
“Martínez P. – Juan Antonio” (apellido paterno, primer letra apellido
materno, punto, guión y después el nombre del alumno), además del
promedio por periodo (promedio de promedios, redondeado a 2 decimales),
el nombre de la carrera, año y periodo. Los títulos de las columnas son:
Nombre Alumno, Promedio/Cuatrimestre, Carrera, año y periodo
respectivamente. (función, inner join) ¿Cuál es la sentencia utilizada?
IF OBJECT_ID ('dbo.fn_get_prom_cuatri')
is not null
Begin
Drop function dbo.fn_get_prom_cuatri
End
go
Create function dbo.fn_get_prom_cuatri
(@P_Id_A int , @p_ano int, @P_Periodo
int)
Returns Int
as
Begin
Declare @ln_prom int
Select @ln_prom = avg(st.subt)
From (Select Round((cali.calif_1 +
cali.calif_2 + cali.calif_3 +
cali.calif_4) / 4,2) as subt
From dbo.Calificacion as cali
Where cali.Id_A = @P_Id_A
And ano =
@p_ano
And Periodo =
@P_Periodo) as st
Return(@ln_prom)
End
Go
Select distinct
ltrim(Rtrim(a.App_Alum))+N'
'+Substring(ltrim(Rtrim(a.Apm_Alum)),1,
1)+N'. - '+ltrim(Rtrim(a.Nombre_alum))
as 'Nombre Alumno'
,Round(dbo.fn_get_prom_cuatri
(a.Id_A,cali.ano, cali.Periodo),2)
'Promedio/Cuatrimestre'
,car.Nombre_carrera as
'Carrera'
,cali.ano as 'Año'
,cali.Periodo as 'Periodo'
From dbo.alumno
as a
inner join dbo.Calificacion
as cali
On a.Id_A = cali.Id_A
Inner join dbo.Materia
as mat
On cali.ID_M = mat.ID_M
Inner Join dbo.Carrera
as car
On mat.id_c = car.ID_c
Where a.ID_c =
car.ID_c
Go
--inner join
Select
a.Apm_Alum +''+
SUBSTRING( Apm_Alum,1,1)+'.'+ '
'+' - '+ ' '+
Nombre_alum as 'Nombre Alumno',
AVG((cal.calif_1+
cal.calif_2+cal.calif_3+cal.calif_4)/4)
as 'Promedio/Cuatrimestre' ,
car.Nombre_carrera as
'Carrera',
cal.ano as 'Año', cal.Periodo as
'Periodo'
From dbo.alumno as a inner join
dbo.Calificacion as cal
on a.Id_A = cal.Id_A
inner join dbo.Carrera as car
on a.ID_c = car.ID_c
group by cal.Periodo, a.Apm_Alum,
a.Nombre_alum,car.Nombre_carrera,
cal.ano ;
--Innerjoin /Subconsulta
Select mat.Nombre_Materia As Materia
,c2.ano As
año
,c2.Periodo As
periodo
,Count(c2.Id_A) As
'Total Reprobados'
From dbo.Materia as mat inner join
(Select distinct cal.ano
,cal.Periodo
,cal.Id_A
,cal.ID_M
From dbo.Calificacion cal
Where exists (Select 1
From
dbo.Calificacion c1
Where
dbo.fn_get_prom_mat (c1.Id_A,c1.ID_M,
c1.ano, c1.Periodo) < 8
And c1.ano
= cal.ano
select
c.nombre_carrera as
'CARRERA',
cuatrimestre AS
'CUATRIMESTRE',
count(id_m) as 'CANTIDAD
DE MATERIAS'
from DBO.carrera AS c
inner join dbo.materia as m on
m.id_c=c.ID_c
group by
m.cuatrimestre,c.nombre_carrera
21. Consulta que muestre el % de aprobados y reprobados por grupo. La
consulta debe mostrar el nombre del grupo, % de aprobados y el % de
reprobados (Considerar el promedio de promedios por cada alumno, para
un periodo y año especifico) ¿Cuál es la sentencia utilizada?
SELECT
G.Nombre_gpo as 'GRUPO'
,(((SELECT
COUNT(Id_A)
FROM dbo.alumno AS A
WHERE A.id_gpo = G.id_gpo
AND (SELECT
(AVG((calif_1 + calif_2 +
calif_3 + calif_4) / 4))
FROM Calificacion
AS CA
WHERE CA.Id_A =
A.Id_A)
> 7.5)
* (100))
/ (2)) AS '% ALUMNOS APRO'
,(((SELECT
COUNT(Id_A)
FROM dbo.alumno AS A
WHERE A.id_gpo = G.id_gpo
AND (SELECT
(AVG((calif_1 + calif_2 +
calif_3 + calif_4) / 4))
FROM Calificacion
AS CA
WHERE CA.Id_A =
A.Id_A)
< 7.5)
* (100))
/ (2)) AS '% ALUMNOS REPRO'
FROM dbo.grupo AS G
22. Consulta que muestre el grupo y el nombre completo del alumno. La
consulta debe mostrar por apellido paterno de manera ascendente, en cada
grupo. ¿Cuál es la sentencia utilizada?
SELECT
C.Nombre_carrera AS 'CARRERA'
,A.Apm_Alum+A.App_Alum+A.Nombre
_alum AS 'ALUMNO'
,M.Nombre_Materia AS 'MATERIA'
,CA.ano AS 'AÑO'
,CA.Periodo AS 'PERIODO'
FROM DBO.alumno AS A
INNER JOIN DBO.Carrera AS C
ON C.ID_c = A.ID_c
INNER JOIN DBO.Materia AS M
ON M.id_c = C.ID_c
INNER JOIN DBO.Calificacion AS CA
ON CA.ID_M = M.ID_M
AND CA.Id_A = A.Id_A
WHERE M.cuatrimestre = 1
24. Consulta que muestre la cantidad de materias que se imparten por
carrera. La consulta debe ser ordenada ascendentemente por el nombre de
la materia. ¿Cuál es la sentencia utilizada?
SELECT
C.NOMBRE_CARRERA
,AV.EDAD_PROMEDIO
,AV.EDAD_MAYOR
,AV.NUMERO_ALUMNOS
FROM DBO.CARRERA AS C
INNER JOIN (SELECT
A.ID_C ID
,AVG(A.EDAD_ALUM)
EDAD_PROMEDIO
,MAX(A.EDAD_ALUM)
EDAD_MAYOR
,COUNT(A.ID_A)
NUMERO_ALUMNOS
FROM DBO.ALUMNO AS A
GROUP BY A.ID_C) AV
ON AV.ID = C.ID_C
convert(varchar,((count(cal.id_a)*100)/(s
elect count(calif.id_a) from calificacion
calif)))+'%' as 'PORCENTAJE ALUMNOS'
from dbo.Calificacion as cal inner
join dbo.Materia as m on cal.ID_M=m.ID_M
inner join dbo.Carrera as c on
c.id_c=m.id_c
group by c.nombre_carrera,
m.nombre_materia
order by c.nombre_carrera