UNQ - Bases de Datos Práctica 4: SQL
B ASES DE D ATOS
1er C UATRIMESTRE DE 2023
Práctica 4
SQL
1. Resumen de SQL (sólo DML)
La sintaxis del DML de SQL puede resumirse de la siguiente manera:
SELECT [ALL | DISTINCT] <atributos>
FROM <tablas>
[WHERE <expresion condicional>]
[GROUP BY <atributo(s)>]
[HAVING <expresion condicional>]
[ORDER BY <columna(s)>]
donde:
<atributos> es la información a obtener de la base de datos.
FROM <tablas> especifica de qué tablas se obtiene la información buscada.
WHERE <expresion condicional> expresa una condición que deben cumplir las filas de la consulta resultante.
GROUP BY <atributo(s)> permite formar consultas agrupadas para extraer información global sobre los grupos
formados.
HAVING <expresion condicional> es condición sobre los grupos formados.
ORDER BY <columna(s)> ordena por una o varias columnas.
DISTINCT: No permite la aparición de filas idénticas.
<expresion condicional>: formada por un conjunto de predicados combinados mediante los operadores lógicos
AND, OR y NOT.
Los predicados utilizados permiten comparar columnas:
• predicados de comparación: =, <>, >, <, >=, <=.
• predicado BETWEEN: permite comprobar si un escalar está en un rango.
• predicado IN: permite comprobar si el valor está dentro de un conjunto.
• predicado IS NULL: permite comprobar si el valor es nulo.
1/4
UNQ - Bases de Datos Práctica 4: SQL
2. Estilo requerido para el código SQL
1. Uso de mayúsculas y minúsculas
a) Palabras reservadas del lenguaje (select, on , where, etc.): MAYÚSCULAS
b) Nombres de tablas: minúsculas y singular
c) Nombres de atributos: minúsculas
2. Organización del código
a) Un renglón para todo lo relativo al SELECT
b) Un renglón para el FROM
c) Un renglón para cada tabla joineada
d) Un renglón para el WHERE
e) Un renglón para cada <expresion condicional> del WHERE
Todos los ejercicios deben resolverse usando SQLFiddle.
Ejercicio 1: Biblioteca online
Nota Importante: Se aconseja resolver los ejercicios en el orden planteado. Cuando se pide el resultado de
una consulta, se debe justificar por qué el resultado tiene el conjunto de columnas y filas resultante.
Relación: libro
isbn titulo
33058621 Inferno
35494238 Cien Años de Soledad
58764384 Venas abiertas de América Latina
38784929 Aeropuerto
Relación: ejemplar
cod_ejemplar isbn_libro edición
503 33058621 2
785 33058621 4
065 35494238 1
098 38784929 3
223 58764384 3
101 58764384 1
Relación: prestamo
cod_ejemplar cod_socio fecha_prestamo fecha_devolución
503 78 03/05/2012 08/05/2012
223 54 21/01/2013 23/01/2013
785 78 21/02/2013
101 03 17/11/2013 18/11/2013
Relación: socio
cod_socio nombre_y_apellido fecha_ingreso monto_cuota matricula pais
78 Sheldon Cooper 03/05/2011 12 4 Brasil
54 Howard Wolowitz 21/01/2011 16 0 Argentina
03 Amy Farrah Fowler 17/02/2011 5 10 Argentina
Relación: nacionalidad
nombre_pais nacionalidad
Argentina Argentina
Brasil Brasilera
Perú Peruana
Mexico Mexicana
2/4
UNQ - Bases de Datos Práctica 4: SQL
1. DDL/DML
(a) Observe en el archivo [Link] cómo se crean las
relaciones y se insertan los datos.
(b) Modifique la relación “ejemplar” agregando como atributo el año de la Edición.
(c) Modifique la relación “socio” agregando un atributo que permita guardar el domicilio
del Socio.
(d) Actualice la relación “socio” incrementando en 10 pesos el monto de la cuota.
(e) Actualice la nacionalidades de Amy Farrah Fowler a Mexicana y la de Howard Wolo-
witz a Colombiana.
(f) Elimine la nacionalidad Peruana.
(g) Elimine todos los ejemplares que sean de la 3ra Edición de cualquier Libro.
2. DML
2.b) Proyección
I. Indicar cuál es el resultado de las siguientes consultas y analizar que representa
cada una.
a) SELECT cod_socio FROM prestamo
b) SELECT cod_ejemplar FROM prestamo
c) SELECT cod_ejemplar,cod_socio FROM prestamo
Q
II . ¿El resultado de <SELECT cod_socio FROM prestamo> es el mismo que el de <cod_socio> (prestamo
¿Por qué?
III . Sea R =< r1 , ..., rn >. ¿Cómo es el esquema de las siguientes operaciones?
a) SELECT r1 FROM R
b) SELECT r1 ,r2 FROM R
IV . Calcular el nombre y apellido de todos los socios.
2.c) Atributos calculados
I. Resolver las siguientes consultas:
a) Obtener la duración (en cantidad de días) de cada préstamo.
b) Calcular cuánto paga cada socio por año, sabiendo que la matrícula se paga una
vez al año y la cuota es mensual.
2.d) Selección
I. Indicar cuál es el resultado de las siguientes consultas y analizar que representa
cada una.
3/4
UNQ - Bases de Datos Práctica 4: SQL
a) SELECT cod_socio FROM prestamo WHERE fecha_prestamo>’31/01/2012’
b) SELECT cod_ejemplar FROM prestamo WHERE fecha_prestamo>’31/01/2012’
¿Cómo son estos resultados con respecto a los del ejercicio de la Proyección?
II . Sea R =< r1 , ..., rn >. ¿Cómo es el esquema de las siguientes operaciones?
a) SELECT r1 FROM R WHERE rn < r2
b) SELECT r1 ,r2 FROM R WHERE rn < r2
III . Obtener el ISBN de los ejemplares de la segunda o tercera edición.
2.e) Join Natural
I. Indicar cuál es el resultado de las siguientes consultas y analizar que representa
cada una.
a) SELECT * FROM prestamo NATURAL JOIN ejemplar
b) SELECT * FROM prestamo NATURAL JOIN socio
II . ¿Tiene sentido calcular: SELECT * FROM ejemplar NATURAL JOIN socio? justificar
III . ¿Qué condiciones deben cumplir R1 y R2 para que tenga sentido la consulta SELECT
* FROM R1 NATURAL JOIN R2 ? ¿Cuál es el esquema resultante de esa consulta?
IV . ¿Qué condiciones deben cumplir R1 y R2 para que tenga sentido la consulta SELECT
* FROM R1 NATURAL JOIN R2 WHERE B ? ¿Cuál es el esquema resultante?
V. Resolver las siguientes consultas:
a) Obtener el nombre de los libros que tienen ejemplares de la segunda o tercera
edición.
b) Obtener cuántos prestamos que tuvo cada socio el último verano.
2.f) Producto Cartesiano
I. Indicar cuál es el resultado de las siguientes consultas y analizar que representa
cada una.
a) SELECT * FROM prestamo JOIN socio
b) SELECT * FROM ejemplar JOIN socio
II . ¿Qué condiciones deben cumplir R1 y R2 para que tenga sentido las consultas:
a) SELECT * FROM R1 JOIN R2 ?
b) SELECT * FROM R1 JOIN R2 where B ?
¿Cuál es el esquema resultante de cada una?
2.g) Join con condición
I. Indicar cuál es el resultado de las siguientes consultas y analizar qué representa
cada una.
a) SELECT * FROM prestamo JOIN socio ON fecha_ingreso < fecha_prestamo
b) SELECT * FROM ejemplar JOIN socio ON fecha_ingreso <’01/02/2008’
4/4