Está en la página 1de 6

Fundamentos de Base de Datos – 2° Cuatrimestre / 2022

Prof. Guillermo Strack - Aux. Patricio Malaga

Trabajo Práctico N◦ 2
SQL
Introducción
Para el desarrollo de este práctico utilizaremos una base de datos de barcos insignias utilizados
durante la Segunda Guerra Mundial. A continuación se presenta el modelo E-R y el modelo
relacional de esta base de datos.

BARCOS(nombre_barco, capitan)
CLASES(clase, tipo, pais, nro_caniones, calibre, desplazamiento)
BARCO CLASE(nombre_barco, clase, lanzado) FK
clase referencia a CLASES(clase)
BATALLAS(nombre_batalla, fecha)
RESULTADOS(nombre_barco, nombre_batalla, resultado) FK
nombre_barco referencia a BARCOS(nombre_barco) FK
nombre_batalla referencia a BATALLAS(nombre_batallas)

La relación BARCOS registra el nombre de los barcos y su capitán. Cada barco pertenece a una
determinada clase, la cual usualmente toma el mismo nombre del primer barco de la clase. La
relación CLASES registra el nombre de la clase, el tipo (acorazado o crucero), el país que
construyó el barco, el número de cañones principales, el calibre (el diámetro del barril del cañón
en pulgadas) y el desplazamiento (capacidad de transporte medida en toneladas). De algunos
barcos se conoce su clase y el año en el cuál fueron puestos en funcionamiento. Esta información
se registra en la relación BARCO_CLASE.
La relación BATALLAS da el nombre y fecha de las batallas y la relación RESULTADOS provee el
estado resultante de cada barco en cada batalla que participó (hundido, averiado, u ok).
Al final del presente enunciado se encuentran los datos de prueba. La creación de las tablas es tarea para el
alumno; al realizar dicha tarea, prestar atención a los nombres de tablas y columnas, al igual que el formato de
las mismas para que las consultas de inserción de datos funcionen correctamente. Por ejemplo, para la tabla
batallas, la columna fecha debe ser de tipo date.

Ejercicios 1. Consultas sobre una relación


Resuelva las siguientes consultas y evalúe sus consultas según los datos proporcionados.
Fundamentos de Base de Datos – 2° Cuatrimestre / 2022
Prof. Guillermo Strack - Aux. Patriocio Malaga

a. Encontrar el nombre de la clase y el país de todas las clases que tengan al menos 10
cañones.
b. Encontrar el nombre de todos los barcos puestos en funcionamiento (lanzados) antes de
1918, pero la columna resultante deberá llamarse Barco.
c. Encontrar el nombre de los barcos hundidos en batalla, junto con el nombre de la batalla
en la cual resultaron hundidos.
d. Encontrar todos los barcos que su nombre sea igual a su clase.
e. Encontrar el nombre de todos los barcos que comienzan con la letra “R”.
f. Encontrar el nombre de todos los barcos cuyo nombre consista de 3 o más palabras (por
ej., King George V).

2. Consultas sobre más de una relación


Resuelva las siguientes consultas y evalúe sus consultas según los datos proporcionados.
a. Encontrar los barcos cuyo peso sea mayor a 35 toneladas.
b. Listar el nombre del barco, desplazamiento y cantidad de cañones, de los barcos que
participaron en la batalla de Guadalcanal.
c. Encontrar aquellos países que dispongan tanto de acorazados como de cruceros.
d. Encontrar aquellos barcos que fueron averiados en alguna batalla pero que luego pelearon
en otra.
e. Encontrar aquellas batallas en las cuales un mismo país participó con al menos tres barcos.

3. Subconsultas y Join
Resuelva las siguientes consultas utilizando al menos una subconsulta. Para cada inciso
considere soluciones alternativas, por ejemplo, utilizando diferentes conjuntos de operadores
EXISTS, IN, ALL y ANY.
a. Encontrar los países cuyos barcos tengan el mayor número de cañones.
b. Encontrar las clases de barcos en las cuales exista al menos un barco de dicha clase
hundido en batalla.
c. Encontrar el nombre de los barcos con cañones de 16 pulgadas de calibre.
d. Encontrar las batallas en las cuales participaron barcos de la clase Kongo.
e. Encontrar el nombre de los barcos que dispongan del mayor número de cañones dentro
de los barcos que utilicen el mismo calibre.
Fundamentos de Base de Datos – 2° Cuatrimestre / 2022
Prof. Guillermo Strack - Aux. Patricio Malaga

f. (JOIN) Escriba una consulta que muestre toda la información disponible (incluyendo
batallas y clase) acerca de los barcos de la relación BARCOS. Todos los barcos deberán ser
mencionados aun cuando no hayan participado en ninguna batalla o no se disponga de
información sobre su clase.

4. Operaciones sobre relaciones


