Vous êtes sur la page 1sur 21

INGENIERÍA EN TECNOLOGÍAS DE LA

INFORMACIÓN

Base de Datos Para Aplicaciones

Unidad I Manipulación avanzada de datos con


SQL

Alumna: Brenda Anahi Lozano Hernández


Grupo: GITI9094-S

Objetivo: El alumno elaborará consultas avanzadas mediante el lenguaje SQL


utilizando las mejores prácticas para el manejo adecuado de la información.

Fecha: 05/05/2015
Modelo Relacional
Instrucciones: Analice el siguiente modelo relacional y posteriormente realice las
consultas solicitadas por tu jefe:

(Utilizar el archivo “Escuela.sql, para generar la base de datos)

Nota: Es sumamente importante analizar antes de ejecutar y la teoría es fundamental


para poder aplicar la sentencia pertinente a cada caso.

1. Consulta que muestre el nombre completo del profesor, clave de la


carrera y nombre de la carrera a la que pertenece. Para todos los profesores
donde su apellido paterno inicie con la letra “A”, “S” o “M”. Solo interesan
de las carreras “Contabilidad” e “Informática”. La consulta debe ser
ordenada descendentemente por el nombre de la carrera y
ascendentemente por el nombre del profesor. ¿Cuál es la sentencia utilizada
para la consulta?

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

2. Consulta que muestre el nombre del profesor y el nombre de los


grupos a los que impartirá clase. La consulta debe ser ordenada
ascendentemente por el nombre del profesor y por el nombre del grupo
¿Cuál es la sentencia utilizada para la consulta?

select p.nombre_prof as [Nombre


Profesor],g.Nombre_gpo as [Grupo]
from dbo.profesor as p inner join
dbo.prof_gpo as pg
on p.Id_p = pg.id_p inner join
dbo.grupo as g
on pg.Id_gpo = g.id_gpo
order by p.nombre_prof asc, g.id_gpo
asc
3. Consulta que muestre nombre de la carrera y nombre completo del
profesor, de todos los profesores que son de las carreras de: Electricidad,
Informática y Contabilidad. La consulta debe ser ordenada
descendentemente por el nombre de la carrera y descendentemente por el
apellido paterno del profesor. ¿Cuál es la sentencia utilizada para la
consulta?

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?

