You are on page 1of 12

EjerciciosRESUELTOSdeSQL

Ejercicio 1: Definicin de la estructura de la base de datos.


Utilizando SQL, crear las tablas correspondientes al siguiente esquema de base de datos relacional relativo a la gestin un instituto de formacin profesional. Las tablas son (se indican entre parntesis los tipos de datos): ALUMNOS (dni# (12 caracteres), nombre (40 caracteres), apellido1 (40 caracteres), apellido2 (40 caracteres), domicilio (100 caracteres), telfono (15 caracteres), fecha_nac (fecha/hora), nombre_padre (50 caracteres), nombre_madre (50 caracteres) ) ESPECIALIDADES (cdigo# (3 caracteres), denominacin (30 caracteres) ) PROFESORES (dni# (12 caracteres), nombre (25 caracteres), apellido1 (25 caracteres), apellido2 (25 caracteres), cod_especialidad (3 caracteres) ) MDULOS (cdigo# (5 caracteres), nombre (40 caracteres), curso (nmero entero), cod_especialidad (3 caracteres) ) GRUPOS (cdigo# (6 caracteres), curso (nmero entero), cod_ciclo (3 caracteres), letra (1 carcter)) CICLOS (cdigo# (3 caracteres), denominacin (80 caracteres) ) MATRCULAS (dni_alumno# (12 caracteres), cod_mdulo# (5 caracteres) ) DOCENCIA (cod_grupo# (6 caracteres), cod_mdulo# (5 caracteres), da# (1 carcter), hora_inicio# (fecha/hora), hora_fin (fecha/hora), dni_profesor (12 caracteres) ) Las claves ajenas son: asignaturas.cod_especialidad especialidades matrculas.dni_alumno alumnos matrculas.cod_asignatura asignaturas profesores.cod_especialidad especialidades grupos.cod_ciclo ciclos docencia.cod_grupo grupos docencia.cod_mdulo mdulos Se pide escribir las sentencias SQL necesarias para: a) Crear las tablas. Las claves primarias y ajenas deben crearse como restricciones (constraints) para luego poder hacer modificaciones sin necesidad de crear la tabla de nuevo. Todos los campos que contengan el nombre (o denominacin) y los apellidos (de personas, departamentos, reas, etc.) son obligatorios. Activaremos el borrado en cascada, pero no la modificacin en cascada.
CREATE TABLE Alumnos ( dni VARCHAR(12) NOT NULL UNIQUE, nombre VARCHAR(40) NOT NULL, apellido1 VARCHAR(40) NOT NULL, apellido2 VARCHAR(40) NOT NULL, domicilio VARCHAR(100), telefono VARCHAR(15), fecha_nac DATE, nombre_padre VARCHAR(50), nombre_madre VARCHAR(50), CONSTRAINT alumno_pk

1 DAW BD Ejercicios resueltos de SQL

PRIMARY KEY (dni) ); CREATE TABLE Especialidades ( codigo VARCHAR(3) NOT NULL UNIQUE, denominacion VARCHAR(30) NOT NULL, CONSTRAINT especialidades_pk PRIMARY KEY (codigo) ); CREATE TABLE Profesores ( dni VARCHAR(12) NOT NULL UNIQUE, nombre VARCHAR(25) NOT NULL, apellido1 VARCHAR(25) NOT NULL, apellido2 VARCHAR(25) NOT NULL, cod_especialidad VARCHAR(3) NOT NULL, CONSTRAINT profesores_pk PRIMARY KEY (dni), CONSTRAINT profesores_fk FOREIGN KEY (cod_especialidad) REFERENCES Especialidades(codigo) ); CREATE TABLE Modulos ( codigo VARCHAR(5) NOT NULL UNIQUE, nombre VARCHAR(40) NOT NULL, curso INTEGER, cod_especialidad VARCHAR(3) NOT NULL, CONSTRAINT modulos_pk PRIMARY KEY (codigo), CONSTRAINT modulos_fk FOREIGN KEY (cod_especialidad) REFERENCES Especialidades(codigo) ); CREATE TABLE Grupos ( codigo VARCHAR(6) NOT NULL UNIQUE, curso INTEGER, cod_ciclo VARCHAR(3) NOT NULL, letra VARCHAR(1), CONSTRAINT grupos_pk PRIMARY KEY (codigo), CONSTRAINT grupos_fk FOREIGN KEY (cod_ciclo) REFERENCES Ciclos(codigo) ); CREATE TABLE Ciclos (
1 DAW BD Ejercicios resueltos de SQL 2

codigo VARCHAR(3) NOT NULL UNIQUE, denominacion VARCHAR(80) NOT NULL, CONSTRAINT ciclos_pk PRIMARY KEY (codigo) ); CREATE TABLE Matriculas ( dni_alumno VARCHAR(12) NOT NULL, cod_modulo VARCHAR(5) NOT NULL, CONSTRAINT matriculas_pk PRIMARY KEY (dni_alumno, cod_modulo) CONSTRAINT matriculas_fk1 FOREIGN KEY (dni_alumno) REFERENCES Alumnos(dni), CONSTRAINT matriculas_fk2 FOREIGN KEY (cod_modulo) REFERENCES Modulos(codigo) ); CREATE TABLE Docencia ( cod_grupo VARCHAR(6) NOT NULL, cod_modulo VARCHAR(5) NOT NULL, dia VARCHAR(1) NOT NULL, hora_inicio TIME NOT NULL, hora_fin TIME NOT NULL, dni_profesor VARCHAR(12) NOT NULL, CONSTRAINT docencia_pk PRIMARY KEY (cod_grupo, cod_modulo, dia), CONSTRAINT docencia_fk1 FOREIGN KEY (cod_grupo) REFERENCES Grupos(codigo), CONSTRAINT docencia_fk2 FOREIGN KEY (cod_modulo) REFERENCES Modulos(codigo) );

a)

