Está en la página 1de 16

BASE DE DATOS - SQL

EJERCICIOS DE SQL
Considere el siguiente esquema para una base de datos que contiene informacin acerca de equipos
formados por profesores y alumnos en proyectos. Resuelva las siguientes consultas utilizando el
lenguaje SQL:
Profesor(P#, Nombre_Profesor, Categoria, Facultad)
Alumno(A#, Nombre_Alumno, Escuela)
Proyecto(T#, Fecha_Inicio, Fecha_Termino, Facultad)
Equipo(T#, P#, A#)
Con claves principales (P#), (A#), (T#), (T#, P#, A#) respectivamente.

Luiscorpin

Pgina 1

BASE DE DATOS - SQL

1. Obtener el P# de todos los profesores que participan (o participaron) en proyectos vinculados a


facultades diferentes al suyo.
SELECT distinct p.p#
FROM PROFESOR p , PROYECTO t, EQUIPO e
WHERE p.p#=e.p# and t.t#=e.t# and p.FACULTAD<>t.FACULTAD;

2. Obtener los datos de los proyectos con fecha ms antigua de cada facultad a la que pertenece el
proyecto.
SELECT *
FROM Proyecto p
WHERE
TRUNC(sysdate-p.fecha_inicio)>= ALL( SELECT TRUNC(sysdate-p1.fecha_inicio)
FROM Proyecto p1
WHERE p1.Facultad = p.Facultad );

Luiscorpin

Pgina 2

BASE DE DATOS - SQL

3. Obtener el P# y nombre de todos los profesores que sean de la misma facultad y simultneamente
hayan hecho parte del mismo proyecto.
SELECT DISTINCT p.p# , p.Nombre_Profesor
FROM Profesor p , Proyecto t , Equipo e
WHERE
p.p# = e.p# and t.t# = e.t# and 0< (SELECT COUNT(DISTINCT p1.p#)
FROM Profesor p1 , Equipo e1 , Proyecto t1
WHERE
p.p#<>p1.p# and p1.p# = e1.p# and p.Facultad=p1.Facultad
and t1.t#=e1.t# and e1.t#=t.t#);

4. Obtener el P# y nombre de los profesores que han orientado a un mismo alumno en todos los
proyectos de la Facultad de Qumica que se iniciaron y terminaron el 2013.
SELECT DISTINCT p.p# , p.Nombre_Profesor
FROM Profesor p , Alumno a , Proyecto t , Equipo e
WHERE
p.p#=e.p# and a.a#= e.a# and t.t# = e.t# and t.Facultad ='Quimica' and
TO_CHAR(t.Fecha_Inicio,'yyyy') =2013 and TO_CHAR(t.Fecha_Termino,'yyyy') =2013
and 1=( SELECT COUNT(DISTINCT e1.a#)
FROM Profesor p1 , Alumno a1 , Proyecto t1 , Equipo e1
WHERE
p.p#<>p1.p# and p1.p#=e1.p# and a1.a#= e1.a# and t1.t# = e1.t# and a.a#=a1.a#);

Luiscorpin

Pgina 3

BASE DE DATOS - SQL

5. Obtener el T# y la fecha de inicio de todos los proyectos de los cuales hagan (o hayan hecho) parte
dos alumnos homnimos.
SELECT DISTINCT t.t# , t.Fecha_inicio
FROM Proyecto t ,Alumno a , Equipo e
WHERE
a.a# = e.a# and t.t# = e.t# and
1 = ( SELECT COUNT (DISTINCT a1.a#)
FROM Alumno a1 , Equipo e1
WHERE
a.a#<>a1.a# and a.Nombre_Alumno=a1.Nombre_Alumno and a1.a# = e1.a# and e1.t#=e.t#);

6. Obtener el P# y nombre de los profesores que orientan (u orientaron), al menos a dos alumnos
diferentes en dos proyectos distintos.
SELECT DISTINCT p.p#, p.Nombre_Profesor
FROM Profesor p , Proyecto t , Equipo e, Alumno a
WHERE p.p# = e.p# and t.t# = e.t# and a.a#=e.a#
and 1< ( SELECT COUNT (DISTINCT e1.a#)
FROM Profesor p1, Alumno a1 , Proyecto t1, Equipo e1
WHERE
p.p# = p1.p# and p1.p# = e1.p# and a1.a#=e1.a# and
t1.t# =e1.t# and 1< ( SELECT COUNT (DISTINCT e2.t#)
FROM Profesor p2, Proyecto t2, Equipo e2
WHERE
p1.p#=p2.p# and p2.p#=e2.p# and t2.t#=e2.t#));

Luiscorpin

Pgina 4

BASE DE DATOS - SQL

7. Obtener las facultades que solo tengan profesores trabajando (o hayan trabajado) en un nico
proyecto.
SELECT DISTINCT t.Facultad
FROM Profesor p , Proyecto t , Equipo e
WHERE p.p# = e.p# and t.t# = e.t# and
1=( SELECT COUNT(DISTINCT e2.t#)
FROM Proyecto t2, Equipo e2, Profesor p2
WHERE p2.p# =p.p# and p2.p# = e2.p# and t2.t#=e2.t# ) ;

8. Obtener el T# de los proyectos donde trabajan (o hayan trabajado) por lo menos un alumno de
Medicina y solamente profesores de la misma facultad.
SELECT DISTINCT t.t#
FROM Proyecto t ,Alumno a , Equipo e
WHERE t.t#= e.t# and a.a# =e.a# and
EXISTS (SELECT *
FROM Proyecto t1, Alumno a1, Equipo e1
WHERE t1.t#=t.t# and t1.t# =e1.t# and e1.a#=a1.a# and
a1.Escuela='Medicina' );

Luiscorpin

Pgina 5

BASE DE DATOS - SQL

9. Obtener el nombre y la escuela de todos los alumnos que participan (o participaron) en un proyecto
donde exista por lo menos un profesor que orienta (u orient) a por lo menos un alumno de Derecho.
SELECT DISTINCT a.Nombre_Alumno , a.Escuela
FROM Alumno a , Profesor p ,Equipo e
WHERE
a.a# =e.a# and p.p#=e.p# and
EXISTS (SELECT *
FROM Profesor p1,Alumno a1, Equipo e1
WHERE p.p#=p1.p# and e1.p#=p1.p# and e1.a#=a1.a# and
a1.Escuela ='Derecho');

10. Obtener el nombre y facultad de los profesores que orientan en un nmero mayor de alumnos que el
promedio de alumnos orientados de todos los profesores.
SELECT DISTINCT p.Nombre_Profesor , p.Facultad
FROM Profesor p , Alumno a , Equipo e
WHERE p.p# = e.p# and a.a# = e.a# and
EXISTS (SELECT p1.p#
FROM profesor p1, equipo e1
GROUP BY p1.p#
HAVING p1.p# = e1.p# and p1.p#=p.p# and
COUNT(DISTINCT e1.a# ) > (SELECT AVG (COUNT ( a# ))
FROM Equipo
GROUP BY a# ));

Luiscorpin

Pgina 6

BASE DE DATOS - SQL

Considere el siguiente esquema para una base de datos que contiene la informacin de los clubes y la
participacin en distintos torneos. Resuelva las siguientes consultas utilizando el lenguaje SQL:
Empleado(Nombre_Empleado, Calle, Ciudad )
Trabaja(Nombre_Empleado, Nombre_Empresa, Sueldo)
Empresa(Nombre_Empresa, Ciudad)
Jefe(Nombre_Empleado, Nombre_Jefe)
Con claves principales (Nombre_Empleado), (Nombre_Empleado), (Nombre_Empresa, Ciudad),
(Nombre_Empleado) respectivamente.

Luiscorpin

Pgina 7

BASE DE DATOS - SQL

11. Obtener los nombres de los empleados que viven en la ciudad de la empresa para la que trabajan.
SELECT e.Nombre_Empleado
FROM Empleado e , Empresa p , Trabaja t
WHERE e.Nombre_Empleado = t.Nombre_Empleado and
p.Nombre_Empresa= t.Nombre_Empresa and e.Ciudad = p.Ciudad;

12. Obtener los nombres de los empleados que viven en la misma ciudad y en la misma calle que sus
jefes.
SELECT e.Nombre_Empleado
FROM Empleado e , Jefe j ,Empleado e1
WHERE e.Nombre_Empleado = j.Nombre_Empleado and
j.Nombre_Jefe = e1.Nombre_Empleado and e.Ciudad=e1.Ciudad and
e.Calle = e1.Calle;

13. Obtener el nombre de todos los empleados que ganan ms que sus jefes.
SELECT e.Nombre_Empleado
FROM Empleado e , Jefe j ,Empleado e1,Trabaja t,Trabaja t1
WHERE e.Nombre_Empleado = j.Nombre_Empleado and t.Nombre_Empleado
=e.Nombre_Empleado and
j.Nombre_Jefe = e1.Nombre_Empleado and e1.Nombre_Empleado = t1.Nombre_Empleado
and t1.Sueldo < t.Sueldo;

Luiscorpin

Pgina 8

BASE DE DATOS - SQL

14. Obtener el nombre de todos los empleados que ganan ms que cualquier empleado del Banco
Banterra.
SELECT DISTINCT e1.nombre_empleado
FROM Empleado e ,Empleado e1,Trabaja t,Trabaja t1,Empresa p,Empresa p1
WHERE e.Nombre_Empleado=t.Nombre_Empleado and p.Nombre_Empresa=t.Nombre_Empresa
and
e1.Nombre_Empleado=t1.Nombre_Empleado and p1.Nombre_Empresa=t1.Nombre_Empresa
and
t.Nombre_Empresa ='Banco Banterra' and t1.Nombre_Empresa NOT IN('Banco Banterra')and
t.Sueldo < t1.Sueldo;

15. Obtener los nombres de los empleados que trabajan en empresas que tienen sede en las ciudades de
Avila y Mostoles.
SELECT e.Nombre_Empleado
FROM Empleado e , Empresa p ,Empresa p1, Trabaja t
WHERE
e.Nombre_Empleado=t.Nombre_Empleado and p.Nombre_Empresa=t.Nombre_Empresa and
p.Nombre_Empresa= p1.Nombre_Empresa and
p.Ciudad = 'Avila' and p1.Ciudad = 'Mostoles';

Luiscorpin

Pgina 9

BASE DE DATOS - SQL

16. Obtener los nombres de los empleados que viven en la ciudad de Villaconejos o que trabajan en
alguna empresa que tiene sede en la ciudad de Villaconejos.
SELECT DISTINCT e.Nombre_Empleado
FROM Empleado e , Empresa p, Trabaja t
WHERE e.Nombre_Empleado = t.Nombre_Empleado and p.Nombre_Empresa = t.Nombre_Empresa
and
(e.Ciudad = 'Villaconejos' or p.Ciudad = 'Villaconejos');

17. Obtener el nombre de las empresas que no tienen sede en ninguna de las ciudades en las que tiene
sede el Banco Unicaja.
SELECT e.Nombre_Empresa
FROM Empresa e
WHERE
0 = (SELECT COUNT (e1.Ciudad)
FROM Empresa e1
WHERE
e.Nombre_Empresa=e1.Nombre_Empresa
and e1.Ciudad=ANY( SELECT Ciudad
FROM Empresa
WHERE
Nombre_Empresa='Unicaja'));

Luiscorpin

Pgina 10

BASE DE DATOS - SQL

18. Obtener el nombre de las empresas con sede en todas las ciudades en las que tiene sede el Banco
Banterra.
SELECT DISTINCT e.Nombre_Empresa
FROM Empresa e
WHERE
e.Nombre_Empresa<>'Banco Banterra'
and (SELECT COUNT(e1.Ciudad)
FROM Empresa e1
WHERE
e.Nombre_Empresa=e1.Nombre_Empresa and
e1.Ciudad = ANY( SELECT Ciudad
FROM Empresa
WHERE
Nombre_Empresa='Banco Banterra')) = (SELECT COUNT(Ciudad)
FROM Empresa
WHERE
Nombre_Empresa='Banco Banterra');

19. Obtener el nombre de los empleados que ganan ms que el sueldo promedio de los empleados de su
empresa.
SELECT DISTINCT e.Nombre_Empleado
FROM Empleado e ,Trabaja t,Empresa p
WHERE
e.Nombre_Empleado = t.Nombre_Empleado and p.Nombre_Empresa= t.Nombre_Empresa and
t.Sueldo > (SELECT AVG(t2.Sueldo)
FROM Trabaja t2
WHERE
t.Nombre_Empresa=t2.Nombre_Empresa);

Luiscorpin

Pgina 11

BASE DE DATOS - SQL

20. Obtener el nombre de las empresas cuyos empleados ganan un sueldo ms alto, en promedio, que el
sueldo promedio del Banco Unicaja.
SELECT DISTINCT p.Nombre_Empresa
FROM Empleado e , Empresa p , Trabaja t
WHERE
e.Nombre_Empleado = t.Nombre_Empleado and p.Nombre_Empresa = t.Nombre_Empresa and
(SELECT AVG(t1.Sueldo)
FROM Trabaja t1
WHERE
t.Nombre_Empresa=t1.Nombre_Empresa)>(SELECT AVG(t2.Sueldo)
FROM Trabaja t2
WHERE
t2.Nombre_Empresa = 'Unicaja');

CREACION DE LAS TABLAS


1.
create table Profesor
(
P# char(8) NOT NULL,
Nombre_Profesor varchar(20) NOT NULL,
Categoria varchar(50) NOT NULL,
Facultad varchar(20) NOT NULL,
CONSTRAINT pk_P# PRIMARY KEY(P#)
);
create table Alumno
(
A# char(8) NOT NULL,
Nombre_Alumno varchar(20) NOT NULL,
Escuela varchar(20) NOT NULL,
constraint pk_A# primary key(A#));
create table Proyecto
(
T# char(8) NOT NULL,
Fecha_Inicio DATE NOT NULL,
Luiscorpin

Pgina 12

BASE DE DATOS - SQL

Fecha_Termino DATE NOT NULL,


Facultad varchar(20) NOT NULL,
CONSTRAINT R_relacion_fechas CHECK (Fecha_Inicio<Fecha_Termino),
CONSTRAINT pk_T# PRIMARY KEY(T#))
create table Equipo(
T# char(8),
A# char(8),
P# char(8),
constraint pk_T#_A_P primary key (T#,A#,P#),
constraint fk_T# foreign key (T#) references Proyecto(T#),
constraint fk_A# foreign key (A#) references Alumno(A#),
constraint fk_P# foreign key (P#) references Profesor(P#))
insert into PROFESOR values ('P1','Raul Quispe','A','Derecho');
insert into Profesor values ('P2','Luis Salazar','B','Sistemas');
insert into PROFESOR values ('P3','Fernando Colunga','C','Educacion');
insert into PROFESOR values ('P4','Jazmine Wrigth','B','Sistemas');
insert into PROFESOR values ('P5','Clemente Arias','A','Medicina');
insert into PROFESOR values ('P6','Beatriz Cueva','B','Sistemas');

insert into
insert into
insert into
insert into
insert into
insert into
insert into
insert into

ALUMNO values ('A1','Jorge Quispe','Software');


ALUMNO values ('A2','Maria Guzman','Derecho');
ALUMNO values ('A3','Ruth Huaroc','Derecho');
ALUMNO values ('A4','Jessica Ore','Educ. Fisica');
ALUMNO values ('A5','Luis Suarez','Ing. Electronica');
ALUMNO values ('A6','Maria Guzman','Educ. Primaria');
ALUMNO values ('A7','Brock Lesnar','Medicina');
ALUMNO values ('A8','Daniel Lisuratas','Ciencias Sociales');

insert into
insert into
insert into
insert into
insert into
insert into
insert into
insert into
insert into

PROYECTO values ('T1','03/04/10','15/05/10','Sistemas');


PROYECTO values ('T2','02/06/09','28/09/09','Sistemas');
PROYECTO values ('T3','05/05/12','13/08/12','Derecho');
PROYECTO values ('T4','01/07/14','05/12/14','Medicina');
PROYECTO values ('T5','05/04/15','15/07/15','Educacion');
PROYECTO values ('T6','11/12/13','09/03/14','Derecho');
PROYECTO values ('T7','05/04/09','16/08/09','Sistemas');
PROYECTO values ('T8','07/02/13','12/07/13','Quimica');
PROYECTO values ('T9','06/05/13','19/09/13','Quimica');

Luiscorpin

Pgina 13

BASE DE DATOS - SQL

insert into
insert into
insert into
insert into
insert into
insert into
insert into
insert into
insert into
insert into
insert into
insert into
insert into
insert into
insert into
insert into
insert into

EQUIPO values ('T1','A1','P2');


EQUIPO values ('T1','A2','P1');
EQUIPO values ('T2','A3','P4');
EQUIPO values ('T3','A5','P2');
EQUIPO values ('T4','A4','P5');
EQUIPO values ('T1','A3','P4');
EQUIPO values ('T5','A6','P6');
EQUIPO values ('T1','A6','P4');
EQUIPO values ('T3','A7','P4');
EQUIPO values ('T7','A3','P4');
EQUIPO values ('T7','A4','P4');
EQUIPO values ('T7','A4','P5');
EQUIPO values ('T1','A6','P1');
EQUIPO values ('T1','A8','P3');
EQUIPO values ('T8','A8','P6');
EQUIPO values ('T9','A8','P6');
EQUIPO values ('T8','A8','P3');

2. create table Empleado


(
Nombre_Empleado Varchar2(20) NOT NULL,
Calle Varchar2(20) NOT NULL,
Ciudad Varchar2(20) NOT NULL,
constraint pk_nombre_empleado primary key (Nombre_Empleado))
create table Trabaja
(
Nombre_Empleado Varchar2(20) NOT NULL,
Nombre_Empresa Varchar2(20) NOT NULL,
Sueldo
Number NOT NULL,
constraint pk_nombre_empleado1 primary key (Nombre_Empleado),
constraint fk_nombre_empleado foreign key (Nombre_Empleado) references
Empleado(Nombre_Empleado)
)
create table Empresa
(
Nombre_Empresa Varchar2(20) NOT NULL,
Ciudad Varchar2(20) NOT NULL,
constraint pk_nombre_empresa_ciudad primary key (Nombre_Empresa,Ciudad)
)
create table Jefe
(
Nombre_Empleado varchar2(20) NOT NULL,
Nombre_Jefe varchar2(20) NOT NULL,
Constraint pk_nombre_empleado2 primary key (Nombre_Empleado),
constraint fk_nombre_empleado4 foreign key (Nombre_Empleado) references
Empleado(Nombre_Empleado))
Luiscorpin

Pgina 14

BASE DE DATOS - SQL

insert into
insert into
insert into
insert into
insert into
insert into
insert into
insert into
insert into
insert into
insert into
insert into
insert into

Empleado values ('Luis Salazar','Benavides','Avila');


Empleado values ('Ruth Quispe','Monterrico','Avila');
Empleado values ('Tatiana Quintanilla','Benavides','Mostoles');
Empleado values ('Tiffany Rodas','Benavides','Lima');
Empleado values ('Artemio Ruiz','Cipreses','Villaconejos');
Empleado values ('Rosario Huaman','Pucara','Cuzco');
Empleado values ('Maritza Guzman','Pista Nueva','Villaconejos');
Empleado values ('Isabel Mendoza','Mantaro','Trujillo');
Empleado values ('Jhon Cena','Mantaro','Trujillo');
Empleado values ('Roman Reigns','Orlando','Florida');
Empleado values ('Seth Rollins','Michigan','California');
Empleado values ('Brock Lesnar','Minneapolis','Minnesota');
Empleado values ('Jeff Hardy','Surco','Lima');

insert into
insert into
insert into
insert into
insert into
insert into
insert into
insert into
insert into
insert into
insert into
insert into
insert into

Trabaja values ('Tiffany Rodas','Banco Banterra',15000);


Trabaja values ('Luis Salazar','Unicaja',30000);
Trabaja values ('Artemio Ruiz','Banco Banterra',20000);
Trabaja values ('Maritza Guzman','Unicaja',12000);
Trabaja values ('Ruth Quispe','Banco Banterra',22000);
Trabaja values ('Tatiana Quintanilla','Banco Banterra',16000);
Trabaja values ('Tiffany Rodas','Banco Banterra',15000);
Trabaja values ('Isabel Mendoza','Unicaja',25000);
Trabaja values ('Jhon Cena','Unicaja',27000);
Trabaja values ('Roman Reigns','Banco Azteca',30000);
Trabaja values ('Brock Lesnar','Banco de Comercio',40000);
Trabaja values ('Seth Rollins','Banco Azteca',27000);
Trabaja values ('Jeff Hardy','Banco de Credito',24000);

insert into
insert into
insert into
insert into
insert into
insert into
insert into
insert into
insert into
insert into
insert into
insert into
insert into
insert into
insert into

Empresa values ('Banco Banterra','Lima');


Empresa values ('Banco Banterra','Callao');
Empresa values ('Unicaja','Lima');
Empresa values ('Banco Banterra','Mostoles');
Empresa values ('Banco de Credito','Lima');
Empresa values ('Banco Azteca','Avila');
Empresa values ('Banco Azteca','Mostoles');
Empresa values ('Banco Azteca','Lima');
Empresa values ('Unicaja','Avila');
Empresa values ('Banco de Comercio','Avila');
Empresa values ('Banco de Comercio','Mostoles');
Empresa values ('Banco de Credito','Villaconejos');
Empresa values ('Banco de Comercio','Villaconejos');
Empresa values ('Banco Continental','Callao');
Empresa values ('Banco Financiero','Lima');

Luiscorpin

Pgina 15

BASE DE DATOS - SQL

insert into Empresa values ('Banco Financiero','Callao');


insert into Empresa values ('Banco Financiero','Mostoles');
insert into Empresa values ('Banco Financiero','Iquitos');
insert into
insert into
insert into
insert into

Luiscorpin

Jefe values ('Tiffany Rodas','Artemio Ruiz');


Jefe values ('Maritza Guzman','Luis Salazar');
Jefe values ('Ruth Quispe','Tatiana Quintanilla');
Jefe values ('Isabel Mendoza','Jhon Cena');

Pgina 16

También podría gustarte