Resuelva las siguientes consultas y evalúe sus consultas según los datos proporcionados.
a. Encontrar el número de clases de acorazados.
b. Encontrar el promedio del número de cañones de las clases de acorazados.
c. Encontrar el promedio del número de cañones de los barcos de tipo acorazado. Obsérvese
que la diferencia entre el inciso b y c se basa en si el promedio se calcula sobre las clases
de acorazados o sobre el número de barcos de tipo acorazado.
d. Encontrar para cada clase el año en el cuál fuera puesto en funcionamiento (lanzado) el
primer barco.
e. Encontrar para cada clase el número de barcos de esa clase hundidos en batalla.
f. Encontrar para cada clase que tenga al menos tres barcos, el número de barcos de esa
clase hundidos en batalla.
g. Encuentre el peso promedio de los cascos disparados por los barcos de cada país. El peso
(en libras) del casco disparado desde un cañón es aproximadamente la mitad del cubo del
calibre (en pulgadas).

5. Modificación de Datos
a. Inserte los siguientes hechos en la base de datos. Los dos acorazados británicos de clase
Nelson (Nelson y Rodney) fueron puestos en funcionamiento en 1927 y tenían 9
cañones de 16 pulgadas y un desplazamiento de 34000 toneladas. Considerando además
que el capitán del Rodney fue George Campell Ross y el Nelson tuvo como capitán a
Sidney Julius Meyrick.
b. Inserte los siguientes hechos en la base de datos. Dos de los tres acorazados italianos de
clase Littorio (Vittorio Veneto e Littorio) fueron puestos en funcionamiento en 28 de
abril de 1940 y el 6 de mayo de 1940 respectivamente; el tercero de dicha clase (el
Roma) fue puesto en funcionamiento en 14 de junio de 1942. Cada uno tenía 9 cañones
de 15 pulgadas y un desplazamiento de 41000 toneladas. El Roma estuvo a cargo del
almirante Carlo Bergamini y tanto el Littorio como el Vittorio Veneto estuvieron a
cargo del
Fundamentos de Base de Datos – 2° Cuatrimestre / 2022
Prof. Guillermo Strack - Aux. Patricio Malaga

almirante Angelo Lachino (aunque en diferentes momentos).


c. Borre de la relación BARCOS todos los barcos que hayan sido hundidos.
d. Borre todas las clases con menos de tres barcos.
Fundamentos de Base de Datos – 2° Cuatrimestre / 2020
Prof. Guillermo Strock - Aux. Fabio Gallo

ANEXO: Queries de inserción de datos de prueba