Agregar a la tabla GRUPOS el campo "observaciones" de 100 caracteres (que sea obligatorio)

ALTER TABLE Grupos ADD observaciones VARCHAR(100) NOT NULL;

b) Agregar a la tabla MDULOS el campo "horas_semanales", de tipo nmero real con un decimal. Se le asignar por defecto el valor 8, aadiendo la restriccin de que no se pueda introducir un valor negativo (ni tampoco cero).
ALTER TABLE Modulos ADD horas_semanales DECIMAL(3,1); ALTER TABLE Modulos ADD CONSTRAINT comprobar_horas CHECK (horas_semanales > 0.0);

1 DAW BD Ejercicios resueltos de SQL

c) Aadir la clave ajena docencia.dni_profesor profesores


ALTER TABLE Docencia ADD CONSTRAINT docencia_fk3 FOREIGN KEY (dni_profesor) REFERENCES Profesores(dni);

d) Cambiar la definicin de la restriccin de clave primaria de la tabla ESPECIALIDADES para asignarle el nombre espec_cl_primaria.
El SGBD nos impedir eliminar la clave primaria de Especialidades porque es, a su vez, clave ajena en las tablas de Profesores y de Mdulos. Primero tendremos que eliminar esas claves ajenas, y slo entonces podremos eliminar la clave primaria de Especialidades: ALTER TABLE Profesores DROP CONSTRAINT profesores_fk; ALTER TABLE Modulos DROP CONSTRAINT modulos_fk; ALTER TABLE Especialidades DROP CONSTRAINT especialidades_pk; Despus, volvemos a crear la clave primaria de Especialidades (con el nuevo nombre de la restriccin) y, a continuacin, reconstruirmos las claves ajenas de Profesores y de Mdulos. ALTER TABLE Especialidades ADD CONSTRAINT espec_cl_primaria PRIMARY KEY (codigo); ALTER TABLE Profesores ADD CONSTRAINT profesores_fk FOREIGN KEY (cod_especialidad) REFERENCES Especialidades(codigo); ALTER TABLE Modulos ADD CONSTRAINT modulos_fk FOREIGN KEY (cod_especialidad) REFERENCES Especialidades(codigo)

e)

Aadir la restriccin de que en DOCENCIA el campo da slo pueda tomar los valores 'L', 'M', 'X', 'J' y 'V'.

ALTER TABLE Docencia ADD CONSTRAINT comprobar_dia CHECK (dia IN ('L', 'M', 'X', 'J' y 'V') );

f)

Desactivar la restriccin NOT NULL en el campo "denominacin" de la tabla ESPECIALIDADES.

ALTER TABLE Especialidades DROP denominacion; ALTER TABLE Especialidades ADD denominacion VARCHAR(30);
1 DAW BD Ejercicios resueltos de SQL 4

Atencin! Esta solucin es destructiva: si la tabla contena datos, se habrn perdido todas las denominaciones. Pero con el SQL que sabemos no podemos hacerlo de otra manera.

Ejercicio 2: Manipulacin de datos.