select c.Nombre_carrera as [Nombre


Carrera]
from dbo.Carrera as c inner join
dbo.alumno as a
on c.ID_c = a.ID_c
group by c.Nombre_carrera
order by c.Nombre_carrera desc
5. Consulta que muestre el nombre de la carrera, edad promedio de los
alumnos, la edad máxima y el número de alumnos por carrera. La consulta
debe ser ordenada ascendentemente por la carrera. Los títulos de las
columnas de la consulta son: Nombre_Carrera, Edad_Promedio,
Edad_Mayor y Numero_Alumnos. (Subconsulta correlacionada y Derivada)
¿Cuál es la sentencia utilizada?
Derivada
select c.Nombre_carrera as 'Nombre
Carrera',
prom.Edad_Promedio as
'Edad Promedio',
prom.Edad_Maxima as
'Edad Mayor',
prom.Total_Alumno as
'Numero Alumnos'
from dbo.Carrera as c,
(select a.ID_c,
avg(a.edad_alum)
as Edad_Promedio,

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 c.Nombre_carrera as 'NOMBRE


CARRERA', m.Nombre_Materia as
'NOMBRE MATERIA', m.cuatrimestre
as 'CUATRIMESTRE'
from dbo.Carrera as c
left join dbo.Materia as m
on c.ID_c=m.ID_c
order by c.Nombre_carrera,
m.cuatrimestre,
m.Nombre_Materia asc
7. Consulta que muestre el nombre del alumno y nombre de las materias
que curso en el año 2000 periodo
2. Solo para los alumnos de la carrera de informática. (Subconsulta, inner
join) ¿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?

select c.ID_c as 'Clave Carreta',


c.Nombre_carrera as 'Carrera',
a.Nombre_alum+''+a.App_Alum+''+a.Apm_A
lum as 'Nombre Alumno',
a.edad_alum as 'Edad',
a.sexo_alum as 'Sexo'
from dbo.Carrera as c inner join
dbo.alumno as a
on c.ID_c = a.ID_c
where (a.Nombre_alum like '%A%' or
a.Nombre_alum like '%E%')
or a.edad_alum between 19 and 23
or a.sexo_alum = 'F';

9. Consulta que muestre la clave del profesor que es jefe, el nombre


completo del profesor que es jefe, la clave del profesor subordinado y el
nombre completo del profesor subordinado. La consulta debe ser ordenada
ascendentemente por ambos apellidos paternos. ¿Cuál es la sentencia
utilizada para la consulta?

select j.Id_p as 'Clave Jefe',


j.nombre_prof+''+j.app_prof+''+j.apm_pro
f as 'NOmbre jefe',
s.Id_p as 'Clave Subordinado',
s.nombre_prof+''+s.app_prof+''+s.apm_pro
f as 'Nombre Subordinado'
from dbo.profesor as s
inner join dbo.profesor as j
on s.Id_jefe = j.Id_p
10. Consulta que muestre la edad promedio de los alumnos por grupo. La
consulta debe ser ordenada ascendentemente por el nombre del grupo.
(Subconsulta, inner join, función) ¿Cuál es la sentencia utilizada para la
consulta?
-Subconsulta
Select g.Nombre_gpo as 'Nombre Grupo'
,(Select avg(a.edad_alum)
from dbo.alumno as a
Where a.id_gpo = g.id_gpo)
as 'Edad Promedio'
From dbo.grupo as g

--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 ;

12. Consulta que muestre el nombre completo del alumno, nombre de la


materia y el promedio por materia. Esta consulta es para todos los alumnos
de la carrera de “Informática” (la condición se debe hacer con este valor y
no con la clave de la carrera), año 2000 y periodo 1. La consulta debe ser
ordenada ascendentemente por apellido paterno del alumno y por el
promedio calculado. Títulos de las columnas: Nombre_Alumno,
Nombre_Materia y Promedio respectivamente. (Derivada, inner join)
¿Cuál es la sentencia utilizada?

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 ;

14. Consulta que muestre la cantidad de alumnos nacidos por mes. La


consulta debe mostrar el nombre del mes y la cantidad de alumnos nacidos
en el mes. La consulta debe ser ordenada ascendentemente por el nombre
del mes (Enero, Febrero,..., Diciembre) (Para esta consulta usara la funcione
datename() o similar).
¿Cuál es la sentencia utilizada?

select case month(a.fec_nac)


when 1 then 'Enero'
when 2 then 'Febrero'
when 3 then 'Marzo'
when 4 then 'Abril'
when 5 then 'Mayo'
when 6 then 'junio'
when 7 then 'Julio'
when 8 then 'Agosto'
when 9 then 'septiembre'
when 10 then 'Octubre'
when 11 then 'Noviembre'
when 12 then 'Diciembre'
End as 'MES',
count(a.fec_nac) as 'CANTIDAD'
From dbo.alumno as a
group by month(a.fec_nac)
15. Consulta que muestre el nombre del alumno, nombre de la materia,
así como las calificaciones 1 a la 4 de todos los alumnos que al menos tienen
reprobada una de las 4 calificaciones parciales (calificación menor a 8), para
un año y periodo especifico. (función, inner join, consulta derivada,
subconsulta) ¿Cuál es la sentencia utilizada?
/*Inner Join*/
Select a.Nombre_alum +'
'+a.Apm_Alum + ' '+a.App_Alum as
'NOMBRE ALUMNO',
m.Nombre_Materia as 'NOMBRE
MATERIA', ca.calif_1 as
'CALIFICACION_1', ca.calif_2
'CALIFICACION_2',
calif_3 as
'CALIFICACION_3',calif_4 as
'CALIFICACION_4'
From dbo.alumno a
inner join dbo.Calificacion as
ca
on a.Id_A = ca.Id_A
inner join dbo.Materia as m
on m.ID_M = ca.ID_M
WHERE (ca.calif_1 <8 OR
ca.calif_2 <8 or ca.calif_3 <8 or
ca.calif_4 < 8)
and ca.ano = '2000' and
ca.Periodo = '1';

---Inner Join / Funcion


IF OBJECT_ID
('dbo.fnAlumnosReprobados') IS
NOT NULL
Begin
DROP FUNCTION
dbo.fnAlumnosReprobados
end
GO
CREATE FUNCTION
dbo.fnAlumnosReprobados ()
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN
(
Select alu.Nombre_alum
as Alumno
,mat.Nombre_Materia as
Materia
,cali.ano
as año
,cali.Periodo
as Periodo
,cali.calif_1
as 'Calificación 1'
,cali.calif_2
as 'Calificación 2'
,cali.calif_3
as 'Calificación 3'
,cali.calif_4
as 'Calificación 4'
from dbo.alumno as alu
inner join
dbo.Calificacion as cali on
alu.Id_A = cali.Id_A
inner join dbo.Materia
as mat on
cali.ID_M = mat.ID_M
Where (cali.calif_1 < 8 Or
cali.calif_2 < 8 Or cali.calif_3
< 8 Or cali.calif_4 < 8 )
);
Go

16. Consulta que muestre la cantidad de materias reprobadas por


materia para da una de las calificaciones parciales, para un año y periodo
especifico. La consulta deberá mostrar el nombre de la materia y la cantidad
de alumnos reprobados para cada parcial
¿Cuál es la sentencia utilizada? (función, inner join, consulta derivada,
subconsulta)

--Función y consulta derivada


IF OBJECT_ID ('dbo.fn_get_prom_mat')
is not null
Begin
Drop function dbo.fn_get_prom_mat
End
go
Create function dbo.fn_get_prom_mat
(@P_Id_A int ,@p_id_M 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 cali.ID_M =
@p_id_M
And cali.ano =
@p_ano
And cali.Periodo =
@P_Periodo) as st
Return(@ln_prom)
End
Go

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

And c1.ID_M = cal.ID_M


And
c1.Periodo = cal.Periodo
And
c1.Id_A = cal.Id_A)) as c2 on
mat.ID_M = c2.ID_M
Group by mat.Nombre_Materia
,c2.ano
,c2.Periodo

