Ejercicios Prácticos de SQL: Consultas DDL, DML y Agrupaciones Complejas

Informática y Telecomunicaciones3,31 KB

Definición de Tablas (DDL)

Creación de la tabla PUNTAJES

CREATE TABLE PUNTAJES (
    idPlato INT NOT NULL,
    idJurado INT NOT NULL,
    fechaHora DATETIME NOT NULL,
    puntaje INT NOT NULL,
    CONSTRAINT PK_Puntajes PRIMARY KEY (idPlato, idJurado, fechaHora),
    CONSTRAINT FK_Puntajes_Plato FOREIGN KEY (idPlato) REFERENCES PLATOS(idPlato),
    CONSTRAINT FK_Puntajes_Jurado FOREIGN KEY (idJurado) REFERENCES JURADOS(idJurado),
    CONSTRAINT CK_Puntajes_Puntaje CHECK (puntaje BETWEEN 0 AND 10)
);

Creación de la tabla PLATOS

CREATE TABLE PLATOS (
    idPlato INT,
    nombrePlato VARCHAR(100) NOT NULL,
    tipo VARCHAR(20) NOT NULL,
    idEquipo INT NOT NULL,
    CONSTRAINT PK_Platos PRIMARY KEY (idPlato),
    CONSTRAINT FK_Platos_Equipo FOREIGN KEY (idEquipo) REFERENCES EQUIPOS(idEquipo),
    CONSTRAINT CK_Platos_Tipo CHECK (tipo IN ('entrada', 'principal', 'postre'))
);

Modificación de Esquema y Consultas de Datos

2. Modificar la columna ColorDistintivo

Permite editar la columna colorDistintivo para que admita texto de hasta 25 caracteres:

ALTER TABLE Equipos ALTER COLUMN colorDistintivo VARCHAR(25);

3. Información detallada de platos de tipo 'entrada'

Lista el nombre del equipo, el nombre del plato, el nombre del jurado y el puntaje para todas las entradas:

SELECT eq.nombreEquipo, p.nombrePlato, j.nombreJurado, pu.puntaje
FROM PUNTAJES pu
INNER JOIN PLATOS p ON pu.idPlato = p.idPlato
INNER JOIN EQUIPOS eq ON p.idEquipo = eq.idEquipo
INNER JOIN JURADOS j ON pu.idJurado = j.idJurado
WHERE p.tipo = 'entrada';

4. Puntaje promedio otorgado por jurado

Muestra la calificación media asignada por cada integrante del jurado durante el año anterior:

SELECT j.nombreJurado, AVG(pu.puntaje) AS promedio
FROM PUNTAJES pu
INNER JOIN JURADOS j ON pu.idJurado = j.idJurado
WHERE YEAR(pu.fechaHora) = YEAR(GETDATE()) - 1
GROUP BY j.nombreJurado;

5. Equipos con más de un postre presentado

Lista la información de los equipos que han registrado más de una preparación dulce:

SELECT e.nombreEquipo, e.colorDistintivo
FROM EQUIPOS e
INNER JOIN PLATOS pl ON pl.idEquipo = e.idEquipo
WHERE pl.tipo = 'postre'
GROUP BY e.nombreEquipo, e.colorDistintivo
HAVING COUNT(pl.idPlato) > 1;

6. Equipos con puntajes consistentes (sin calificaciones bajo 8)

Lista sin duplicados los equipos que nunca han obtenido una nota inferior a 8 puntos en sus platos:

SELECT DISTINCT e.idEquipo, e.nombreEquipo
FROM EQUIPOS e
INNER JOIN PLATOS pl ON pl.idEquipo = e.idEquipo
INNER JOIN PUNTAJES p ON p.idPlato = pl.idPlato
GROUP BY e.idEquipo, e.nombreEquipo
HAVING MIN(p.puntaje) >= 8;

7. Los 3 platos con mayor puntaje acumulado en el año en curso

Obtiene el podio con el nombre y equipo correspondiente a los platos mejor evaluados durante el presente ciclo:

SELECT TOP 3 pl.nombrePlato, e.nombreEquipo, SUM(p.puntaje) AS puntajeAcumulado
FROM PUNTAJES p
INNER JOIN PLATOS pl ON p.idPlato = pl.idPlato
INNER JOIN EQUIPOS e ON pl.idEquipo = e.idEquipo
WHERE YEAR(p.fechaHora) = YEAR(GETDATE())
GROUP BY pl.nombrePlato, e.nombreEquipo
ORDER BY puntajeAcumulado DESC;

Descargar

PDF Word HTML