Sei sulla pagina 1di 5

ESCUELA SUPERIOR POLITCNICA DEL LITORAL FACULTAD DE INGENIERA EN ELECTRICIDAD Y COMPUTACIN DEBER #3: SQL FIEC05553: SISTEMAS DE BASES

DE DATOS I Entrega: Martes 24 de julio, 2012


Introduccin La tarea usar una base de datos que contiene informacin acerca de una universidad. Las relaciones estn en una base de datos en Oracle para la cual les proporcionar el cdigo para su creacin y los datos de la misma. El esquema de la base de datos se muestra a continuacin: (las llaves estn en negritas, los tipos de datos se han omitido pero se pueden identificar en el archivo que crear la base de datos): estudiante(eid, enombre, sexo, edad, prom) dept(dnombre, numphds) prof(pnombre, dnombre) curso(cno, cnombre, dnombre) carrera(dnombre, eid) seccion(dnombre, cno, seccno, pnombre) registra(eid, nota, dnombre, cno, seccno)

Antes de escribir SQL, es una buena idea analizar la base de datos y familiarizarse con su contenido. Conectarse a la base de datos 1. Adjunta a la tarea se encuentra un archivo txt con el esquema y los datos de la base de datos. 2. Al correr la consola de comandos sql se copia y pega el esquema para que se creen las tablas y se introduzcan los datos. 3. Una vez creada la base de datos se pueden mostrar todas las tablas con: select * from user_objects where object_type = 'TABLE'; 4. Para conocer el esquema de una relacin en particular se puede usar: describe nombre_de_relacion; 5. Conocimientos bsicos de Oracle: Cada comando puede ser de mltiples lneas y solo se ejecuta cuando termina con ; Por ejemplo: Select * from estudiante; Algunas Reglas En esta tarea, solo se trabajar con la parte de queries de SQL. NO est permitido cambiar el contenido de la base de datos, ej., CREATE, INSERT, DELETE, ALTER, UPDATE etc. Por favor siga esta regla ya que a cualquier violacin de esta poltica se le otorgara la calificacin de 0. Sin embargo; sintase libre de generar cualquier query SQL, aun as no estn relacionados con las preguntas de esta tarea.

Queries Escriba queries SQL que respondan las siguientes preguntas (un query por pregunta) y crralos en Oracle. Las respuestas de queries no deben contener duplicados, pero solo se debe usar distinct cuando sea necesario. Para esta tarea, la creacin de tablas temporales NO est permitida, ej., para cada pregunta solo debe escribir exactamente un query SQL (posiblemente usando subqueries SQL). Note que es posible que la respuesta a algunos de ellos sea vaca. Preguntas Escriba los siguientes SQL queries: 1. Cul es la edad del estudiante ms viejo? select max(edad) from Estudiante

2. Encuentre los nombres y promedios de los estudiantes que se registraron en 333. select enombre, prom, cno from Estudiante E, Registra R where E.eid=R.eid and R.cno=333

3. Encuentre los nombres y carreras de los estudiantes que estn tomando uno de los cursos de Sistemas Operativos. select Distinct(E.enombre), C.dnombre from Estudiante E, Carrera C, Registra R, Curso Cu where E.eid=R.eid and Cu.cnombre='Sistemas Operativos'

4. Encuentre los nombres de los estudiantes que estn registrados en un curso de ambos departamentos "Computacion" y "Matematicas". select distinct(enombre) from estudiante e, registra r where e.eid = r.eid and dnombre like 'Com_%' intersect select distinct(enombre) from estudiante e, registra r where e.eid = r.eid and dnombre like 'Mat_%'

5. Para cada departamento, encuentre la edad promedio de los estudiantes con carrera en ese departamento as como la diferencia de edad entre el estudiante ms viejo y el ms joven. select dnombre ,avg (edad), max(edad)-min(edad) from estudiante e, carrera c where e.eid= c.eid group by dnombre

6. Encuentre los nombres de los estudiantes que reciben clases del profesor " Jennifer Waters". Select Distinct enombre from prof p, registra r, estudiante e where pnombre = 'Jennifer Waters' AND p.dnombre = r.dnombre AND r.eid = e.eid

7. Cuntos estudiantes tienen ms de una carrera? (pista: requiere un subquery)


Select count(eid) from (select r.eid from registra r group by r.eid having count(distinct r.dnombre) > 1 )

8. Encuentre el nombre(s) de los estudiantes ms viejos. (pista: requiere un subquery) Select enombre from estudiante where edad IN (select MAX(edad) from estudiante)

9. Retorne los ids, nombres, y promedios de los estudiantes que actualmente toman todos los cursos de Musica. (Pista: puede usar EXCEPT o NOT EXISTS). Select e.eid, e.enombre, e.prom from estudiante e where NOT EXISTS ( Select c.cno from curso c where c.dnombre LIKE 'Musica' AND NOT EXISTS ( Select r.cno from registra r where r.eid = e.eid AND r.cno=c.cno))

10. Para esos departamentos que no tienen carreras dictando un curso de "Computacion", imprimir el nombre del departamento y el nmero de los estudiantes PhD en el departamento. Select * from depta Minus Select * from depta where dnombre = 'Computacion'

Potrebbero piacerti anche