17. Consulta que muestre la cantidad de alumnos reprobados por año y


periodo (considerar el promedio de promedios, obtenido por cada alumno
por cada periodo y año). (función, inner join, consulta derivada,
subconsulta)
¿Cuál es la sentencia utilizada?

--Función y consulta derivada


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_id_M 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 cali.ID_M =
@p_id_M
And cali.ano =
@p_ano
And cali.Periodo =
@P_Periodo) as st
Return(@ln_prom)
End
Go
--Innerjoin /Subconsulta
Select c2.ano as 'AÑO'
,c2.Periodo as 'PERIODO'
,Count(al.Id_A) as 'TOTAL
REPROBADOS'
From dbo.alumno as al inner join
(Select distinct cali.ano
,cali.Periodo
,cali.Id_A
From dbo.Calificacion cali
Where exists (Select 1
From
dbo.Calificacion c1
Where
dbo.fn_get_prom_cuatri (c1.Id_A,
c1.ID_M, c1.ano, c1.Periodo) < 8
And c1.ano
= cali.ano
And
c1.Periodo = cali.Periodo

And c1.ID_M = cali.ID_M


And
c1.Id_A = cali.Id_A)) as c2 on
al.Id_A = c2.Id_A
Group by c2.ano,c2.Periodo

18. Considerando la consulta anterior, adicionar el nombre de la materia