a) Escribir las sentencias SQL para INSERTAR los siguientes datos en las tablas:
(No se muestran todos los INSERT, slo los dos primeros de cada tabla) INSERT INTO Alumnos (dni, nombre, apellido1, apellido2, fecha_nac) VALUES ('1111A', 'Eva', 'Rodrguez', 'Prez', '11/8/1990'); INSERT INTO Alumnos (dni, nombre, apellido1, apellido2, fecha_nac) VALUES ('2222A', 'Juan', 'Adn', 'Lpez', '1/5/1991'); ... INSERT INTO Profesores (dni, nombre, apellido1, apellido2, cod_especialidad) VALUES ('7777A', 'Petronilo', 'Prez', 'Prez', 'TST'); INSERT INTO Profesores (dni, nombre, apellido1, apellido2, cod_especialidad) VALUES ('8888B', 'Hermenegilda', 'Snchez', 'Snchez', 'TSI'); ... INSERT INTO Modulos (codigo, nombre, curso, cod_especialidad) VALUES ('PLE', 'Programacin en Lenguajes Estructurados', 1, 'INF'); INSERT INTO Modulos (codigo, nombre, curso, cod_especialidad) VALUES ('RAL', 'Redes de rea Local', 1, 'TST'); ... INSERT INTO Especialidades (codigo, denominacion) VALUES ('INF', 'Informtica'); INSERT INTO Especialidades (codigo, denominacion) VALUES ('TSI', 'Tcnico en Sistemas Informticos'); ... INSERT INTO Grupos VALUES ('1DAIA', 1, 'DAI', 'A'); INSERT INTO Grupos VALUES ('1ASIA', 1, 'ASI', 'A'); (observa que no se han indicado los campos: se supone que se insertan todos, y en el mismo orden en el que se definieron al hacer el CREATE TABLE) ... INSERT INTO Ciclos VALUES ('ASI', 'Administracin de Sistemas Informticos'); INSERT INTO Ciclos VALUES ('DAI', 'Desarrollo de Aplicaciones Informticas'); ... INSERT INTO Matriculas VALUES ('1111A', 'PLE'); INSERT INTO Matriculas VALUES ('1111A', 'SIMR'); ... INSERT INTO Docencia VALUES ('1DAIA', 'SIMR', 'L', '8:30', '11:30', '9999C'); INSERT INTO Docencia

1 DAW BD Ejercicios resueltos de SQL

VALUES ('1DAIA', 'SIMR', 'X', '8:30', '10:30', '9999C'); ...

b) Escribir las sentencias SQL para MODIFICAR los siguientes datos en las tablas: i. En MATRCULAS, el registro (5555E, SOMM) debe quedar (5555E, SIMR)
UPDATE Matriculas SET cod_modulo = 'SIMR' WHERE cod_modulo = 'SOMM' AND dni_alumno = '5555E';

ii.

En MDULOS, la descripcin de P4GL est mal: en lugar de Programacin en Entornos de Cuarta Generacin, debe decir Programacin en Lenguajes de Cuarta Generacin

UPDATE Modulos SET nombre = 'Programacin en Lenguajes de Cuarta Generacin' WHERE codigo = 'P4GL';

iii. En DOCENCIA, todas las clases impartidas por el profesor 7777A deben cambiarse al profesor 0000D.
UPDATE Docencia SET dni_profesor = '0000D' WHERE dni_profesor = '7777A';

iv. En DOCENCIA, la clase de los lunes, del mdulo SIMR, impartida por el profesor 9999C al grupo 1 DAI A, cambia su horario, que pasa a ser los martes de 12:00 a 15:00 horas.
UPDATE Docencia SET dia = 'M', hora_inicio = '12:00', hora_fin = '15:00' WHERE cod_modulo = 'SIMR' AND dia = 'L' AND dni_profesor = '9999C';

v.

En ALUMNOS, los campos nombre_padre y nombre_madre de todos los alumnos mayores de edad son indiferentes, as que deben ponerse a NULL en caso de que tuvieran asignado algn otro valor.

UPDATE Alumnos SET nombre_padre = NULL, nombre_madre = NULL WHERE fecha_nac < [fecha de hoy 18 aos]

vi. En la tabla CICLOS se debe aadir un nuevo campo llamado Familia_Profesional, de tipo cadena de 50 caracteres. Luego, escribe la sentencia SQL necesaria para actualizar todos los registros de la tabla poniendo el valor Informtica en el nuevo campo.
ALTER TABLE Ciclos ADD familia_prof VARCHAR(50);

