Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Dado el siguiente esquema de base de datos, resolver las operaciones que se indican posteriormente en CRT y AR, junto
con sus codificaciones en SQL. Tener en cuenta que la codificación de una operación a SQL debe corresponder a su
representación en CRT o AR, y que cada operación puede tener
Se provee un script para la creación y carga de una base de datos de prueba para verificar la corrección de las
operaciones.
Se sugiere trabajar con MySQL 8.0, y, para la interfaz para consultas, con Heidi o con el Workbench de MySQL.
Operaciones
1. Listar DNI, fecha, hora, nombre de ciudad origen, nombre de ciudad destino y razón social de agencia de los viajes
realizados por Cristian Olivera, ordenados por fecha y hora.
dni, fecha, hora, origen.nombreCiudad, destino.nombreCiudad, razonSocial ((o(ciudad) ||cpOrigen = o.codigoPostal viaje ||cpDestino = d.codigoPostal
d(ciudad)) |dni nombre = “Cristian” apellido = “Olivera” (cliente))
2. Listar ordenados por apellido, nombre y DNI a los clientes que tengan viajes con destino a “Bahia Blanca” y a “Carmen
de Patagones”.
SELECT *
FROM cliente
WHERE dni IN
(SELECT dni
FROM viaje INNER JOIN ciudad ON (cpDestino = codigoPostal)
WHERE nombreCiudad = 'Bahía Blanca')
AND dni IN
(SELECT dni
FROM viaje INNER JOIN ciudad ON (cpDestino = codigoPostal)
WHERE nombreCiudad = 'Carmen de Patagones')
ORDER BY apellido, nombre, dni;
3. Listar las agencias que tienen viajes con destino a “Lujan” y también tienen viajes con destino a “San Nicolas”.
SELECT *
FROM agencia a
WHERE EXISTS
(SELECT *
FROM viaje v1 INNER JOIN ciudad d1 ON (v1.cpDestino=d1.codigoPostal)
WHERE v1.razonSocial=a.razonSocial AND d1.nombreCiudad='Lujan')
AND EXISTS
(SELECT *
FROM viaje v2 INNER JOIN ciudad d2 ON (v2.cpDestino=d2.codigoPostal)
WHERE v2.razonSocial=a.razonSocial AND d2.nombreCiudad='San Nicolas');
4. Listar ordenados por apellido, nombre y DNI a los clientes que tengan viajes con origen en “La Plata” pero que no
tengan ninguno con destino a la misma ciudad.
SELECT *
FROM cliente c
WHERE EXISTS
(SELECT *
FROM viaje v1 INNER JOIN ciudad o ON (v1.cpDestino=o.codigoPostal)
WHERE v1.dni=c.dni AND o.nombreCiudad='La Plata'
AND NOT EXISTS
(SELECT *
FROM viaje v2
WHERE v2.dni=c.dni AND v2.cpDestino=v1.cpOrigen))
ORDER BY c.apellido, c.nombre, c.dni;
SELECT *
FROM cliente
WHERE dni IN
(SELECT v.dni
FROM viaje v INNER JOIN ciudad ori ON (v.cpOrigen = ori.codigoPostal)
WHERE ori.nombreCiudad = 'La Plata')
AND dni NOT IN
(SELECT v.dni
FROM viaje v INNER JOIN ciudad des ON (v.cpDestino = des.codigoPostal)
WHERE ori.nombreCiudad = 'La Plata')
ORDER BY apellido, nombre, dni;
5. Listar DNI, nombre y apellido de los clientes que viajaron con todas las agencias. Ordenar por apellido y nombre.
dni, apellido, nombre (Cliente |>dni Viaje ) – dni, apellido, nombre ((dni, apellido, nombre (Cliente |>dni Viaje ) razonSocial (agencia)) –
dni, apellido, nombre, razonSocial (Cliente || Viaje ))
6. Listar razón social y cantidad de viajes de cada agencia en el año 2019. Las agencias que no registren viajes ese año
deben aparecer con 0 viajes.
razonSocialcantidad_viajes=COUNT(fecha, hora, dni) (agencia | 1/1/2019 <= fecha <= 31/12/2019 (viaje))1
7. Listar los datos de los clientes que tengan más de 3 viajes con destino a “Colon”.
SELECT *
FROM cliente c
WHERE EXISTS
(SELECT COUNT(*) AS aColon
FROM viaje v INNER JOIN ciudad d ON (v.cpDestino=d.codigoPostal)
WHERE d.nombreCiudad='Colon' AND v.dni=c.dni
HAVING aColon>3);
clienteaColon=COUNT(*) > 3 (cliente |>dni (viaje |>cdDestino = codigoPostal nombreCiudad = “Colon” (ciudad)))
8. Mostrar dni (en caso de que haya clientes homónimos), la fecha del primer viaje, la fecha del último viaje, la cantidad
total de viajes y la cantidad de empresas distintas por la que viajó el cliente Cristian Olivera.
dnifPrimero=MIN(fecha), fUltimo=MAX(fecha), cantViajes=COUNT(*), cantEmpresas=COUNT(DISTINCT razonSocial) (viaje |>dni cnombre = “Cristian” apellido =
“Olivera” (cliente))
1
En la función de agregación COUNT se especifica contar valores (no nulos) de los campos fecha, hora y dni de viaje.
2
En MySQL, para contar valores de claves compuestas se debe usar la restricción DISTINCT.
Base de Datos Curso Servetto5 de 6
viaje=viaje – {vviaje | ( ccliente)(c.nombre='Cristian' c.apellido='Olivera' c.dni=v.dni)}
UPDATE agencia
SET dirección='Calle 23 Num 243'
WHERE razonSocial='Expedia';
11. Agregar la agencia “El Rapido Argentino” con dirección en “Calle 522 Num 3498-3598”, teléfono “0221-4249748” y
email “rapido.argentino@gmail.com”.
12. Agréguese como cliente y regístrese un viaje por “El Rápido Argentino” desde “La Plata” a “Mar Chiquita”.
viaje=viaje {('2020-06-09', '12:00', 12345678, o.codigoPostal, d.codigoPostal, 'El Rapido Argentino', '') |
ociudad, dciudad, o.nombreCiudad='La Plata' d.nombreCiudad='Mar Chiquita' o.codigoPostal=v.cpOrigen
d.codigoPostal=v.cpDestino)}
viaje=viaje {('2020-06-09', '12:00', 12345678, codigoPostal (nombreCiudad = “La Plata” (ciudad)), codigoPostal (nombreCiudad =
“Mar Chiquta” (ciudad)), 'El Rapido Argentino', '')}