y la cantidad de reprobados en cada una de estas. Los resultados deben
coincidir con el resultado de la consulta 17.
¿Cuál es la sentencia utilizada?

Select ca.ano as 'AÑO',ca.Periodo as


'PERIODO'
,m.Nombre_Materia as 'MATERIA',
count(a.Id_A) as 'TOTAL REPROBADOS'
From dbo.alumno as a
INNER JOIN dbo.Calificacion as ca
on a.Id_A = ca.Id_A
INNER JOIN dbo.Materia as M
on ca.ID_M = M.ID_M
WHERE
((ca.calif_1+ca.calif_2+ca.calif_3+ca.calif_
4)/4) <8
group by ca.ano ,ca.Periodo,
m.Nombre_Materia;
19. Consulta que muestre la cantidad de hombres y mujeres registrados
en la relación Alumno, considerar para esto, cada una de las carreras en la
que está registrado el alumno. La consulta deberá mostrar el nombre de la
carrera, sexo y cantidad de personas.
¿Cuál es la sentencia utilizada?
Select c.Nombre_carrera as 'NOMBRE
CARRERA',
count(a.Id_A) as
'CANTIDAD ALUMNOS',
a.sexo_alum as 'SEXO'
From dbo.alumno as a inner join
dbo.Carrera as c
on a.ID_c = c.ID_c
group by
c.Nombre_carrera,a.sexo_alum;

20. Consulta que muestre la cantidad de asignaturas que se deben cursar


por carrera y cuatrimestre. La consulta debe mostrar el nombre de la
carrera, número de cuatrimestre y la cantidad de materias que se cursan en
cada cuatrimestre ¿Cuál es la sentencia utilizada?

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 g.nombre_gpo as 'GRUPO',


concat(a.nombre_alum,a.app_alum,a.apm_alum)
AS 'NOMBRE ALUMNO'
from dbo.grupo as g
inner join dbo.alumno as a on
g.id_gpo=a.id_gpo
order by g.id_gpo, a.app_alum

23. Consulta que muestre el nombre del alumno (nombre completo) y el


nombre de las materias que curso en el cuatrimestre 1. La consulta deberá
mostrar el nombre de la carrera, nombre del alumno y nombre de las
materias que curso, para un año y periodo especifico. ¿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 as 'CARRERA',


COUNT(M.Nombre_Materia)
AS 'CANTIDAD MATERIAS'
from dbo.Materia as m inner join
dbo.Carrera as c
on
m.id_c=c.ID_c
group by Nombre_carrera

25. Resolver nuevamente la consulta solicitada en la petición 5, haciendo


uso de subconsultas. ¿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

26. Resolver nuevamente la consulta solicitada en la petición ¿Cuál es la


sentencia utilizada?
NO ENTENDI LA INSTRUCCIÓN

27. Consulta que muestre el nombre de la carrera, nombre de la materia


y la cantidad de personas que han cursado cada materia y el % que
representa, contra el total de alumnos. ¿Cuál es la sentencia utilizada?
select c.Nombre_carrera AS
'CARRERA',
m.nombre_materia AS
'MATERIA',
count(cal.id_a) AS
'CANTIDAD PERSONAS',

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

28. Consulta que muestre la cantidad de profesores por carrera. La


consulta debe mostrar el nombre de la carrera, sexo y la cantidad de
profesores por sexo. ¿Cuál es la sentencia utilizada?

select c.nombre_carrera as 'Nombre


carrera',
p.sexo_prof as 'Sexo',
count(p.id_p) as
'Cantidad'
from dbo.profesor as p
inner join dbo.carrera as c on
p.id_c=c.ID_c
group by c.nombre_carrera,p.sexo_prof

Vous aimerez peut-être aussi