INSERT INTO clases (clase, tipo, pais, nro_caniones, calibre, desplazamiento) VALUES ('Bismarck', 'acorazado', 'Germany', 8 ,15 ,42000);
INSERT INTO clases (clase, tipo, pais, nro_caniones, calibre, desplazamiento) VALUES ('Iowa', 'acorazado', 'USA', 9, 16, 46000);
INSERT INTO clases (clase, tipo, pais, nro_caniones, calibre, desplazamiento) VALUES ('Kongo', 'crucero', 'Japan', 8, 14, 32000);
INSERT INTO clases (clase, tipo, pais, nro_caniones, calibre, desplazamiento) VALUES ('North Carolina', 'acorazado', 'USA', 9 ,16, 37000);
INSERT INTO clases (clase, tipo, pais, nro_caniones, calibre, desplazamiento) VALUES ('Renown', 'crucero', 'Gt.Britain' ,6, 15, 32000);
INSERT INTO clases (clase, tipo, pais, nro_caniones, calibre, desplazamiento) VALUES ('Revenge', 'acorazado', 'Gt.Britain' ,8, 15, 29000);
INSERT INTO clases (clase, tipo, pais, nro_caniones, calibre, desplazamiento) VALUES ('Tennessee', 'acorazado', 'USA', 12 ,14 ,32000);
INSERT INTO clases (clase, tipo, pais, nro_caniones, calibre, desplazamiento) VALUES ('Yamato', 'acorazado', 'Japan', 9 ,18 ,65000);
INSERT INTO clases (clase, tipo, pais, nro_caniones, calibre, desplazamiento) VALUES ('Suffolk', 'crucero', 'Gt.Britain', 8 , 8 , 10000);
INSERT INTO clases (clase, tipo, pais, nro_caniones, calibre, desplazamiento) VALUES ('Colorado', 'acorazado', 'USA', 9 , 16, 33000);
INSERT INTO batallas (nombre_batalla, fecha) VALUES('Sola Air Station', '1940/04/17');
INSERT INTO batallas (nombre_batalla, fecha) VALUES('North Atlantic', '1941/05/24');
INSERT INTO batallas (nombre_batalla, fecha) VALUES('Guadalcanal', '1942/11/15');
INSERT INTO batallas (nombre_batalla, fecha) VALUES('North Cape', '1943/12/26');
INSERT INTO batallas (nombre_batalla, fecha) VALUES('Surigao Strait', '1944/10/25');
INSERT INTO batallas (nombre_batalla, fecha) VALUES('Murmansk','1942/05/01');
INSERT INTO barcos(id, nombre_barco, capitan) VALUES(1, 'California','SWIRYD' );
INSERT INTO barcos(id, nombre_barco, capitan) VALUES(2, 'Haruna','STEIJMAN');
INSERT INTO barcos(id, nombre_barco, capitan) VALUES(3, 'Hiei','SIMONE');
INSERT INTO barcos(id, nombre_barco, capitan) VALUES(4, 'Iowa','SILVETTI');
INSERT INTO barcos(id, nombre_barco, capitan) VALUES(5, 'Kirishima', 'SEVERINI');
INSERT INTO barcos(id, nombre_barco, capitan) VALUES(6, 'Kongo','KUNISCH');
INSERT INTO barcos(id, nombre_barco, capitan) VALUES(7, 'Missouri','IHITZ');
INSERT INTO barcos(id, nombre_barco, capitan) VALUES(8, 'Musashi','PIETRASANTA');
INSERT INTO barcos(id, nombre_barco, capitan) VALUES(9, 'New Jersey','KWIATKOWSKI');
INSERT INTO barcos(id, nombre_barco, capitan) VALUES(10, 'North Carolina','LANG');
INSERT INTO barcos(id, nombre_barco, capitan) VALUES(11, 'Ramillies', 'LEMA');
INSERT INTO barcos(id, nombre_barco, capitan) VALUES(12, 'Renown','PETERSEN');
INSERT INTO barcos(id, nombre_barco, capitan) VALUES(13, 'Repulse', 'PODVERSICH CHIAVENNA');
INSERT INTO barcos(id, nombre_barco, capitan) VALUES(14, 'Resolution','ITURRE');
INSERT INTO barcos(id, nombre_barco, capitan) VALUES(15, 'Revenge','LEVIN SACCONE');
INSERT INTO barcos(id, nombre_barco, capitan) VALUES(16, 'Royal Oak','LIRIO');
INSERT INTO barcos(id, nombre_barco, capitan) VALUES(17, 'Royal Sovereign', 'SCHROH OLIVERA');
INSERT INTO barcos(id, nombre_barco, capitan) VALUES(18, 'Tennessee','LEVI');
INSERT INTO barcos(id, nombre_barco, capitan) VALUES(19, 'Washington','SERI MEDEI');
INSERT INTO barcos(id, nombre_barco, capitan) VALUES(20, 'Wisconsin', 'LASSALLETTE');
INSERT INTO barcos(id, nombre_barco, capitan) VALUES(21, 'Yamato', 'LONGONI');
INSERT INTO barcos(id, nombre_barco, capitan) VALUES(22, 'Bismarck', 'Ernst Lindeman');
INSERT INTO barcos(id, nombre_barco, capitan) VALUES(23, 'Duke of York', 'LANGE');
INSERT INTO barcos(id, nombre_barco, capitan) VALUES(24, 'Fuso', 'SEPULVEDA');
INSERT INTO barcos(id, nombre_barco, capitan) VALUES(25, 'Hood', 'Lancelot Holland');
INSERT INTO barcos(id, nombre_barco, capitan) VALUES(26, 'HMS King George V', 'John Tovey');
INSERT INTO barcos(id, nombre_barco, capitan) VALUES(27, 'Suffolk', 'Lancelot Holland');
INSERT INTO barcos(id, nombre_barco, capitan) VALUES(28, 'Prince of Wales', 'SMITH');
INSERT INTO barcos(id, nombre_barco, capitan) VALUES(29, 'Rodney', 'George Campell Ross');
INSERT INTO barcos(id, nombre_barco, capitan) VALUES(30, 'Scharnhorst', 'LATINI');
INSERT INTO barcos(id, nombre_barco, capitan) VALUES(31, 'South Dakota', 'PIRO LEW' );
INSERT INTO barcos(id, nombre_barco, capitan) VALUES(32, 'West Virginia', 'Thomas J. Senn');
INSERT INTO barcos(id, nombre_barco, capitan) VALUES(33, 'Yamashiro', 'ILARRESCAPE');
INSERT INTO barco_clase (nombre_barco, clase, lanzado) VALUES('California','Tennessee',1921);
INSERT INTO barco_clase (nombre_barco, clase, lanzado) VALUES('Haruna','Kongo',1915);
INSERT INTO barco_clase (nombre_barco, clase, lanzado) VALUES('Hiei','Kongo',1914);
INSERT INTO barco_clase (nombre_barco, clase, lanzado) VALUES('Iowa','Iowa',1943);
INSERT INTO barco_clase (nombre_barco, clase, lanzado) VALUES('Kirishima','Kongo',1915);
INSERT INTO barco_clase (nombre_barco, clase, lanzado) VALUES('Kongo','Kongo',1913);
INSERT INTO barco_clase (nombre_barco, clase, lanzado) VALUES('Missouri','Iowa',1944);
INSERT INTO barco_clase (nombre_barco, clase, lanzado) VALUES('Musashi','Yamato',1942);
INSERT INTO barco_clase (nombre_barco, clase, lanzado) VALUES('New Jersey','Iowa',1943);
INSERT INTO barco_clase (nombre_barco, clase, lanzado) VALUES('North Carolina','North Carolina',1941);
INSERT INTO barco_clase (nombre_barco, clase, lanzado) VALUES('Ramillies','Revenge',1917); INSERT
INTO barco_clase (nombre_barco, clase, lanzado) VALUES('Renown','Renown',1916);
INSERT INTO barco_clase (nombre_barco, clase, lanzado) VALUES('Repulse','Renown',1916);
INSERT INTO barco_clase (nombre_barco, clase, lanzado) VALUES('Resolution','Revenge',1916); INSERT
INTO barco_clase (nombre_barco, clase, lanzado) VALUES('Revenge','Revenge',1916);
INSERT INTO barco_clase (nombre_barco, clase, lanzado) VALUES('Royal Oak', 'Revenge',1916);
INSERT INTO barco_clase (nombre_barco, clase, lanzado) VALUES('Royal Sovereign','Revenge',1916);
INSERT INTO barco_clase (nombre_barco, clase, lanzado) VALUES('Suffolk','Suffolk',1924);
INSERT INTO barco_clase (nombre_barco, clase, lanzado) VALUES('Tennessee','Tennessee',1920);
INSERT INTO barco_clase (nombre_barco, clase, lanzado) VALUES('West Virginia','Colorado',1920);
INSERT INTO barco_clase (nombre_barco, clase, lanzado) VALUES('Washington','North Carolina',1941);
INSERT INTO barco_clase (nombre_barco, clase, lanzado) VALUES('Wisconsin','Iowa',1944); INSERT
INTO barco_clase (nombre_barco, clase, lanzado) VALUES('Yamato','Yamato',1941);

