Este documento presenta un taller sobre SQL para consultar una base de datos relacional diseñada para gestionar proyectos de investigación en una universidad. Se describen las tablas de la base de datos y se proponen 10 consultas en álgebra relacional y SQL.
1. TALLER – SQL
JULIAN ANDRES GALVEZ
UNIDAD CENTRAL DEL VALLE DEL CAUCA
FACULTAD DE INGENIERÍA
PROGRAMA INGENIERÍA DE SISTEMAS
TULUÁ, ABRIL 27 DE 2009
2. TALLER – SQL
JULIAN ANDRES GALVEZ
Presentado al ingeniero:
Edgar Sandoval
Ing. Sistemas
UNIDAD CENTRAL DEL VALLE DEL CAUCA
FACULTAD DE INGENIERÍA
PROGRAMA INGENIERÍA DE SISTEMAS
TULUÁ, ABRIL 27 DE 2009
3. TALLER - SQL
Un grupo de investigación de una universidad ha diseñado una base de datos (BD) para
la gestión de los proyectos de investigación en los que participa.
En esta tabla se almacenarán los distintos planes o programas a los que pueden
pertenecer los proyectos de investigación. Para cada plan se almacenará el código del
mismo, el nombre completo del plan, y la entidad que lo financia.
Por ejemplo, un plan podría ser el I+D+I, cuyo nombre completo es Plan Nacional de
Investigación Científica, Desarrollo e Innovación Tecnológica, cuya entidad
financiadora es el MCYT (Ministerio Ciencia y Tecnología).
En esta tabla se almacenarán los proyectos en los que participan los distintos
investigadores. Cada proyecto de investigación estará asociado a un plan. Tendremos el
código del proyecto, el código del plan al que pertenece dicho proyecto, el nombre
completo del proyecto, la fecha de inicio del mismo y la de finalización. Además se
almacenará en esta tabla el presupuesto concedido a cada proyecto.
4. En esta tabla se almacenará qué investigadores trabajan en qué proyectos. La clave
primaria estará formada por CÓDIGO_PROYECTO y DNI_INVESTIGADOR. Un
investigador una vez que abandona el proyecto no puede reincorporarse al mismo
proyecto posteriormente. También se indicará el periodo en el que un determinado
investigador trabaja en un proyecto de investigación por medio de los atributos
FECHA_INICIO y FECHA_FIN. El atributo TIPO_PARTICIPACION indicará el
papel que juega cada investigador en cada proyecto. Podrá tomar los siguientes valores:
investigador principal, investigador a tiempo completo, investigador a tiempo parcial,
becario FPI, etc.
En esta tabla se almacenarán los investigadores que participan en los distintos proyectos
de investigación. Se almacenará el DNI, el nombre, la ciudad en la que trabaja y su
teléfono de contacto.
A continuación, se muestra el grafo relacional de este BD para la gestión de proyectos
de investigación.
Sobre esta BD se pide que se realicen las siguientes consultas en álgebra relacional:
A continuación, se plantea una posible solución a las consultas que se plantean.
Naturalmente, pueden existir otras alternativas igualmente válidas, incluso en algunos
casos se muestran estas alternativas.
5. Q1: Nombre de los investigadores de Madrid y el nombre de los proyectos en los
que trabajan.
ALGEBRA RELACIONAL:
Π Nombre. Investigador, NomProyecto. Proyecto (σ (Ciudad. Investigador =
“Madrid”) and (DNIInvestigador. Asignado_A = DNIInvestigador. Investigador) and
(CodProyecto. Proyecto = CodProyecto. Asignado_A) (Investigador X Asignado_A X
Proyecto).
SQL:
SELECT investigador.nombre, proyecto.nomproyecto
FROM Investigador , Asignado_A , Proyecto
WHERE Investigador.Ciudad = „Madrid‟ AND Asignado_A.DNIInvestigador =
Investigador.DNIInvestigador AND Proyecto.CodProyecto = Asignado_A
.CodProyecto;
6. Q2: Nombre del investigador responsable y fecha de inicio del proyecto llamado
“NEPTUNO”.
ALGEBRA RELACIONAL:
Π Nombre. Investigador, FechaInicio. Proyecto, NomProyecto. Proyecto (σ
(NomProyecto. Proyecto = “Neptuno”) and (DNIInvestigador. Asignado_A =
DNIInvestigador. Investigador) and (CodProyecto. Proyecto = CodProyecto.
Asignado_A) (Investigador X Asignado_A X Proyecto).
SQL:
SELECT investigador.nombre, proyecto.fechainicio, proyecto.nombreproyecto
FROM Investigador , Asignado_A , Proyecto
WHERE Proyecto .NomProyecto.= „Neptuno‟ AND Asignado_A .DNIInvestigador =
Investigador .DNIInvestigador AND Proyecto.CodProyecto = Asignado_A.
CodProyecto;
Q3: Nombre de los proyectos en los que trabaja algún investigador de Soria.
ALGEBRA RELACIONAL:
Π NomProyecto. Proyecto (σ (Ciudad. Investigador = “Soria”) and (DNIInvestigador.
Asignado_A = DNIInvestigador. Investigador) and (CodProyecto. Proyecto =
CodProyecto. Asignado_A) (Investigador X Asignado_A X Proyecto).
SQL:
SELECT proyecto.nomproyecto
FROM Investigador , Asignado_A , Proyecto
WHERE Investigador .Ciudad = „Soria‟ AND Asignado_A.DNIInvestigador =
Investigador. DNIInvestigador AND Proyecto.CodProyecto = Asignado_A
.CodProyecto;
7. Q4: Nombre y teléfono de los investigadores principales que trabajen en proyectos
cuyo presupuesto sea inferior a 5000 EUR.
ALGEBRA RELACIONAL:
Π NomInvestigador. Investigador, Telefono. Investigador (σ (Presupuesto. Proyecto <
5000) and (DNIInvestigador. Asignado_A = DNIInvestigador. Investigador) and
(CodProyecto. Proyecto = CodProyecto. Asignado_A) (Investigador X Asignado_A X
Proyecto).
SQL:
SELECT Investigador. NomInvestigador, Investigador .Telefono
FROM Investigador , Asignado_A , Proyecto
WHERE Proyecto .Presupuesto < 5000 AND Asignado_A.DNIInvestigador =
Investigador. DNIInvestigador AND Proyecto.CodProyecto = Asignado_A
.CodProyecto;
Q5: Nombre de los proyectos que hayan comenzado este año y que pertenezcan al
plan, cuyo código sea “PEUR”.
ALGEBRA RELACIONAL:
Π NomProyecto. Proyecto (σ (FechaInicio. Proyecto = 2009) and (CodPlan. Plan =
“PEUR”) and (CodPlan. Plan = CodPlan. Proyecto) (Proyecto X Plan).
SQL:
SELECT proyecto.nomproyecto
FROM Proyecto, Plan
WHERE Proyecto.FechaInicio = 2009 AND Plan .CodPlan = “PEUR” AND
Plan.CodPlan = Proyecto.CodPlan;
8. Q6: Nombre de los investigadores principales de los proyectos cuya entidad
financiadora sea la “CICYT”.
ALGEBRA RELACIONAL:
Π NomInvestigador. Investigador (σ (EntFinanciera. Plan = “CICYT”) and
(DNIInvestigador. Asignado_A = DNIInvestigador. Investigador) and (CodProyecto.
Proyecto = CodProyecto. Asignado_A) and (CodPlan. Proyecto = CodPlan. Plan)
(Investigador X Asignado_A X Proyecto X Plan).
SQL:
SELECT Investigador.NomInvestigador
FROM Investigador, Asignado_A, Proyecto, Plan
WHERE Plan.EntFinanciera = „CICYT‟ AND Asignado_A.DNIInvestigador =
Investigador. DNIInvestigador AND Proyecto.CodProyecto = Asignado_A
.CodProyecto AND Proyecto.CodPlan = Plan.CodPlan;
Q7: Nombre de los planes a los que pertenecen los proyectos con un presupuesto
superior a 10000 EUR pero que cuyo investigador principal no sea ni de Madrid ni
de Barcelona.
ALGEBRA RELACIONAL:
Π NomPlan. Plan (σ (Presupuesto. Proyecto > 10000) and (Ciudad. Investigador =
¬”Madrid”) and (Ciudad. Investigador = ¬”Barcelona”) and (DNIInvestigador.
Asignado_A = DNIInvestigador. Investigador) and (CodProyecto. Proyecto =
CodProyecto. Asignado_A) and (CodPlan. Proyecto = CodPlan. Plan) (Investigador X
Asignado_A X Proyecto X Plan).
SQL:
SELECT plan.nomplan
FROM Investigador, Asignado_A, Proyecto, Plan
WHERE Proyecto.Presupuesto > 10000 AND Investigador.Ciudad = ¬‟Madrid‟ AND
Investigador.Ciudad = ¬‟Barcelona‟ AND Asignado_A.DNIInvestigador =
Investigador. DNIInvestigador AND Proyecto.CodProyecto = Asignado_A
.CodProyecto AND Proyecto.CodPlan = Plan.CodPlan;
9. Q8: Nombre de aquellos investigadores que trabajan en todos los proyectos de
investigación.
ALGEBRA RELACIONAL:
Π NomInvestigador. Investigador, NomProyecto. Proyecto (DNIInvestigador.
Asignado_A = DNIInvestigador. Investigador) and (CodProyecto. Proyecto =
CodProyecto. Asignado_A) (Investigador X Asignado_A X Proyecto).
SQL:
SELECT Investigador.NomInvestigador, Proyecto.NomProyecto
FROM Investigador, Asignado_A, Proyecto
WHERE Asignado_A.DNIInvestigador = Investigador. DNIInvestigador AND
Proyecto.CodProyecto = Asignado_A .CodProyecto;
Q9: Obtener el nombre de los proyectos cuyo investigador principal es de La
Coruña y que tienen un presupuesto concedido superior a todos los proyectos
financiados por el plan quot;CICYTquot;.
Π NomProyecto. Proyecto (σ (Ciudad. Investigador = “Coruña”) and (Presupuesto.
Proyecto > (Presupuesto. Proyecto = “CICYT”)) and (DNIInvestigador. Asignado_A =
DNIInvestigador. Investigador) and (CodProyecto. Proyecto = CodProyecto.
Asignado_A) and (CodPlan. Proyecto = CodPlan. Plan) (Investigador X Asignado_A X
Proyecto X Plan).
Q10: Obtener el nombre de los investigadores que participan en proyectos que
tienen un presupuesto superior o igual al proyecto con nombre quot;FOLREquot;.
Π NomInvestigador. Investigador (σ (Presupuesto. Proyecto > = (Presupuesto.
Proyecto = “FOLRE”)) and (DNIInvestigador. Asignado_A = DNIInvestigador.
Investigador) and (CodProyecto. Proyecto = CodProyecto. Asignado_A) and (CodPlan.
Proyecto = CodPlan. Plan) (Investigador X Asignado_A X Proyecto X Plan).