1 DAW BD Ejercicios resueltos de SQL

UPDATE Ciclos SET familia_prof = 'Informtica';

c)

Escribir las sentencias SQL para ELIMINAR los siguientes datos de las tablas: i. En MATRCULAS, el registro (4444D, PLE) es un error y no debera existir (ese alumno no est matriculado de ese mdulo)

DELETE FROM Matriculas WHERE dni_alumno = '4444D' AND cod_modulo = 'PLE';

ii.

En la nueva Formacin Profesional ya no existe el curso 3, de modo que todos los mdulos correspondientes a ese curso deben eliminarse de la tabla de MDULOS.

DELETE FROM Modulos WHERE curso = 3;

iii. El profesor 7777A se ha jubilado. Hay que eliminarlo de la tabla de PROFESORES.


DELETE FROM Profesores WHERE dni = '7777A';

iv. Intenta tambin borrar de la tabla de profesores al profesor 9999C. El borrado se hace efectivo? Por qu?
DELETE FROM Profesores WHERE dni = '9999C'; Esta instruccin falla porque el profesor 9999C tiene registros asociados en la tabla de Docencia, donde el dni del profesor es clave ajena. Borrarlo de la tabla de Profesores violara la integridad referencial.

v.

Modifica la tabla DOCENCIA para que la clave ajena cod_profesor tenga activada la eliminacin en cascada. Ahora, vuelva a intentar la eliminacin del profesor 9999C de la tabla de PROFESORES. Comprueba el efecto que el borrado ha tenido sobre las dos tablas. Por ltimo, vuelve a insertar al profesor 9999C y docencia, porque los necesitaremos en el prximo ejercicio.

Hay que eliminar la clave ajena que actualmente relaciona Docencia con Profesores y volver a crearla, activndole el borrado en cascada: ALTER TABLE Docencia DROP CONSTRAINT docencia_fk3; ALTER TABLE Docencia ADD CONSTRAINT docencia_fk3 FOREIGN KEY (dni_profesor) REFERENCES Profesores(dni) ON DELETE CASCADE; Ahora podemos ejecutar el DELETE, que debera borrar el registro de la tabla Profesores y, adems, todos los registros relacionados de la tabla Docencia: DELETE FROM Profesores

1 DAW BD Ejercicios resueltos de SQL

WHERE dni = '9999C';

Ejercicio 3: Consultas.
a) Consultas sobre una sola tabla. i. Obtener el listado de alumnos (apellidos, nombre y direccin) ordenado alfabticamente por apellidos y nombre.
SELECT apellido1, apellido2, nombre, domicilio FROM Alumnos ORDER BY apellido1, apellido2, nombre;

ii.

Obtener el listado de alumnos que tienen Prez como primer o segundo apellido.

SELECT apellido1, apellido2, nombre, domicilio FROM Alumnos WHERE apellido1 = 'Prez' OR apellido2 = 'Prez'

iii. Obtener el listado de alumnos cuyo primer o segundo apellido comienza por la letra P
SELECT apellido1, apellido2, nombre, domicilio FROM Alumnos WHERE apellido1 LIKE 'P_' OR apellido2 LIKE 'P_'

iv. Obtener el listado de alumnos mayores de edad.


SELECT apellido1, apellido2, nombre, domicilio FROM Alumnos WHERE fecha_nac < [fecha de hoy 18 aos];

b) Consultas sobre varias tablas i. Profesores (nombre y apellidos) junto con la denominacin de la especialidad a la que pertenecen.
SELECT Profesores.nombre, apellido1, apellido2, Especialidades.denominacion FROM Profesores, Especialidades WHERE Profesores.cod_especialidad = Especialidades.codigo;

ii.

Alumnos (nombre y apellidos) junto con el nombre de las asignaturas en las que estn matriculados. Ordenar por apellidos.

SELECT Alumnos.nombre, apellido1, apellido2, Modulos.nombre FROM Alumnos, Modulos, Matriculas WHERE Alumnos.dni = Matriculas.dni_alumno AND Matriculas.cod_modulo = Modulos.codigo ORDER BY apellido1, apellido2, Alumnos.nombre;

iii. Grupos de clase que existen (curso y letra), denominacin del ciclo al que pertenecen y nombre de las asignaturas que se dan en cada uno de ellos.

1 DAW BD Ejercicios resueltos de SQL