Fundamentos de Base de Datos – 2° Cuatrimestre / 2020


Prof. Guillermo Strock - Aux. Fabio Gallo
INSERT INTO resultados (nombre_barco, nombre_batalla, resultado) VALUES ('Bismarck','North Atlantic','hundido');
INSERT INTO resultados (nombre_barco, nombre_batalla, resultado) VALUES ('California','Surigao Strait','ok');
INSERT INTO resultados (nombre_barco, nombre_batalla, resultado) VALUES ('Duke of York','North Cape','ok');
INSERT INTO resultados (nombre_barco, nombre_batalla, resultado) VALUES ('Fuso','Surigao Strait','hundido');
INSERT INTO resultados (nombre_barco, nombre_batalla, resultado) VALUES ('Hood','North Atlantic','hundido');
INSERT INTO resultados (nombre_barco, nombre_batalla, resultado) VALUES ('Suffolk','Sola Air Station','averiado');
INSERT INTO resultados (nombre_barco, nombre_batalla, resultado) VALUES ('Suffolk','North Atlantic','ok');
INSERT INTO resultados (nombre_barco, nombre_batalla, resultado) VALUES ('HMS King George V','Murmansk','averiado');
INSERT INTO resultados (nombre_barco, nombre_batalla, resultado) VALUES ('HMS King George V','North Atlantic','ok');
INSERT INTO resultados (nombre_barco, nombre_batalla, resultado) VALUES ('Kirishima','Guadalcanal','hundido');
INSERT INTO resultados (nombre_barco, nombre_batalla, resultado) VALUES ('Prince of Wales','North Atlantic','averiado');
INSERT INTO resultados (nombre_barco, nombre_batalla, resultado) VALUES ('Rodney','North Atlantic','ok');
INSERT INTO resultados (nombre_barco, nombre_batalla, resultado) VALUES ('Scharnhorst','North Cape','hundido');
INSERT INTO resultados (nombre_barco, nombre_batalla, resultado) VALUES ('South Dakota','Guadalcanal','averiado');
INSERT INTO resultados (nombre_barco, nombre_batalla, resultado) VALUES ('Tennessee','Surigao Strait','ok');
INSERT INTO resultados (nombre_barco, nombre_batalla, resultado) VALUES ('Washington','Guadalcanal','ok');
INSERT INTO resultados (nombre_barco, nombre_batalla, resultado) VALUES ('West Virginia','Surigao Strait','ok');
INSERT INTO resultados (nombre_barco, nombre_batalla, resultado) VALUES ('Yamashiro','Surigao Strait','hundido');

También podría gustarte