SELECT DISTINCT Grupos.curso, Grupos.letra, Ciclos.denominacion, Modulos.nombre FROM Grupos, Modulos, Ciclos, Docencia WHERE Grupos.cod_ciclo = Ciclos.codigo AND Grupos.codigo = Docencia.cod_grupo AND Docencia.cod_modulo = Modulos.codigo; (Si no usamos la clausula DISTINCT aparecern registros repetidos, ya que en la tabla de Docencia cada mdulo figura varias veces, una por cada da de la semana en el que hay clase de ese mdulo)

iv. Alumnos (nombre y apellidos) junto con el grupo (curso, nivel y letra) al que pertenecen.
SELECT DISTINCT Alumnos.nombre, apellido1, apellido2, Grupos.curso, letra, Grupos.codigo

FROM Alumnos, Matriculas, Modulos, Docencia, Grupos WHERE Alumnos.dni = Matriculas.dni_alumno AND Matriculas.cod_modulo = Modulos.codigo AND Docencia.cod_modulo = Modulos.codigo AND Docencia.cod_grupo = Grupos.codigo; (Ocurrir algo parecido: si no usamos DISTINCT, aparecer cada alumno varias veces, una por cada entrada que cada mdulo tenga en la tabla Docencia)

v.

Horario del grupo 1 DAI A. La informacin que debe aparecer es: das, horas, nombre de los mdulos y profesor que los imparte.

SELECT dia, hora_inicio, hora_fin, Profesores.nombre, Profesores.apellido1, Modulos.nombre FROM Docencia, Modulos, Profesores WHERE Docencia.dni_profesor = Profesores.dni AND Docencia.cod_modulo = Modulos.codigo AND Docencia.cod_grupo = '1DAIA';

vi. Alumnos (nombre y apellidos) que estn matriculados en la asignatura Programacin en Lenguajes Estructurados y no estn matriculados en Sistemas Operativos Multiusuario y en Red
SELECT Alumnos.nombre, apellido1, apellido2 FROM Alumnos, Matriculas WHERE Matriculas.dni_alumno = Alumnos.dni AND Matriculas.cod_modulo = 'PLE' AND Alumnos.dni NOT IN (SELECT Alumnos.dni FROM Alumnos, Matriculas WHERE Matriculas.dni_alumno = Alumnos.dni AND Matriculas.cod_modulo = 'SIMR' );

vii. Profesores (nombre y apellidos) que dan clase a la vez en los ciclos de Desarrollo de Aplicaciones Informticas y de Administracin de Sistemas Informticos
(SELECT nombre, apellido1, apellido2 FROM Profesores, Docencia, Grupos

1 DAW BD Ejercicios resueltos de SQL

WHERE Profesores.dni = Docencia.dni_profesor AND Docencia.cod_grupo = Grupos.codigo AND Grupos.cod_ciclo = 'DAI') INTERSECT (SELECT nombre, apellido1, apellido2 FROM Profesores, Docencia, Grupos WHERE Profesores.dni = Docencia.dni_profesor AND Docencia.cod_grupo = Grupos.codigo AND Grupos.cod_ciclo = 'ASI'); Si la orden INTERSECT no es aceptada por el SGBD, se puede usar la definicin del operador interseccin: recuerda que A B = A (A B), siendo A y B dos tablas cualesquiera con el mismo nmero de campos. Tambin se puede intentar con esta otra consulta equivalente (lo importante es tener recursos suficientes para atacar el problema por todos los flancos posibles): SELECT nombre, apellido1, apellido2 FROM Profesores, Docencia, Grupos WHERE Profesores.dni = Docencia.dni_profesor AND Docencia.cod_grupo = Grupos.codigo AND Grupos.cod_ciclo = 'DAI' AND Profesores.dni IN (SELECT Profesores.dni FROM Profesores, Docencia, Grupos WHERE Profesores.dni = Docencia.dni_profesor AND Docencia.cod_grupo = Grupos.codigo AND Grupos.cod_ciclo = 'ASI');

viii. Alumnos (nombre y apellidos) que estn matriculados en asignaturas que pertenecen a ms de un grupo diferente (por ejemplo, alumnos de 2 curso que tienen alguna pendiente de primero).
SELECT Alumnos.nombre, apellido1, apellido2 FROM Alumnos, Asignaturas, Docencia, Grupos WHERE Alumnos.dni = Asignaturas.dni_alumno AND Asignaturas.cod_modulo = Docencia.cod_modulo AND Docencia.cod_grupo = Grupos.codigo AND Grupos.curso = 1 INTERSECT SELECT Alumnos.nombre, apellido1, apellido2 FROM Alumnos, Asignaturas, Docencia, Grupos WHERE Alumnos.dni = Asignaturas.dni_alumno AND Asignaturas.cod_modulo = Docencia.cod_modulo AND Docencia.cod_grupo = Grupos.codigo AND Grupos.curso = 2 Si INTERSECT nos da problemas podemos optar por una solucin parecida a la del ejercicio anterior. De todas formas, esta solucin no es del todo satisfactoria porque slo busca los alumnos que estn a la vez matriculados en 1 y 2, y el enunciado era ms general, porque nos peda buscar a alumnos que estuvieran matriculados en mdulos de dos grupos diferentes, fueran los que fueran.

1 DAW BD Ejercicios resueltos de SQL

10

La siguiente es una solucin ms general que hace uso del operador avanzado EXISTS y de los alias de tablas. Observa con atencin como se usan: SELECT DISTINCT AL1.nombre, apellido1, apellido2 FROM Alumnos AS AL1, Matriculas, Modulos, Docencia, Grupos AS GR1 WHERE AL1.dni = Matriculas.dni_alumno AND Matriculas.cod_modulo = Docencia.cod_modulo AND Docencia.cod_grupo = GR1.codigo AND EXISTS (SELECT dni FROM Alumnos AS AL2, Matriculas, Docencia, Grupos AS GR2 WHERE AL2.dni = Matriculas.dni_alumno AND Matriculas.cod_modulo = Docencia.cod_modulo AND Docencia.cod_grupo = GR2.codigo AND AL1.dni = AL2.dni AND GR1.codigo <> GR2.codigo);

c)

Consultas con funciones i. Contar el nmero de alumnos totales que hay en el Instituto.

SELECT COUNT(dni) FROM Alumnos; Tambin vale as: SELECT COUNT(*) FROM Alumnos;

ii.

Contar el nmero de profesores que pertenecen a la especialidad de Informtica

SELECT COUNT(*) FROM Profesores WHERE cod_especialidad = 'INF';

iii. Contar el nmero de alumnos matriculados en Programacin en Lenguajes Estructurados


SELECT COUNT(*) FROM Alumnos, Matriculas WHERE Alumnos.dni = Matriculas.dni_alumno AND cod_modulo = 'PLE';

iv. Contar el nmero de alumnos que pertenecen al grupo 1 DAI A


SELECT COUNT(*) FROM Alumnos WHERE dni IN (SELECT DISTINCT dni FROM Alumnos, Matriculas, Modulos, Docencia WHERE Alumnos.dni = Matriculas.dni_alumno AND Matriculas.cod_modulo = Modulos.codigo AND Docencia.cod_modulo = Matriculas.cod_modulo AND Docencia.cod_grupo = '1DAIA');

1 DAW BD Ejercicios resueltos de SQL

11

La subconsulta nos devuelve la lista de DNI de los alumnos del grupo 1 DAI A. Debemos usar DISTINCT para que no aparezcan registros repetidos (por las mltiples apariciones de los cdigos de grupo en Docencia). Como no se puede hacer un COUNT en un SELECT al que se le ha aplicado DISTINCT, usamos una subconsulta.

v.

Calcular la edad media de los alumnos del grupo 1 DAI A

SELECT AVG([fecha-de-hoy] - fecha_nac) FROM Alumnos WHERE dni IN (SELECT DISTINCT dni FROM Alumnos, Matriculas, Modulos, Docencia WHERE Alumnos.dni = Matriculas.dni_alumno AND Matriculas.cod_modulo = Modulos.codigo AND Docencia.cod_modulo = Matriculas.cod_modulo AND Docencia.cod_grupo = '1DAIA');

vi. Sumar la edad de los alumnos que estn matriculados en el ciclo de Desarrollo de Aplicaciones Informticas
SELECT ADD([fecha-de-hoy] - fecha_nac) FROM Alumnos WHERE dni IN (SELECT DISTINCT dni FROM Alumnos, Matriculas, Modulos, Docencia, Grupos WHERE Alumnos.dni = Matriculas.dni_alumno AND Matriculas.cod_modulo = Modulos.codigo AND Docencia.cod_modulo = Matriculas.cod_modulo AND Docencia.cod_grupo = Grupos.codigo AND Grupos.cod_ciclo = 'DAI');

1 DAW BD Ejercicios resueltos de SQL

12

You might also like